日期:2014-05-16  浏览次数:20342 次

HF servlet&jsp 前6章要点总结

今天有时间把前6章主要讲servlet的内容坐下总结。好了,开工:

?

1.谁来负责这些任务

?

任务 web服务器 容器 servlet
创建请求和响应对象 ? 在开始线程之前创造 ?
调用service()方法 ?

service()方法调用

?

?
开始一个新线程来处理请求 ? 开始一个servlet进程 ?
把响应对象转换为一个HTTP响应 ? 容器由响应对象中的数据生成HTTP响应流 ?
了解HTTP 通过HTTP与客户浏览器对话 ? ?
把html增加到响应对象 ? ? 这是提供给客户的动态内容
有响应对象的一个引用 ? 容器把它交给servlet 用它打印响应
在部署描述文件中查找URL ? 找到对应请求的适当servlet ?
删除请求响应对象 ? servlet一旦结束就删除请求和响应对象 ?
协调生成动态内容 知道如何转发到容器 知道要调用谁 ?
管理生命周期 ? 调用服务器方法 ?
名字和部署描述文件中的<servlet-class>元素匹配 ? ? 任何公共类

?

?

2.servlet生命周期的3大重要时刻

?

?

?

??

?

? 何时调用 作用 是否覆盖
init servlet实例被创建之后,并在servlet能为客户请求提供服务之前 使你在servlet处理客户请求之前有机会对其初始化 可以
service 当第一个请求来临时,容器会开始一个新线程 这个方法查看请求,确定HTTP方法,并调用 不可以
doGet or doPost service根据请求的HTTP方法决定 从这里开始你的代码 至少要覆盖一个

?

3.HttpServletResponse要点

最常使用的是setContentType()和getWriter()。

利用getWriter()方法可以完成字符I/O,向流写入HTML。

还可以使用响应来设置首部,发送错误,以及增加cookie。

请求重定向和请求分派是两码事。请求分派是在服务器端发生的,而重定向在客户端进行。

?

4.servlet初始化参数和上下文参数

?

上下文参数 servlet参数
部署描述文件

不在servlet中

<web-app>

<context-param>

<param-name></param-name>

<param-value></param-value>

</context-param>

</web-app>

在servlet中

<servlet>

<servlet-name></servlet-name>

<servlet-class></servlet-class>

<init-param>

</init-param>

</servlet>

servlet代码
getServletContext().getInitParameter("foo") getServletConfig().getInitParameter()

?

?

5.URL重写

在写至响应的HTML中,URL重写把会话ID增加到其中所有的URL的最后。

如果客户不接受cookie,URL重写会自动发生,但是必须显式的对所有URL编码。

要编码一个URL,需要调用response.encodeURL(aString).

  out.println("<a href =\""+response.encodeURL("/BeerTest.do")+"\">Click Me</a>");

?没有办法对静态页面完成自动URL重写,所以,如果你依赖会话,就必须使用动态页面。

?

6.关键的HttpSession方法

?

? 做什么 怎么用
getCreationTime 返回第一次创建会话的时间 得出这个会话有多老,以便限制会话的寿命
getLastAccessdTime 返回容器最后一次有此会话ID的请求时间 ?得出客户最后一次访问这个会话的时间,得出客户是否已经离开很长时间了
setMaxInactiveinterval ?对于此会话,指定客户请求的最大间隔时间 ?用于撤销会话,并可以减少服务器中无用会话的数量
getMaxInactiveinterval ?对应此会话,返回客户请求的最大间隔时间 ?
invalidate ?结束会话 ?

?

7.8个监听者

?

场景 监听者接口 事件类型
你想知道一个web应用上下文中是否增加、删除或替换了一个属性

ServletContextAttributeListener

attributeAdded

attributeRemoved

attributeRe