J2EE企业级开发学习笔记(7)
Servlet
1、Servlet:被设计成在Web服务器上而非客户机上可以处理Web客户端传来的HTTP请求,并发回一个合适的响应的Web组件。它能很好地执行这种功能,并只需要很少的资源就能发送这种功能。Web服务器通过Web容器来管理这些组件。
2、Servlet一般用途:简单的用作客户和服务器往返传递信息的通道,此外,允许客户端控制服务器添加或删除Web页面或文件(只要客户端有足够的清理权限,少见)
3、Servlet最利于处理小型任务:收集和验证用户输入,但几乎不进行实际处理;协调输出,但几乎不直接生成动态Web页面内容;最少量的业务逻辑。
4、Servlet生命周期:
HTTP工作方式:请求-响应型模型。
Servlet扩展了两个基本Servlet实现类中的一个:HttpServlet(常用)和GenericServlet.此2种Servlet都具有相同的生命周期。
生命周期使用了三种基本请求处理程序方法:init(初始化Servlet)、Service(为客户端请求服务)、destroy(销毁servlet)。Service是GenericServlet的核心,但永远不可以被重写,而init和destroy方法总是可以被重写,但很多情况下,Servlet不需要初始化或终止的特定对象或链接时,可能不会用到这两种方法。
5、多个线程可能同时调用通用的Servlet实例的Service方法,为避免这种情况可以执行SingleThreadModel接口,用于指示Web容器在任意给定时间内只允许一个线程调用服务方法。缺点:在Web服务器上部署Servlet时,对服务器上同一时间段内允许存在的Servlet实例的总数量有显著影响,因此在执行SingleThreadModel接口会对容器分配资源的方式产生重大影响。优点:在Servlet可能需要改变非线程安全的信息或访问资源时,执行该接口是合适的。最好不要试图连接任意数量的Servlet方法的做法。
6、处理请求:Web容器接收Servlet请求->封装接收数据到ServletRequest(javax.Servlet.ServletRequest)接口对象中->使用ServletRequest接口中的方法来查询请求的对象。
用法:
7、产生响应:一个请求引发一条响应。Servlet请求用ServletResponse响应对象被提供给一个Servlet,同时请求对象被作为一个参数传递给服务方法。在分别获取了ServletOutputStream对象或PrintWriter对象的句柄后,可以分别采用二进制格式或字符编码格式编写输出的内容。其他生成响应的方法:在任何可能的地方使用JSP和JavaBeans技术,Servlet只负责转请求到JSP页面,为JSP页面成功完成页面动态数据加载而协调必要的项目。
用法:
8、HTTP请求处理程序:
getLastModified()与HTTP GET 方法很像,但他只有在一段指定的时间内发生改变后才能返回内容。即只有doGet()方法被重写,并将要用于处理从请求到请求的变化不大的内容时才能使用getLastModified()方法。
此外,HttpServlet还包含两个方法:
· init(ServletConfig config): 创建Servlet 实例时,调用的初始化方法。
· destroy(): 销毁Servlet 实例时,自动调用的资源回收方法。
通常无须重写initO和destroyO两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init 方法。如果需要在销毁Servlet 之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy 方法。
【注意】如果重写了init(ServletConfig config)方法,则应在重写该方法第一行调用super.init(config)。该方法将调用HttpServlet的init方法。
9、高级处理程序方法:
HttpServlet类区别与GenericServlet类,它不可以重写Service方法,却可以重写这些请求处理程序。HttpServlet方法必须被重写成至少一种方法(即指某个生命周期方法或请求处理程序)。
10、HTTP请求指南:
11、RequestDispatcher(接口) 重定向转移 和 包含:
12、关于Servlet的建模:
转移<<forward>>:
13、ServletContext:
14、Servlet会话管理:
隐藏字段:隐藏的字段嵌入到要显示给客户端的页面中。每发出一次新的请求,就会把这些字段发回给客户端。
动态URL重写:对客户端点击的每一个URL,都会添加一些额外的信息(在会话期间独特地标识每一个客户,如:URL?session=97859,即发出请求的客户端会话编号是97859)。
cookies:已存储的信息可能会在往后重复传送回客户端。Web服务器为浏览器提供了Cookie.
服务器端会话对象:cookies和URL编码受到对每一次请求而发送回客户端信息量多少的限制,在服务器会话管理中,会话信息是在服务器上的会话对象中进行维护的,能根据需要进行访问。注意:使用服务器对象很昂贵尽量少使用它们。
http会话(Servlet API):
15、Servlet部署和Web归档文件(*.war):
该图中有一小部分是由若干个动作组成的一个完整的交易。我们决定把这一部分分割开,由内部关注他的控制对象对它进行处理,其余部分则由Servlet负责。下图则显示了这种职责划分后的结果:
17、Servlet 和JSP的区别在于:
a. Servlet中没有内置对象,原来JSP中的内置对象都必须通过HttpServletRequest对象,或由HttpServletResponse 对象生成:
b. 对于静态的HTML标签, Servlet 都必须使用页面输出流逐行输出。即“JSP是Servlet的一种简化”,使用JSP只需要完成程序员需要输出到客户端的内容,至于JSP中的Java 脚本如何镶嵌到一个类中,由JSP 容器
完成。而Servlet则是个完整的Java 类,这个类的service方法用于生成对客户端的响应。
18、为了让Servlet 能响应用户请求,还必须将Servlet 配置在Web 应用中。配置Servlet
时,需要修改web.xrnl 文件。
配置Servlet 需要配置两个部分:
·配置Servlet 的名字:对应web.xml 文件中的<servlet/>元素。
·配置Servlet 的URL: 对应web.xml 文件中的<servlet-mapping/>元素。
因此,配置一个能响应客户请求的Servlet ,至少需要配置两个元素,关于上面FirstServlet 的配置如下:
<!--配置Servlet 的名字-->
<servlet>
<!-- 指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet 的实现类--〉
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<!-- 配置Servlet 的URL-->
<servlet-mapping>
<!--指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!--指定Servlet 映射的URL地址>
<url-pattern>/firstServlet</url-pattern>
</servlet-rnapping>
联系客服