|
第六章 Servlet Context
一.ServletContext对象是web应用的运行时表示,可通过其实现web应用中的资源共享。
ServletContext与Servlet没有任何关系所以在xml中配置不在<servlet>中。
二.ServletContext API
1.this.getServletContext(); 访问ServletContext对象
2.ServletContext提供4个如下功能
(1)只读访问上下文初始化参数:getInitParamenter();
(2)读写访问应用级属性:
setAttribute(name,value);
getAttribute(name,value);
getAttributeNames();
*此类功能类似于map。 Set时若key相同则相当于作了修改,get…返回的是一个object类,需相知转换。
(3)只读访问应用级文件资源
getResource(path):url
getResourceStream(path):InputStream
(4)写访问应用级日志文件:log(String),log(String,throwable)
三.访问共享的运行时属性
变相实现了不同Servlet类中的参数传递
getAttribute(key);
setAttribute(key,object value);
四.web应用的生命周期
1.web容器启动时初始化每个web应用
2.web容器关闭时销毁每个web应用
3.创建∵,监听这些事件,只有整个web应用才会有listener,servlet中没有。
*如何设置Context的参数?
<web-app>
<display-name>Serlvet Context Example</display-name>
<description>
This Web Application demonstrates application-scoped variables
</description>
<context-param>
<param-name>catalogFileName</param-name>
<param-value>/WEB-INF/catalog.txt</param-value>
</context-param>
*访问ServletContext的接口
ServletContext context = sce.getServletContext();
String catalogFileName = context.getInitParameter(“catalogFileName”);
是在GenericServlet类中实现的
*用代码实现监控Web应用的生命周期
可以创建ServletContextListener接口的实现监.听Web应用生命周期事件
第七章 web应用的异常处理
一.web应用中如下错误码:
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
二.描述Web应用中用声明方式来进行错误处理的两种方法
使用error-page元素声明一个给定HTTP状态码的处理器
<error-page>
<error-code>404</error-code>
<location>/error/404.html</location>
</error-page>
可以声明任意数量的错误页面,但一个给定的状态码只能对应一个页面使用exception-type元素声明给定Java异常的处理器
<error-page>
<exception-type>
java.lang.ArithmeticException
</exception-type>
<location>/error/ExceptionPage</location>
</error-page>
可以声明任意数量的错误页面,但一个给定的异常类型只对应一个页面不能使用父类捕获多种异常
三.描述记录异常日志的方法,都位于那些接口?
记录异常日志的两个log方法:
log(String) – 将消息输出到日志文件
log(String, Throwable)– 将消息和异常栈的跟踪信息输出到日志文件
GenericServlet:
log(message:String)
log(message:String, Throwable:excp)
ServletContext:
log(message:String)
log(message:String, excp:Throwable)
第八章 会话管理(session)
一.概述
1.HTTP是无状态的,因为每个请求和响应的连接都是独立的。从一个请求到另一个请求,HTTP会忘记以前的请求
2.web容器中的会话:在服务器端为特定的客户保存数据的一种机制
session区分的是客户端而不是请求,同一客户的对此请求均可访问session
【此处有图片,可以到JAVA 私塾官网下载完整笔记:w ww.javass.cn】
*session判断是否是同一客户端的依据是IE浏览器(浏览器生成的head不同,对于session是不同客户)关闭IE后再打开一个即为新的客户端。
*session response的时候在cookie中带有JSessionID,HTTP协议规定,每次请求时都要带cookie,这就为统一客户端的不同请求提供了打开session的钥匙。
request session servletContext 三者独立无关系,均有 setAttribute(String,object); getAttribute(String); removeAttribute();
request发送时带有 a. head
b. paramenter
c. attribute
d. cookie
二.会话API
1.HttpServletRequest接口 getSession()
getSession(create boolean)
HttpSession接口:getID();isNew()
在parent中开出的子窗口发送的请求还属于parent客户端。
2.销毁会话
(1)在部署描述文件中销毁
<session-config>
<session-timeout>10</session-timeout>
</session-config>
(2)用容器销毁,可以保证所有事情都处理完才销毁。
SetMaxInactiveInterval(int);最后一次操作session后,多长时间没操作就会清空session。
若配置文件与程序中都定义了timeout,依程序中为准。
*使用invalidate()销毁时可能引起其他servlet冲突,所以一般不用。
三.使用cookie会话管理
四.使用url重写管理方法(由用户设置阻止cookie文件时)
*会话是线程不安全的,并发会出现
*会话:Web容器可为每个用户保存一个"会话对象",用来存储特定用户的会话信息
*销毁会话:
可使用部署描述符控制所有会话的生命周期:
<session-config>
<session-timeout>10</session-timeout>
</session-config>
控制特定会话对象的生命周期——HttpSession接口:
invalidate()
getCreationTime() :long
getLastAccessedTime() :long
getMaxInactiveInterval() :int
setMaxInactiveInterval(int)
*读写cookie实例
通过将Cookies加到响应对象中,可将其存储在客户计算机上:
写:String name = request.getParameter("firstName");
Cookie c = new Cookie("yourname", name);
response.addCookie(c);
可从请求对象中检索Cookies:
读:- Cookie[] allCookies = request.getCookies();
- for ( int i=0; i < allCookies.length; i++ ) {
- if ( allCookies[i].getName().equals(“yourname”) ) {
- name = allCookies[i].getValue();
- }
- }
复制代码 * URL重写:
Cookie不能使用时,可使用URL重写 客户在每个URL的后面追加额外的数据服务器将此标识符与其存储的有关会话数据相关联 使用如下URL:
ht tp://host/path/file;jsessionid=123
|
|