您的位置:首页 > 编程语言 > Java开发

#笔记#圣思园 JavaWeb 第29讲——Servlet

2015-07-09 14:55 676 查看

1.Servlet功能

(1)简介

JavaServlet是与平台无关的服务器端组件,运行在Servlet容器中

Servlet容器负责Servlet和客户的通信以及调用Servlet的方法

Servlet和客户的通信采用“请求/相应”模式

(2)功能

——创建并返回基于客户请求的动态HTML页面

——创建可嵌入到现有HTML页面中的部分HTML页面

——与其他服务器资源(数据库、基于Java的应用程序)进行通信

2.Servlet生命周期

Servlet框架的核心是:javax.servlet.Servlet接口。所有的Servlet都必须实现这一接口

Servlet接口中定义了五个方法,其中三个方法代表了Servlet生命周期

——init方法:初始化Servlet对象

——service方法:响应客户请求

——destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源

Servlet生命周期分为三个阶段

——初始化阶段

——响应客户请求阶段

——终止阶段

(1)初始化阶段

下列时刻,Servlet容器装载Servlet

——Servlet容器启动时,自动装载某些Servlet

——Servlet容器启动后,客户首次向Servlet发出请求

——Servlet类文件被更新后,重新装载Servlet

Servlet装载后,Servlet容器创建一个Servlet实例,并且调用Servlet的init()方法,进行初始化。

在Servlet生命周期中,init方法只会被调用一次

程序示例:InitServlet.java



在web.xml文件中配置,可以使Servlet容器启动时,自动装载Servlet


启动服务器的时候,自动打印“init invoked”

(2)响应客户请求阶段

对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法

service方法从ServletRequest对象获得客户请求信息、处理该请求,并通过ServletResponse对象向客户返回响应结果

(3)Servlet终止阶段

当Web应用被终止、或Servlet容器终止运行(一个容器可以管理多个web应用)、或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用Servlet的destroy方法。在destroy方法中,可以释放Servlet所占用的资源

service方法程序示例:ServiceServlet.java,通过地址栏方式传递参数,通过地址栏方式向服务器发送请求时,这个请求一定是GET请求



当既有service方法、又有doGet方法时,程序实例和执行结果如下。此时doGet方法不执行了



分析service方法和doGet方法的关系:

HttpServlet类:提供一个抽象类,这个抽象类应该被继承,用来创建适合web的HTTP servlet。一个HttpServlet的子类,至少要重写以下的一个方法:

doGet,doPost,doPut,doDelete,init,destroy,getServletInfo

并不需要重写service方法,service方法将请求派发到每一个上述的doXXX方法

HttpServlet继承GenericServlet

总结:

(1)每一个Servlet都必须实现Servlet接口

GenericServlet是一个通用的、不特定于任何协议的Servlet,它实现了Servlet接口

HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要集成HttpServlet父类即可

(2)Servlet接口中定义了service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。

request =(HttpServletRequest)req;

response=(HttpServletResponse)res;

service(request,response);

转换完毕后,会调用HttpServlet类中,自己定义的service方法:

protected void service(HttpServletRequest req,HttpServletResponse resp)throwsServletException,IOException

在该service方法中,首先获得请求的方法名,然后根据方法名,调用对应的doXXX方法,比如请求方法为GET,那么就调用doGet方法;请求方法为POST,就调用doPost方法

3.Servlet的API

Servlet框架由两个Java包组成:

——javax.servlet:定义了所有的Servlet类都必须实现或扩展的通用接口和类

——javax.servlet.http:定义了采用HTTP协议通信的HttpServlet类

4.创建并发布HttpServlet步骤

(1)继承HttpServlet抽象类

(2)覆盖HttpServlet的部分方法,如doGet()或doPost()

(3)获取HTTP请求信息,例如通过HttpServletRequest对象,来将所HTML表单提交的数据或URL上的查询字符串。

无论是HTML表单还是URL上的查询字符串,在HttpServletRequest对象中,都以:参数名/参数值的形式存放,可以通过getParameter(String name)方法,检索参数信息

(4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果。HttpServletResponse对象有一个getWriter()方法,该方法返回一个PrintWriter对象。使用PrintWriter的print()或println()方法,可以向客户端发送字符串数据流

5.理解ServletContext与JavaWeb应用的关系

当Servlet容器启动Web应用时,为每一个Web应用创建唯一的ServletContext对象。

把ServletContext看成一个Web应用的服务器端组件的共享内存

在ServletContext中可以存放共享数据,它提供了读取或设置共享数据的方法:

——setAttribute(String name,Object object)

——getAttribute(String name)

程序示例:使用ServletContext对象,实现一个网页计数器

CounterServlet.java



counter.jsp



6.Tomcat请求参数源代码分析

对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: