码迷,mamicode.com
首页 > Web开发 > 详细

Servlet--HttpServlet

时间:2017-07-22 23:41:57      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:超时   服务器   socket   extends   顺序   exception   停止   eric   res   

一.Servlet 接口(javax.servlet)
定义:
     public interface Servlet
     Implemented by: FacesServlet, GenericServlet, JspPage
介绍:
     servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
     要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。
     此接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,它们是按以下顺序调用的:
     1)构造 servlet,然后使用 init 方法将其初始化。
     2)处理来自客户端的对 service 方法的所有调用。
     3)从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。
     除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet     返回有关其自身的基本信息,比如作者、版本和版权。
常用方法:
     public void destroy():由 servlet 容器调用,指示将从服务中取出该 servlet。此方法仅在 servlet 的 service
                             方法已退出或者在过了超时期之后调用一次。在调用此方法之后,servlet容器不会再对此 servlet 调用 service 方法。
     public ServletConfig getServletConfig():返回 ServletConfig 对象,该对象包含此 servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init 方法的对象.
                             此接口的实现负责存储 ServletConfig 对象,以便此方法可以返回该对象。实现此接口的 GenericServlet 类已经这样做了。
     public String getServletInfo():返回有关 servlet 的信息,比如作者、版本和版权.此方法返回的字符串应该是纯文本,不应该是任何种类的标记(比如 HTML、XML,等等).
     public void init(ServletConfig config) throws ServletException:由 servlet 容器调用,指示将该 servlet 放入服务.servlet 容器仅在实例化 servlet 之后调用 init 方法一次。
                                                     在 servlet 可以接收任何请求之前,init 方法必须成功完成.
     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException:由 servlet 容器调用,以允许 servlet 响应某个请求。此方法仅在 servlet 的 init()
                                                                 方法成功完成之后调用,应该为抛出或发送错误的 servlet 设置响应的状态代码。

二.HttpServlet 类(javax.servlet.http)
继承关系:
     java.lang.Object--javax.servlet.GenericServlet--javax.servlet.http.HttpServlet
定义:
     public abstract class HttpServlet extends GenericServlet implements Serializable
介绍:
     提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
         doGet,如果 servlet 支持 HTTP GET 请求
         doPost,用于 HTTP POST 请求
         doPut,用于 HTTP PUT 请求
         doDelete,用于 HTTP DELETE 请求
         init 和 destroy,用于管理 servlet 的生命周期内保存的资源
         getServletInfo,servlet 使用它提供有关其自身的信息
构造方法:
     public HttpServlet():不执行任何操作,因为这是一个抽象类。
常用方法:
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 GET 请求。
                                                                             req 包含客户端对 servlet 发出的请求的 HttpServletRequest 对象;
                                                                             resp 包含 servlet 向客户端发送的响应的 HttpServletResponse 对象.
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。
                                                                             HTTP POST 方法允许客户端一次将不限长度的数据发送到 Web 服务器,这在发送诸如信用卡号之类的信息时很有用.       
     protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 PUT 请求,
                                                                             PUT 操作允许客户端将文件放在服务器上,类似于通过 FTP 发送文件。
     public void service(ServletRequest req, ServletResponse res) throws ServletException,IOException:将客户端请求分发给受保护的 service 方法。无需重写此方法。

三.web执行流程
     1.实现项目,发布到服务器下(Tomcat的webapps文件夹下);
     2.启动Tomcat服务器(实际上是启动了ServerSocket对象,监听8080端口,等待客户端连接);
     3.当用户在浏览器地址栏输入网址时,即向服务器发起请求(此时浏览器底层建立起Socket对象,将HTTP的请求部分(请求行/请求头/请求体)发送至服务器);
     4.服务器(Servlet接口或其实现类)分析请求,通过service方法判断是请求动态资源还是静态资源,如果是动态资源则使用反射技术,创建对象;如果是静态资源,则直接读取文件夹中的内容;
     5.服务器(Tomcat)结合http协议响应部分和输出流向客户端进行响应;
     6.浏览器通过输入流接收来自服务器的数据,进行解析和处理,并展现给用户;

四.Servlet生命周期
1_当用户通过浏览器首次访问某个Servlet时,tomcat会调用servlet的构造函数创建一个Servlet对象,之后调用servlet下的init方法(仅执行一次);
2_调用servlet下的service方法,在service方法中判断本次是GET/POST方法,调用servlet下的doget/dopost方法;
3_以后从客户端浏览器每次向服务端对当前servlet发起请求,仅仅只执行其下的service__>doget/dopost;
4_停止服务器(正常/中断)/重新加载项目 servlet销毁;
   正常停止服务器/重新加载项目会执行destory方法
     注意: 单实例多线程模式,会有效率问题,安全问题

Servlet--HttpServlet

标签:超时   服务器   socket   extends   顺序   exception   停止   eric   res   

原文地址:http://www.cnblogs.com/huguangqin/p/7223143.html

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