zoukankan      html  css  js  c++  java
  • Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)

    三、Servlet的生命周期

      一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。

        全部的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口。这样它才干在一个Servlet引擎中执行。 Servlet引擎是Web server依照Java Servlet API定制的扩展。Servlet引擎提供网络服务,可以理解MIME请求,并提供一 个执行Servlet的容器。

        javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。

     

     

    Servlet 生命周期:Servlet 载入--->实例化--->服务--->销毁。

    Servlet程序是由WEBserver调用。webserver收到client的Servlet訪问请求后:

    (Webserver解析完主机名、web应用,紧接着查找资源。即到该web.xml查询。

    )运行例如以下过程:

    Init(): 使用反射机制,假设该Servlet的实例不存在,载入、创建实例调用init方法将该实例装载到内存(仅仅调用一次)。即进行初始化。

    Service(): Webserver把接收到的Http请求封装给HttpServletRequest对象(各种信息),作为service參数传入。service函数会被调用多次(每訪问一次Servletservice就会被调用一次)

    response(响应给server的信息)拆解,形成http响应格式。

    destroy(): 仅运行一次。在server端停止且卸载Servlet时运行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。

    一个Servlet在运行service()方法时可能会产生其它的线程,因此须要确认在调用destroy()方法时,这些线程已经终止或完毕。

     

    Servlet的主要功能在于交互式地浏览和改动数据,生成动态Web内容。

    过程概括例如以下:

    (1)client发送请求至server端。

    (2)server将请求信息内容并将其传给Server

    (3)Servlet生成响应内容并将其传给Server。  

    (4)响应内容动态生成。通常取决于client的请求。

    (5)server将响应返回给client。

     

     

    四、继承GenericServlet

    继承GenericServlet实现Servlet接口的不同就是把init()与destroy()封装在service抽象方法中,即继承GenericServlet可仅仅实现一个方法就好。其他步骤都与实现Servlet接口一样。

    加入文件到classes文件夹下,创建文件 MyGenericServlet.java 代码例如以下:

    package com.focus;

     

    import javax.servlet.*;

    import javax.servlet.http.*;

    import java.io.*;

     

    public class MyGenericServlet extends GenericServlet

    {

    public void service(ServletRequest request, ServletResponse

                 response) throws ServletException, IOException

        {

          response.getWriter().println("hello world !!!!!");

          }

     

    }

    配置一下Servlet

    <servlet>

       <servlet-name>MyGenericServlet</servlet-name>

       <display-name>MyGenericServlet</display-name>

       <servlet-class>com.focus.MyGenericServlet</servlet-class>

      </servlet>

      <servlet-mapping>

       <servlet-name>MyGenericServlet</servlet-name>

       <url-pattern>/Generic</url-pattern>

      </servlet-mapping>

    在浏览器输入:

     

    效果例如以下:

     

     

     

    五、继承HttpServle

    加入文件到classes文件夹下,创建文件 MyHttpServlet.java 代码例如以下:

    package com.focus;

     

    import javax.servlet.*;

    import javax.servlet.http.*;

    import java.io.*;

     

    public class MyHttpServlet extends HttpServlet

    {

    protected void doPost(HttpServletRequest request,

                 HttpServletResponse response) throws ServletException, IOException

        {

         response.setCharacterEncoding("gbk");

         response.getWriter().println("欢迎 "+request.getParameter("username")+" 光临本站点");

        

         }

     

    protected void doGet(HttpServletRequest request,

                 HttpServletResponse response) throws ServletException,IOException

        {

         response.getWriter().println("i am doGet");

         }

     

    }

    配置一下Servlet

    <servlet>

       <servlet-name>MyHttpServlet</servlet-name>

       <display-name>MyHttpServlet</display-name>

       <servlet-class>com.focus.MyHttpServlet</servlet-class>

      </servlet>

      <servlet-mapping>

       <servlet-name>MyHttpServlet</servlet-name>

       <url-pattern>/MyHttpServlet</url-pattern>

      </servlet-mapping>

    ServletTest文件夹下创建一个 go.html 代码例如以下:

    <html>

    <head>

    <title>登录页面</title>

    </head>

    <body>

    <form action="/ServletTest/MyHttpServlet" method="post">

    姓 名:<input type="text" name="username" /><br/>

    密 码:<input type="password" name="userpass" /><br/>

    <input type="submit" value="提交" />

    </form>

    </body>

    </html>

    在浏览器输入:

     

    效果例如以下:

     

    证明HttpServlet默认调用的是doGet

     

    在浏览器输入:

     

    效果例如以下:

     

    按提交button。跳转页面

     

  • 相关阅读:
    ReSharper Tips—GotoImplementation
    Possible multiple enumeration of IEnumerable
    Hello, Razor!
    自话自说——POI使用需要注意一个地方
    css中怎么设置透明度的问题
    记录排查国标直播流播放卡顿的问题
    互联网上做广告的优点
    C#、.Net经典面试题集锦(一)
    什么是MFC
    C/S与B/S 的区别
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7356420.html
Copyright © 2011-2022 走看看