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

Servlet 技术全总结 一

时间:2016-08-09 12:02:53      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

Servlet是独立于平台和协议的服务器端的java应用程序,处理请求的信息并将其发送到客户端。

Servlet的客户端可以提出请求并动态获得响应。

Servlet动态生成web页面,担当浏览器或其他客户端发出的请求与HTTP服务器上的数据库或应用程序之间的中间层。

对于所有客户端请求,都只需要创建一次Servlet实例,因此,节省了大量内存。

 

Part 1     Servlet运行原理

web服务器收到一个http请求后,判断请求内容,若是静态页面数据,自行处理,若为动态数据,交给Servlet容器,Servlet容器找到相应Servlet实例处理;处理结果交给web服务器,再转交给客户端。

针对同一个Servlet,Servlet容器会在第一次收到HTTP请求时建立一个Servlet实例,然后启动一个线程,第二次收到http请求后,Servlet容器无需创建相同Servlet ,仅开启第二个线程来处理请求。

----->多线程的方式有效提高执行效率,降低服务器负担。

 

Part 2 Servlet 优势

     Servlet具有优良的跨平台性;

     可移植性良好:java语言编写,Servlet API标准完善,企业编写的Servlet程序可轻松移植到其他服务器中;

     执行效率高:Servlet请求到来时激活Servlet,处理完成后等待新请求;新请求产生新线程,而不是进程;

     使用方便:可轻松处理HTML表单数据,并读取和设置HTTP头,处理cookie,跟踪会话;

 

Part 3 基础知识

      HttpServlet作为一个抽象类来创建用户自己的Http Servlet. Http Servlet类扩展了GenericServlet类。HttpServlet类的子类必须至少重写doGet()和doPost()方法其中之一。HttpServlet类提供doGet()方法处理GET请求,doPost()处理POST请求:

      doGet() :通过GenericServlet 类的service()方法来调用此方法;

      doPost():  通过GenericServlet 类的service()方法来调用此方法;

Part 4 Servlet生命周期     

      Servlet生命周期由Servlet容器控制,该容器创建Servlet的实例。Servlet的生命周期是指Servlet实例在创建后,响应客户端请求直至销毁的全过程;

      其创建取决于Servlet的首次调用。

       Servlet生命周期定义了它如何被加载,初始化,以及它如何接受请求,响应请求,提供服务;

       代码中,Servlet生命周期由接口javax.servlet.Servlet定义,所有的Servlet必须直接或间接的实现该接口,这样才能在Servlet容器中运行。

       Servlet接口定义了生命周期三种方法:

       1    init():创建实例后进行初始化。实现ServletConfig接口的对象作为参数进行传递。在初始化过程中,Servlet容器使用ServletConfig接口信息(如Servlet的初始化参数的名称,初始化参数的值,以及Servlet实例名称等)传递给Servlet。

public void init(ServletConfig config)throws ServletException

       2    service():响应客户端发出的请求。service()方法接受ServletRequest接口和Servletresponse接口的对象来处理请求和发送响应;

public void service(ServleRequest request,ServletResponse response) throws ServletException,IOException

       3    destroy():如果不再有需要请求的对象,则释放Servlet对象;

public void destroy()

Servlet生命周期各阶段:

1.实例化:Servlet容器创建Servlet类的实例对象;

2.初始化:容器调用Servlet的init()方法,通常会申请资源以便后续使用;

3.服务:由容器使用以响应客户对Servlet的请求;

4.破坏:在释放Servlet实例前调用,通常会释放资源;

5.不可用:释放内存中的容器;

[要实例化一个Servlet,容器必须先找到Servlet类,加载servlet类并创建Servlet对象,然后通过调用Servlet的init()方法来初始化Servlet。ServletConfig接口对象作为参数传给init()方法,该接口对象为Servlet提供对ServletContext接口的访问。Servlet容器使用ServletContext接口与Servlet容器进行通信;

如果初始化Servlet失败,则抛出UnavailableException或ServletException异常,并再次尝试对Servlet进行实例化和初始化。然后将ServletRequest和ServletResponse接口作为参数传递给service方法,该方法将处理请求并返回响应。

如果响应请求时发生异常,则容器通过调用destroy()方法卸载实例]

Part 5    Servlet API

 在javax.servlet和javax.servlet.http包中的各类和接口如下:

(1)ServletInputStream类

    从java.io.InputStream类扩展而来的抽象类,该类创建的对象用于读取客户端请求中的二进制数据,而该类的readLine()方法用于每次读取一行数据;

        该方法将从给定偏移处开始的每字节读取到数组中,直到该方法遇到换行符或者读取完一定量的字节数量,该方法返回一个整数来指定实际读取的字节数,到达流尾时返回-1

public int readLine(byte b[],int offset,int length)throws java.io.IOException
//b为用于存储读取的数据的字节数组;offset指定方法开始读取字符的起始位置;length读取的最大字节数

 (2)ServletOutputStream类

     该类创建的对象用于将二进制数据从服务器发送到客户端。具体实现的方法如下:

       +   print():将字符串写入客户端。如果发生任何输入或输出异常,则方法print()会引发IOException异常,print()方法接受参数,如char,float,double,int,long,String。

public void print(String str)throws java.io.IOException
//str为发送到客户端的字符串

       +     println():将字符串写入客户端,紧跟后面输出回车。如果发生任何I/O异常,则会引发IOException

 (3)ServletRequest接口

     使用ServletRequest接口创建对象,用于使客户端请求信息对Servlet可用。创建的对象作为参数传递至Servlet的service()。

     该类实现方法如下:

       +     getInputStream():返回客户端请求中的二进制数据,并将其保存在getInputStream对象中

public ServletInputStream getInputStream()throws IOException

       +     getParameter():用于获取请求消息一起发送的附加信息-----请求参数

public String getParameter(String str)

       +     getContentLength():返回客户端发送的请求的实际长度,如果长度未知,则返回-1

public int getContentLength()

       +     getServerName():返回请求发至的服务器名称

public String getServerName()

   (4)ServletResponse接口

       使用该接口创建的对象用于向客户端提供响应。创建的对象作为参数传递至Servlet的service()方法中。该接口实现的方法如下:

       +     getOutpouStream():返回一个ServletOutputStream对象,它被用来发送对客户端的响应

public ServletOutputStream getOutputStream()throws IOException

       +     getWriter():返回将字符文本发送到客户端的PrintWriter对象

public PrintWriter getWriter()throws IOException

       +      setContentLength():允许用户设置将作为响应放的数据的长度

public void setContentLength(int length)

       +      getBufferSize():检索实际的以响应客户端的缓存区大小。若没有使用缓冲区则返回0

public int getBufferSize()

       +      setBufferSize():设置将发送到客户端的数据的缓冲区的大小

public void setBufferSize(int size)

    (5)HttpServletRequest接口

         容器在调用Servlet的doGet()或doPost()方法时,会创建一个HttpServletRequest接口的实例和一个HttpServletResponse接口的实例,作为参数传递给doGet和doPost()方法。该接口代表客户请求,它提供了多种获取请求数据的方法,具体继承层次如图:

 

 

(未完结,下午继续)

Servlet 技术全总结 一

标签:

原文地址:http://www.cnblogs.com/jokerjason/p/5751677.html

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