码迷,mamicode.com
首页 > 其他好文 > 详细

[总结]Servlet概述

时间:2015-08-29 21:25:09      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

一、什么是Servlet

API上给了下面的解释: 
A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol. 
根据上面的解释,我们可以这样描述Servlet的工作流程:

1、客户端向服务端发送请求; 
2、服务端将请求信息发送给Servlet; 
3、Servlet处理请求信息并生成响应,再传给服务器; 
4、服务器向客户端发送响应。

二、Servlet是如何工作的

在下面,首先给出下面一张图(图1): 
技术分享

首先,请先不要吐槽这张图难看。。。 
图中,需要特别注意的是这几个类和接口,注意他们都继承了谁,实现了谁: 
接口:Servlet、ServletRequest(Response)、HttpServletRequest(Response); 
类:HttpServlet 
下面逐一介绍这几个类和接口:

1、 Servlet接口 
Servlet接口的主要方法有: 
void:destroy(); 
- ServletConfin:getServletConfig(); 
- java.lang.String:getServletInfo(); 
void:init(ServletConfig); 
void:service(ServletRequest, ServletResponse); 
一个Servlet类必须要实现这个接口(图里面GenericServlet实现了Servlet接口,基本实现了Servlet的方法,而GenericServlet的子类需要实现service方法),同时,观察这个接口的方法,通过init(ServletConfig)、service(ServletRequest, ServletResponse)、destroy()这几个主要方法,我们可以看到Servlet类的生命周期:

1、调用构造方法实例化Servlet类; 
2、Servlet容器调用init方法,根据ServletConfig初始化Servlet实例; 
3、Servlet容器调用service方法处理ServletRequest对象和ServletResponse对象;(这是Servlet实例的核心业务处理,至于ServletRequest对象和ServletResponse对象到底有什么用,在后文继续讨论,这里从对象的名字也可以猜出一二了,一个是Request,一个是Response) 
4、Servlet容器调用destroy方法,销毁Servlet实例。

2、ServletRequest和ServletResponse接口 
对于这两个接口,我主要是分析一下它们的方法,因此它们的介绍我决定直接把API中的介绍搬到这里:

ServletRequest:Defines an object to provide client request information to a servlet. The servlet container creates a ServletRequest object and passes it as an argument to the servlet’s service method. 
ServletResponse:Defines an object to assist a servlet in sending a response to the client. The servlet container creates a ServletResponse object and passes it as an argument to the servlet’s service method.

  • ServletRequest: 
    对照ServletRequest的把请求信息封装的作用来看,ServletRequest接口的方法主要是用来获取信息的getter和is类型的方法。 
    • Attribute信息:getAttribute、getAttributeNames、removeAttribute、setAttribute
    • Character信息:getCharacterEncoding、setCharacterEncoding
    • Content信息:getContentLength、getContentType
    • Local信息:getLocalAddr、getLocalPort、getLocalName
    • Parameter信息:getParameter、getParameterNames、getParameterValues
    • Remote信息:getRemoteHost、getRemotePort
    • 其他信息:getRequestDispatcher、getServerName、getServerPort

这里主要注意的Attribute和Parameter的区别,请参看:《参数(parameter)和属性(Attribute)的区别》

  • ServletResponse: 
    如同上面描述一样,ServletResponse是提供响应的,因此,它应该定义一系列和响应相关的方法,如: setCharacterEncoding、setContentLength、setContentType等; 
    上面的几个属于协议无关的,只要继承他们并实现Http协议,那么就可以处理基于HTTP协议的请求和返回响应结果了

3、HttpServlet类 
这个类继承了GenericServlet类,因此这个类的service方法实现了对HTTP协议的支持,这个类的主要功能是接受从浏览器发送过来的HTTP请求,并返回HTTP响应。 
它的service方法是这样的:service(HttpServletRequest req, HttpServletResponse resp)

4、HttpServletRequest和HttpServletResponse接口 
由于这两个接口是继承ServletRequest和HttpServletResponse接口 
而来的,它们是基于HTTP协议来封装请求和响应的,因此这个两个接口定义的方法一定是根据HTTP协议里的信息来写的,参照这篇文章:《Http详解》然后对比一下这两个接口定义的方法就能明了了。

最后: 
Servlet的原理说起来真的很简单,重要的是如何应用这些方法。我觉得一边学HTTP协议一边用这些方法是个不错的选择。

[总结]Servlet概述

标签:

原文地址:http://www.cnblogs.com/cheuk-kwan/p/4769771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!