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

原创 2015年07月09日 14:55:09

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中

#笔记#圣思园 JavaWeb 第22讲——表单确认,JavaScript和Servlet实现客户端与服务器端验证

1.表单的确认 (1)客户端确认 ——减少服务器负载 ——缩短用户等待时间 ——兼容性难 (2)服务器端确认 ——统一确认 ——兼容性强 ——服务器负载重 2.客户端确认:使用JavaScript...

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

1.Servlet是Java服务器端编程 不同于一般的Java应用程序,Servlet是运行在服务器上的,服务器有很多种,常用的服务器是Tomcat。 Servlet最大的特点是,没有main方法 S...

#笔记#圣思园 JavaWeb 第3讲——HTTP协议,持续连接机制

1.Http协议介绍 超文本传输协议(Hypertext Transfer Protocol) Http是应用层协议,浏览网页时,浏览器和服务器之间,会通过Http在Internet上进行数据的发...

#笔记#圣思园 JavaWeb 第65讲——jQuery,选择器

1. $(document)————把dom对象转换成jQuery对象 ready方法————当整个页面的dom元素加载完毕后,执行ready方法参数中的函数 2.ready方法与onload方法...

#笔记#圣思园 JavaWeb 第15讲——JSP内置对象

##1.request请求对象##    作用域:request 代表:来自客户端的请求,比如在form表单中填写的信息 方法:getParameter、getParameterNames、getPa...

#笔记#圣思园 JavaWeb 第23讲——JavaBean

1.JavaBean概念 JavaBean是一种可重复使用、跨平台的软件组件 分为两种: (1)有用户界面的 (2)没有用户界面的,负责处理事务(数据运算、操纵数据库) JSP通常访问的是第(2)种J...

#笔记#圣思园 JavaWeb 第57讲——JS继承:对象冒充、call方法、apply方法、原型链方式、混合方式

1.JS中继承的方式 (1)对象冒充 (2)call方法 2.对象冒充 执行结果:“zhangsan”,“sili” 3.call方法,定义在function对象中,每一个函数都由c...

#笔记#圣思园 JavaSE 第66讲——静态 、 动态 代理模式

1.代理模式 为其他对象提供一种代理,以控制这个对象的访问 某些情况下,一个客户不想或不能直接饮用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。 2.代理模式涉及的角色: 抽象角色:声...

#笔记#圣思园 JavaSE 第55讲——泛型详解(2)

1.限制泛型可用类型 使用extends关键字,指定这个类型必须继承某个类,或实现某个接口 在定义类定义泛型时就指定了泛型的类型必须继承某种类型 当没有指定泛型继承的类型或借口时,默认使用T ex...

#笔记#圣思园 JavaSE 第10讲——面向对象之 封装 encapsulation 续

1. 类中的数据部分、属性部分又叫做成员变量(member variable),属性用英文表示为property或者attribute。 2.对象是new出来的实例(instance)。生成一个对象的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#笔记#圣思园 JavaWeb 第29讲——Servlet
举报原因:
原因补充:

(最多只允许输入30个字)