zoukankan      html  css  js  c++  java
  • servlet概述

    1.在eclipse上实现第一个SERVLET程序

      javase eclipse 到 javaee eclipse需要安装J2EE插件,并在eclipse中配置tomcat服务器,我因为以前配置过就不再赘述了

      P.S:用Eclipse新版本新建servlet的时候,不会自动生成mapping到web.xml,而是在代码中加入注解@WebServlet

       

      查找文档发现,这是Servlet3.0新特性(得Tomcat7.0版本及以上),@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。

      如: @WebServlet(“/LoginAction”) 告诉容器,如果请求的URL是“/LoginAction”,则由LoginAction的实例提供服务。可以使用@WebServlet提供更多信息。

     2. servlet容器

      我们最为熟悉的servlet容器就是Tomcat ,而Servlet 容器是如何管理 Servlet:先看一下tomcat的容器模型——

      

      从上图可以看出 Tomcat 的容器分为四个等级,真正管理Servlet 的容器是Context 容器,一个 Context 对应一个 Web 工程;Tomcat 的容器等级中,Context 容器是直接管理 Servlet 在容器中的包装类Wrapper(StandardWrapper)的容器,所以 Context 容器如何运行将直接影响 Servlet 的工作方式。

      将 Servlet 包装成 StandardWrapper 并作为子容器添加到 Context 中,其它的所有 web.xml 属性都被解析到 Context ,所以说 Context 容器才是真正运行 Servlet 的 Servlet 容器。一个 Web 应用对应一个 Context 容器,容器的配置属性由应用的 web.xml 指定,这样我们就能理解 web.xml 到底起到什么作用了

    3. servlet的工作过程

    Web服务器在与客户端交互时.Servlet的工作过程是:

    1.     在客户端对web服务器发出请求

    2.     web服务器接收到请求后将其发送给Servlet

    3.     Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.

    4.     web服务器将从Servlet实例对象中收到的响应结构发送回客户端.

     

     4. servlet的生命周期

      

      如上:Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段、初始化阶段、服务阶段和实例销毁阶段。

    1.创建实例

      在默认情况下Servlet实例是在第一个请求到来的时候创建,以后复用。

      如果有的Servlet需要复杂的操作需要载初始化时完成,比如打开文件、初始化网络连接等,可以通知服务器在启动的时候创建该Servlet的实例。具体配置如下:

    <servlet>
          <servlet-name>TimeServlet</servlet-name>
          <servlet-class>com.allanlxf.servlet.basic.TimeServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
    </servlet>

    2.初始化

      一旦Servlet实例被创建,Web服务器会自动调用init(ServletConfig config)方法来初始化该Servlet。其中方法参数config中包含了Servlet的配置信息,比如初始化参数,该对象由服务器创建。

    I.如何配置Servlet的初始化参数?

       在web.xml中该Servlet的定义标记中,比如:

    <servlet>
             <servlet-name>TimeServlet</servlet-name>
             <servlet-class>com.allanlxf.servlet.basic.TimeServlet</servlet-class>
    
            <init-param>
                <param-name>user</param-name>
                <param-value>username</param-value>
           </init-param>
    
           <init-param>
               <param-name>blog</param-name>
               <param-value>http://。。。</param-value>
           </init-param>
    </servlet>

    II.如何读取Servlet的初始化参数?

    ServletConfig类中定义了如下的方法用来读取初始化参数的信息:

           public String getInitParameter(String name)

    3.服务

      一旦Servlet实例成功创建及初始化,该Servlet实例就可以被服务器用来服务于客户端的请求并生成响应

      在服务阶段Web服务器会调用该实例的service(ServletRequest request, ServletResponse response)方法,request对象和response对象有服务器创建并传给Servlet实例。

      request对象封装了客户端发往服务器端的信息,response对象封装了服务器发往客户端的信息。

    4.实例销毁

    servlet解析HTTP请求的流程:

    1.     web客户向Servlet容器发出HTTP请求;

    2.     Servlet容器解析web的HTTP请求.

    3.     Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;

    4.     Servlet容器创建一个HttpResponse对象;

    5.     Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;

    6.     HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

    7.     HttpServlet调用HttpResponse的有关方法,生成响应数据;

    8.    Servlet容器把HttpServlet的响应结果传给web客户. 

     5. servlet接口结构

      

    javax.servlet.http.HttpServletGenericServlet的子类,专门用于创建应用与http的Servlet。

    GenericServlet是servlet接口的实现类

    6.Httpservlet源码及实现机制(重要!)

      HTTP请求刚刚进来的时候实际上只是一个HTTP请求报文,容器会自动将这个HTTP请求报文包装成一个HttpServletRequest对象,并且自动调用HttpServlet的service()方法来解析这个HTTP请求,service()方法会解析HTTP请求行。

      而HTTP请求行由method,uri,HTTP version三个组成,method就是get或者post,service()方法根据method来决定是执行doGet还是doPost,这一切都是服务器Tomcat/weblogic/websphere/jboss(容器)自动完成的,HTTP的格式也自动被解析。

      只要你的类继承了HttpServlet,并且在web.xml里面配置了相应的servlet和mapping,服务器就会自动帮你执行以上过程。 

      在每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。

      Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。

    6. Servlet操作表单

     

    p.s:注意乱码处理

    获取表单数据的方法:

    • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
    • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
    • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

    getParameterNames()返回一个Enumeration对象,使用hasMoreElements()、nextElement()循环操作

  • 相关阅读:
    javac编译多个java文件以及-cp、-classpath、-sourcepath
    深入理解android:id以及@+id/name和@id/name的区别联系
    记使用Kali linux 2.0的一些坑
    从历史的角度谈变化
    谈凤姐
    我之面向对象观
    读厚黑学有感
    什么是时间
    你是谁?
    Sublime Text2搭建Sass编辑环境
  • 原文地址:https://www.cnblogs.com/chacha-z/p/10593752.html
Copyright © 2011-2022 走看看