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&encode
RedirectURL
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:当前元素是否是集合中的最后一个元素。