赞
踩
基础从Broswer(浏览器)向Server(服务器)发送数据,称为请求,英文名:request
从Server(服务器)向Broswer(浏览器)发送数据,称为相应,英文名:response
3.Tomcat需要配置的环境变量:
开发步骤是怎样的?
第一步:在webapps下新建一个新目录,起项目名字。
第二步:在crm下创建一个目录:WEB-INF
第三步:在WEB-INF目录下新建一个目录:classes
第四步:在WEB-INF目录下新建一个目录:lib(非必须)
第五步:在WEB-INF目录下新建一个文件:web.xml
注意:这个文件是必须的,名字必须叫做web.xml,这个文件必须放在这里,这是个配置文件,存放路径和类名的对应关系。
这个文件最好从别的webapp中拷贝,最好别手写,没必要。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0"
metadata-complete="true">
</web-app>
第六步:编写一个java小程序,这个java小程序也不能随便写,必须实
现servlet接口。
第七步:编译我们写的servlet程序。
第八步:编译后拷贝到WEB-INF目录下的classes文件夹。
第九步:编写web.xml配置信息
第十步:编译
第十一步:拷贝class文件及其目录到classes中。
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>lapTop.Servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet-name>中随便写
<servlet-class>非常重要,这里填java小程序所在的路径
<url-pattern>以/开头,在浏览器地址栏输入,以上的是:http://127.0.0.1:8080/oa/first
<servlet></servlet>中添加<load-on-startup></load-on-startup>
一个webapp只有一个ServletContext对象。
Tomcat在启动时创建ServletContext对象,关闭时销毁
ServletContext常用方法
<String>
getContextPath()
获取应用的根路径(项目名)
//获取web目录下某个文件的真实路径。注意:这个文件是在web目录下的
String realPath = application.getRealPath("/index.jsp");
要调用ServletContext中的方法只能通过ServletContext对象来调用。
ServletContext常用方法(二)
application.setAttribute(String name,Object obj);
设置ServletContext属性,相当于缓存,全局共享。
context.getAttribute(String name);
获取ServletContext属性,只要在一个Servlet里创建了,那么在任何一个Servlet中都可以访问到这个属性的值。
默认会在WEB文件夹下寻找index.html/index.jsp/index.htm
或者在web.xml手动配置:
<welcome-file-list>
<welcome-file>XXX.html</welcome-file>
</welcome-file-list>
(默认从webapp目录根下寻找)
可以设置多个欢迎页,欢迎页之间越靠上面的越高优先级。
可以设置动态的Sevlet为欢迎页
<welcome-file-list>
<welcome-file>http</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>http</servlet-name>
<servlet-class>com.httpservlet.HttpServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>http</servlet-name>
<url-pattern>/http</url-pattern>
</servlet-mapping>
前端提交数据的格式:username=abc&userpwd=abc&hobby=1&hobby=2&hobby=3
采用 Map<String,String[]>
的方式储存前端的key和value
如果是以 Map<String,String>
的格式储存,那么后面key的value会覆盖前面的。
前端表单提交的数据类型都是String
HTTPServletRequest接口常用方法:
Map<String,String[]> getParameterMap() //获取Map
Enumeration<String> getParameterNames() //获取Map集合中所有的key
String[] getParameterValues(String name)//根据key获取Map集合的value
String getParameter(String name) //获取value这个一维数组中的第一个元素 用的最多
请求跳转:
Servlet对象不能由我们java程序员来new,必须使用HttpServletRequest对象的请求转发器:
RequestDispatcher getRequestDispatcher(String path)
返回RequestDispatcher类型
RequestDispatcher对象有forward(request,response)方法可以传递当前servlet的request和response对象
这样就能共享请求域中的内容。
结合一起,最终版本:
request.getRequestDispatcher(String path).forward(request,response);
path里面的是web.xml里配置的servlet-mapping中的url-pattrn。
转发的内容不一定是servlet,可以是html…等等
注意:path以"/"开始,不加项目名。
String getParameter(String name)
和
Object getAttribute(String name)
的区别是什么?
第一个是:浏览器中用户发送过来的数据。
第二个是:servlet请求域中绑定的数据。
ServletRequest其他方法:
getRemoteAddr() 获取客户端IP地址
getContextPath()获取应用的根路径
getMethod()获取请求方式
getRequestURI()获取请求的URI:/项目名/…
getServletPath()获取servlet path: 不带项目名
1、设计数据库:
2、设计页面:
3、功能:
4、实现功能:
EZ for me
import jakarta.servlet.annotation.WebServlet;
<servlet-name>
<url-pattern>
<load-on-startup>
高耦合,需要在java程序中写前端代码。
解决:
会话,英文名:session
session的原理:
为什么浏览器关闭时会session失效:
有什么session失效的方法:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
浏览器禁用cookie:
直接写,是在html中输出,,翻译成out.print(“”);直接翻译到双引号里,被java程序当成字符串打印到网页上。
<%%>中的是java代码(记得加;分号)
<%!%>中的代码翻译到service方法之外,用来定义成员变量,方法,静态代码块等等
<%=%>中的代码翻译到out.print()当中,相当于输出java变量,翻译成out.print(),没有""
<%@page %>
JSP九大内置对象
Expression Language 是jsp中的一部分,它有三大功效:
EL表达式的格式:${表达式}
表达式写的是setAttribute时的name!!不要加""双引号
EL表达式要输出某个类中具体的值,用.点号衔接,这里衔接的是get方法,与成员变量无关。
EL表达式从域中取数据时按照域从小到大的顺序取数据。
pageContext < request < session < application
EL表达式有四个隐含的域:
EL表达式取数据的时候有两种方法:
.
[“”]
[] 在中括号间输入数组元素下标还可以取出该下标的元素。例如 ${usernames[0]}
${depts[0].dname}
来获取0下标的数组中的dname值。如何局部忽略EL表达式?:
通过EL表达式获取应用的根:
EL表达式隐含对象:
# JSTL标签库
* 什么是JSTL标签库?
* 帮助我们减少java代码
* 用法:使用 `<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>导入核心库`
* ```
<c:forEach items="${list}" var="d">
部门编号:${d.deptno}<br>
部门名称:${d.dname}<br>
</c:forEach>
items是要遍历的集合(可用EL表达式),var是储存集合中元素的变量
<c:if test="${empty param.username}">
<h1>用户名不能为空!</h1>
</c:if>
test里的值必须是boolean类型,可以使用EL表达式。
<c:forEach var="i" begin="0" end="10" step="1">
i:${i}<br>
</c:forEach>
相当于for(int i = 0;i <= 10;i++){System.out.println(i)}
<c:forEach var="i" begin="0" end="10" step="1" varStatus="v">
编号${v.count} i:${i}<br>
</c:forEach>
<c:choose> <c:when test="${param.age < 12}"> 儿童 </c:when> <c:when test="${param.age < 18}"> 青少年 </c:when> <c:when test="${param.age < 30}"> 青年 </c:when> <c:when test="${param.age < 55}"> 中年 </c:when> <c:otherwise> 老年 </c:otherwise> </c:choose>
类似于if else if else
改造oa
使用EL表达式和JSTL标签库改造oa项目。
了解:
HTML中有个 <base href="">
标签,可以设置项目的根路径
凡是路径中没有以"/"开始的,都会在前面加上base标签。
动态获取base中所有的路径(使用EL表达式)
协议:${pageContext.request.scheme} http
服务器名:${pageContext.request.serverName} localhost
端口号:${pageContext.request.serverPort} 8080
项目名: ${pageContext.request.contextPath} oa
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.listener.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.listener.ListenerTest</listener-class>
</listener>
@WebListener
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。