【转帖】Servlet技术

Servlet 技术
1 、Servlet 简介
Java Servlet 是与平台无关的服务器端组件,它可以运行在 Servlet 容器中. Servlet 容器负责 Servlet 和客户的通信以及调用 Servlet 的方法, Servlet 和客户的通信采用"请求/响应"的模式
2 Servlet API
Servlet 的框架是由两个 Java 包组成的: javax.servlet javax.servlet.http 。在 javax.servlet 包中定义了所有的 Servlet 类都必须实现或扩展的通用接口和类。在 javax.servlet.http 包中定义了采用 HTTP 协议通信的 HttpServlet
Servlet 的框架的核心是 javax.servlet.Servlet 接口,所有的 Servlet 都必须实现这一接口。在 Servlet 接口中定义了 5 个方法,其中有 3 个方法代表了 Servlet 的生命周期
init 方法,负责初始化 Servlet 对象
service 方法,负责响应客户的请求
destroy 方法,当 Servlet 对象退出生命周期时,负责释放占用的资源
当用户开发自己的Servlet类时,Servlet类必须扩展以下两个类中的一个
1 、扩展 GenericServlet 类:
如果 Servlet 扩展了 GenericServlet 类,则必须实现 service 方法,因为 GenericServlet 类中的 service 方法被声明为抽象方法,该方法的声明形式如下:
public abstract void service(ServletRequest request,ServletResponse response)
throws ServletException,IOException
service 方法有两个参数: ServletRequest ServletResponse Servlet 容器将客户的请求信息封装在 ServletRequest 对象中,传给 service 方法; service 方法将响应客户的结果通过 ServletResponse 传给客户
2 、扩展 HttpServlet 类:
如果 Servlet 类扩展了 HttpServlet 类,通常不必实现 service 方法,因为 HttpServlet 类已经实现了 service 方法,该方法的声明形式如下:
protected void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
HttpServlet service 方法中,首先从 HttpServletRequest 对象中获取 HTTP 请求方式的信息,然后再根据请求方式调用相应的方法。
HTTP 的请求放式包括 DELETE GET OPTIONS POST PUT TRACE ,在 HttpServlet 类中分别提供了相应的方法,它们是 doDelelte(),doGet(),doOptions(),doPost(),doPut() doTrace()
在HttpServlet的service方法中,也有两个参数:HttpServletRequest和HttpServletResponse,这两个类分别扩展了 ServletRequest ServletResponse 接口
ServletRequest 接口: ServletRequest 接口封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求的远程主机信息等。 ServletRequest 接口还为 Servlet 提供了直接以二进制数方式读取客户请求数据流的 ServletInputStream ServletRequest 的子类可以为 Servlet 提供更多的与特定协议相关的数据
ServletRequest 接口: ServletRequest 接口为 Servlet 提供了返回响应结果的方法。它允许 Servlet 设置返回数据的长度和 MIME 类型,并且提供了输出流 ServletOutputStream ServletResponse 子类可以提供更多和特定协议相关的方法
3 Servlet 的生命周期
Servlet 的生命周期开始于被装载到 Servlet 容器中,结束于被终止或重新装入时。 Servlet 的生命周期可以分为 3 个阶段:初始化阶段、响应客户请求阶段和终止阶段。在 javax.servlet.Servlet 接口中定义了 3 个方法 init() service() destroy() ,它们将分别在 Servlet 的不同阶段被调用
1 、初始化阶段
在下列情形下 Servlet 容器自动装载 Servlet
Servlet 容器启动时自动装载某些 Servlet
Servlet 容器启动后,客户首次向 Servlet 发出请求
Servlet 的类文件被更新后,重新装载 Servlet
Servlet 被装载后, Servlet 容器创建一个 Servlet 实例并且调用 Servlet init() 方法进行初始化。在 Servlet 的整个生命周期中, init 方法只会被调用一次。 init 方法有两种重载形式:
public void init(ServletConfig config) throws ServletException;
public void init() throws ServletException;
在Servlet的初始化阶段,Servlet容器会为Servlet创建一个ServletConfig对象,用来存放Servlet的初始化配置信息,如Servlet的初始参数。如果Servlet类覆盖了第一种带参数的init方法,应该先调用super.init(config)方法确保参数config引用ServletConfig对象;如果覆盖的是第二种不带参数的init方法,可以不调用super.init()方法,如果要在init方法中访问ServletConfig对象,可以调用Servlet类的getServletConfig()方法
2 、响应客户请求阶段
对于到达 Servlet 容器的客户请求, Servlet 容器创建特定于这个请求的 ServletRequest 对象和 ServletResponse 对象,然后调用 Servlet service 方法。 service 方法从 ServletRequest 对象获得客户请求信息并处理该请求,通过 ServletResponse 对象向客户返回响应结果
3 、终止阶段
Web 应用被终止,或 Servlet 容器终止运行,或 Servlet 容器重新装载 Servlet 的新实例时, Servlet 容器会先调用 Servlet destroy 方法。在destroy方法中,可以释放Servlet所占用的资源
4 HTTP HttpServlet
HTTP是一种基于请求/响应模式的协议。客户端发送一个请求,服务器返回对该请求的响应。HTTP使用可靠的TCP连接,默认端口是80
在HTTP中,客户端/服务器之间的会话总是由客户端通过建立连接和发送HTTP请求的方式初始化,服务器不会主动联系客户端或要求与客户端建立连接。在会话开始后,浏览器或服务器都可以随时中断连接,例如,在浏览网页时可以随时点击“停止”按钮中断当前的文件下载过程,关闭与Web服务器的HTTP连接
4.1 HTTP 请求
HTTP请求由3个部分构成,分别是:
请求方法URI协议/版本
请求头
请求正文
例如:
GET /sample.jsp HTTP/1.1
Accept:image/gif.image,image/jpeg.*.*
Accept-Lauguage:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate
 
username=weiqin&password=1234
 
1、请求方法URI协议/版本
GET /sample.jsp HTTP/1.1
根据HTTP标准,HTTP请求可以使用多种请求方法。例如,HTTP 1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE
URI完整的指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头
协议版本声明了通信过程中使用的HTTP的版本
2、请求头
请求头包含许多有关客户端环境和请求正文的有用信息
3、请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来是请求的正文。请求正文中可以包含客户提交的查询字符串信息
4.2 HTTP 响应
与HTTP请求类似,HTTP响应也由3个部分构成,分别是:
协议 状态代码 描述
响应头
响应正文
HTTP/1.1 200 OK
Server:ApacheTomcat/5.0
Date:Mon,6 Oct 2003 13:13:13 GMT
Content-Type:text/html
Last-Modified: Mon,6 Oct 2003 13:03:13 GMT
Content-Length:112
<html>
<head>
<title>HTTP响应示例</title>
</head>
<body>
Hello HTTP!
</body>
</html>
 
1、协议 状态代码 描述
HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所使用的协议是HTTP 1.1,服务器已经成功地处理了客户端发出的请求
2、响应头
响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等
3、响应正文
响应正文就是服务器返回的HTML页面,响应头和正文之间也必须用空行分隔
4.3 HttpServlet 的功能
在了解了具体的HTTP协议规范后,可以更好地理解HttpServlet的作用。 它能够根据客户发出的 HTTP 请求,生成相应的 HTTP 响应结果。 HttpServlet 首先必须读取 HTTP 请求的内容。 Servlet 容器负责创建 HttpServletRequest 对象,并把 HTTP 请求信息封装到 HttpServletRequest 对象中,这大大简化了 HttpServlet 解析请求数据的工作量。如果没有 HttpServletRequest HttpServlet 只能直接处理 Web 客户发出的原始的字符串数据,有了 HttpServletRequest 后,只要调用 HttpServletRequest 的相关方法,就可以方便地读取 HTTP 请求中任何一部分信息
HttpServletRequest中读取HTTP请求信息的常用方法:
getCookies():返回HTTP请求的Cookies
getRequestURI():返回HTTP请求URI
getQueryString():返回HTTP请求数据中的查询字符串
getMethod():返回HTTP请求方法
Servlet 容器还向 HttpServlet 提供了 HttpServletResponse 对象, HttpServlet 可以通过它来生成 HTTP 响应的每一部分内容
HttpServletResponse提供的生成响应数据Header的方法:
addCookie(Coolie cookie):向HTTP响应中加入Cookie
setHeader(String name,String value):设置HTTP响应的Header
 
4.4 Servlet 容器响应 Web 客户请求的步骤:
1:Web客户向Servlet容器发出HTTP请求;
2:Servlet容器解析Web客户的HTTP请求;
3:Servlet容器创建一个HttpRequset对象,在这个对象中封装了HTTP请求信息;
4:Servlet容器创建一个HttpResponse对象;
5:Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6:HttpServlet调用HttpResponse的有关方法,获取HTTP请求信息
7:HttpServlet调用HttpResponse的有关方法,生成响应数据
8:Servlet容器把HttpServlet的响应结果传给Web客户
5 、创建 HttpServlet 的步骤
创建用户自己的HttpServlet类,通常涉及下列4个步骤:
1、扩展HttpServlet抽象类
2、覆盖HttpServlet的部分方法,如覆盖doGet或doPost方法
3、获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在HttpServletRequest对象中都以参数名/参数值的形式存放
4、生成HTTP响应结果。通过HttpServletResponse对象可以生成响应结果。HttpServletResponse对象有一个getWriter()方法,该方法返回一个PrintWriter对象。使用PrinterWriter的print()或println()方法可以向客户端发送字符串数据流
6 ServletContext Web 应用的关系
Servlet容器在启动时会加载Web应用,并为每个Web应用创建惟一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存
在ServletContext中设置的属性,在Web应用运行期间一直存在,当Web应用被关闭时,Servlet容器会销毁ServletContext对象,存储在ServletContext对象中的属性自然也不复存在。不同应用的ServletContext各自独立

你可能感兴趣的:(Web,servlet,header,service,服务器,扩展)