load-on-startup
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
5)当值相同时,容器就会自己选择顺序来加载。
所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
error-page的配置
<error-page>
<error-code>404</error-code>
<exception-type>java.lang.Exception</exception-type>//二选一
<location>/error404.jsp</location>errorPage大小必须超过1KB,否则在IE下会报异常
或者设置<% response.setStatus(200); // 200 = HttpServletResponse.SC_OK%>这样设置此页面为正常页面
错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br>
信息: <%=request.getAttribute("javax.servlet.error.message")%> <br>
异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br>
</error-page>
session-config
<session-config>
<session-timeout>30</session-timeout>
//用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
5)当值相同时,容器就会自己选择顺序来加载。
所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
error-page的配置
<error-page>
<error-code>404</error-code>
<exception-type>java.lang.Exception</exception-type>//二选一
<location>/error404.jsp</location>errorPage大小必须超过1KB,否则在IE下会报异常
或者设置<% response.setStatus(200); // 200 = HttpServletResponse.SC_OK%>这样设置此页面为正常页面
错误码: <%=request.getAttribute("javax.servlet.error.status_code")%> <br>
信息: <%=request.getAttribute("javax.servlet.error.message")%> <br>
异常: <%=request.getAttribute("javax.servlet.error.exception_type")%> <br>
</error-page>
session-config
<session-config>
<session-timeout>30</session-timeout>
//用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。
如果session-timeout 元素的值为零或负数,则表示会话将永远不会超时。
</session-config>
HttpSessionListener HttpSessionBindingListener HttpSessionBindingEvent
web.xml调用顺序
context-param -> listener -> filter -> servlet
context-param -> filter -> listener -> servlet //配置顺序
</session-config>
HttpSessionListener HttpSessionBindingListener HttpSessionBindingEvent
web.xml调用顺序
context-param -> listener -> filter -> servlet
context-param -> filter -> listener -> servlet //配置顺序
http1.1
request.getRequestDispatcher("/index.jsp").forward(request, response);//200
response.sendRedirect("/MyWebXML/index.jsp");//302
response.setStatus(302);重定向
response.setHeader("location", "/MyWebXML/index.jsp");//等同于sendRedirect();
request.getHeader("User-Agent")//获取用户所用的浏览器信息
setHead替换已有报头,addHead不替换,只新增一个报头
响应头
响应报头必须在任何文档内容发送到客户端钱发送
response.setHead("Cache-Control","no-cache");
response.setHead("Pragma","no-cache");//Http1.0方法
response.setHead("Cache-Control","max-age='+age);//设置缓存过期时间
response.setHead("Expires",time);//设置缓存过期时间
response.setHeader( "Refresh" , "5;URL=http://www.163.com");//指定5秒之后连接新网址
response.setHeader( "Retry" , "5" );//指定5秒之后重新连接
下载过程
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("UTF-8");
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Content-Disposition", "attachment;
filename=termInf.txt");
Cookie c.setMaxAge(age);如果不设置Age,则默认在浏览器关闭后此cookie销毁.
c.setPath("/");设置服务器中所有路径都能访问到此Cookie.浏览器间不共用Cookie.
若不设置,cookie默认只能被此servlet和此servlet所在路径和子路径的其他servlet
访问,而不能被不同父路径的servlet访问.
从客户端获取来的Cookie只能查看其Name和Value,不存在其他值.
第二次存入Cookie时会覆盖同名Cookie.
禁用cookie的浏览器会忽略set-cookie首部.
session
session在第一次request.getSession();时被创建.当首次访问JSP时候Session也被默认创建了,因为JSP内
置了session对象.默认session的存活周期为30分钟.
在浏览器关闭后session则会被销毁.session所创建的cookie默认为内存级cookie.
session.invalidate();丢弃session.
PrintWriter
response.getWriter();
response.setCharacterEncoding( "UTF-8" );
* This method has no effect if it is called after
* <code>getWriter</code> has
been
* called or after the response has been committed.
设置字符编码必须在getWriter()之前设置,不然不起作用。
this.getServletContext().getResourceAsStream("/spring.jar");
从当前项目的根路径得到某文件。
this .getServletConfig().getInitParameter(name);
获取web.xml配置的初始化参数。 初始化完成后才能访问servletConfig
servletConfig&ServletContext
servletConfig.getInitParameter();//得到的是init-param
servletContext.getInitParameter();//得到的是context-param
Listener
HttpSessionListener/HttpSessionBindingListener/HttpSessionAttributeListener/ServletContextListener/ServletRequestListener
HttpSessionBindingListener对于此listener,可以用entity继承此监听器,当此监听器被加入到
session的参数中时会触发valueBound()方法,去除时触发valueUnbound().
HttpSessionBindingListener不需要在web.xml中配置.
requestDispatcher
请求转发后request所有的变量parameter也会随着request传到指定下一个处理servlet或JSP中.
encodeURL&encodeRedirectURL
response的方法,只能对响应进行URL重编码
不能对静态页面进行URL重写,所以要使用URL重写必须使用动态页面JSP。
session
request.getSession().setMaxInactiveInterval( interval);//单位是秒
<session-config >
<session-timeout >1</ session-timeout></session-config > //单位为分session.invalidate();//此方法调用后再访问session的属性将会报异常,不过仍然能获取session的ID,因为session只是设为无效状态,并没有被内存回收机制回收.
session.setMaxInactiveInterval(0);//可能是设置处理完这次请求开始之后下次访问新的session,程
序运行完毕后才开始计算超时时间。
JSP,EL表达式
<%= session.isNew()%>
相当于out.print(session.isNew());//别再表达式后面加分号,否则后果可能很严
重.
不能在此表达式中加入返回void的表达式.
<%! int i=0;%>全局变量的声明.
jsp jsp隐藏元素
jspWriter out ,HttpServeltRequest request, HttpServletResponse response,Object page,PageContext
pageContext, ServletConfig config, ServletContext application,HttpSession session.
jsp注释
java 注释
<%--This is a annotation--%>
html注释
<!--this is a annotation-->
jsp方法
jspInit(),jspDestory(),_jspService(),无下划线的可以覆盖,有下划线的不能覆盖
第一个用户进来请求时,JSP才会被转换成JAVA.
<%=pageContext.getAttribute("name" ,PageContext.APPLICATION_SCOPE) %>
获取某个级别的attribute
<%=pageContext.findAttribute("name" ) %>
禁用Scriptlet
<jsp-config >
<jsp-property-group >
<url-pattern >*.jsp</url-pattern >
<scripting-invalid>true</scripting-invalid >
</jsp-property-group >
</jsp-config >
javaBean
<jsp:useBean id= "p" class ="com.fuiou.entity.Employee" scope="request"
type ="com.fuiou.entity.Person"/>
< jsp:setProperty property ="name" name ="p" value= "Ted" />
<jsp:getProperty property="name" name="p"/>
这样写SetProperty总是执行
<jsp:useBean id= "p" class ="com.fuiou.entity.Employee" scope="request"
type="con.fuiou.entity.Person" > 如果使用了type但没有class则此bean必须已经存在.
<jsp:setProperty property="name" name="p" param ="name" />//param参数赋值
</jsp:useBean>//这样写在bean不存在时才会赋值.
默认的scope是Page
<jsp:setProperty property="*" name="p" />
//自动匹配和P所有属性名相同的参数并赋值给它.
EL表达式
所有JSP隐含对象中,除了pageContext外,其它的都是map类的映射.
${person.name}和${person['name']}一样
${person[name]}这样的话,会自动寻找attribute中有没有名为name的属性.
${paramValues.age[1]}获取参数值
${headerValues.cookie[0]}获取头信息
${cookie.JSESSIONID.value}获取指定cookie的值
${initParam}上下文初始化参数//是servletContext的参数context-param,这容易混淆
EL的隐含对象有:
pageScope,requestScope,sessionScope,applicationScope,param,paramValues,cookie,
header,headerValues,pageContext,initParam 除了pageContext,其它的都是映射.
*Scope只是某应用作用域上的属性映射,并不能访问其对象方法.
${not
empty list} 此list!=null且size!=0.如果只是对象则判断此应用是否指向了某对象.
//若lists为无效引用,则页面什么也不显示,而scriptlet则显示null.
在算数运算中,EL将null表示成0,在逻辑运算中将null表示成false;
include区别
<%@include file="include.jsp"%>
转化时插入JSP代码,可能会生成两个head和body.
<jsp:include page="include.jsp">
运行时插入include.jsp的响应,属于
request.getRequestDispatcher("include.jsp").include(request,response);
forward和response不能共用,否则会报IllegalStateException异常.
<jsp:param>只可能放在<jsp:include>或者<jsp:forward>中.
<jsp:forward>会清空缓存,这样页面只显示forward中的值.
JSTL表达式
CHOOSE,SET,IMPORT,REMOVE,PARAM URL
<c:choose>
<c:when test=" ${not
empty dogs}">
${dogs.size()}
</c:when>
<c:otherwise>
NO DOGS
</c:otherwise>
</c:choose>
<c:set var="my" value="${dogs.get(0)} "/>
${pageScope.my.name}//默认作用域为page级
< c:set target ="${dogs.get(1)} " value ="${dogs.get(0).name} " property ="name" />
给target的name属性赋值.
< c:remove var ="dogs"/>//dogs为直接量
< c:import url ="http://www.163.com"/>//可以包含外部URL
<c:import url="include.jsp" >
<c:param name="myName" value="AillanJen"/>
</c:import>//同<jsp:include>
<c:url value="index.jsp" var="urls">//URL重写
<c:url value="/index.jsp" var="urls" >
<c:param name="name" value="${tt} "></c:param >
</c:url>//配置参数
Web-INF下的资源不能直接访问.
<c:foreach>的varStatus属性
count:当前元素在集合中的序号,从1开始计数。index:当前元素在集合中的索引,从0开始计数。
first:当前元素是否是集合中的第一个元素。
last:当前元素是否是集合中的最后一个元素。