zoukankan      html  css  js  c++  java
  • Servlet(3)—Servlet

    1. 基本知识:
      java Servlet是和平台无关的服务端组件,它运行在Servlet容器中,Servlet容器负责Servlet和客户的通信以及调用Servlet方法,Servlet和客户的通信采用“请求/响应”模式。
      Servlet是一种独立平台和协议的服务端的java应用程序,处理请求的信息并将其发送到客户端,Servlet的客户端可以提出请求并获得该请求的响应,它可以是任意的java应用程序、浏览器、或其他设备。
      Servlet可以生成动态的web页面,它担当web浏览器或其他HTTP客户程序发出的请求、与HTTP服务器上的数据库或应用程序之间交互的中间层,对所有
      的客户端请求,只需要创建一次Servlet实例,因此节约的大量的内存。

    2. 功能:

      • 创建并返回基于客户请求的动态HTML页面
      • 创建可嵌入到现有的HTML页面中的部分HTML页面
      • 与其他服务器资源进行通信
    3. Servlet容器响应客户请求的过程
      ————> ————>ServletRequest
      客户—Servlet容器—Servlet
      <———— <————ServletResponse
      步骤:
      ①Servlet引擎检查是否已经装载并创建了该Servlet实例对象,如果是执行第四步,否则执行第二步。
      ②装载并创建该Servlet的一个实例对象:调用该Servlet构造器。
      ③调用Servlet实例对象的init()方法。
      ④创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet
      的service()方法并将请求和响应的对象作为参数传递进去。
      ⑤Web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory()方法。

    4. Servlet生命周期方法(以下方法都是Servlet容器负责调用)

      • 构造器:只被调用一次,只有第一次请求Serlet时,创建Servlet实例,调用构造器。这说明Servlet是单实例的。
      • init():只调用一次,在创建好实例之后立即调用,用于初始化当前Servlet
      • service():被多次调用,每次请求都会调用service(),实际用于响应请求
      • destory():只被调用一次,在当前Servlet所在的web应用程序被卸载前调用,用于释放当前Servlet所占用的资源。
    5. load-down-startup参数:可以指定创建Servlet实例的时机。
      为负数则在第一次请求时创建,为0则在Servlet容器加载时创建实例,数越小,创建越早
      配置在Servlet节点中:
    <!-- 配置和映射Servlet -->
    <servlet>
    <!-- 这个名字随意起 -->
        <servlet-name>hello</servlet-name>
        <!-- 全类名:servlet.HelloServlet 实际的物理文件-->
        <servlet-class>servlet.HelloServlet</servlet-class>
        <!-- 指定Servlet实例创建的时机 -->
        <load-on-startup>1</load-on-startup>
    </servlet>      

    6 . Servlet注册与运行
    Servlet程序必须通过Servlet容器来启动,并且存储目录有特殊要求,需要存储在/WEB-INF/classes目录中。
    Servlet程序必须在web应用程序的web.xml文件中进行注册和映射他、其访问路径,才可以被Servlet引擎加载和被外界访问。
    一个Servlet元素用于注册一个Servlet,它包含两个重要子元素<servlet-name>和<servlet-class>
    分别用于设置Servlet的注册名称和完整类名(全类名)。
    一个<servlet-mapping>元素用于映射一个已注册Serlvet的对外访问路径,它包含两个<servlet-name>和<servlet-pattern>于指定Servlet注册名称和Servlet对外访问路径。
    例如:

     <!-- 注册Servlet -->
              <servlet>
                <servlet-name>hello</servlet-name>
                <servlet-class>firstServlet.HelloServlet</servlet-class>
              </servlet>
             <!-- 映射Servlet路径 -->
              <servlet-mapping>
                <servlet-name>hello</servlet-name>
                <url-pattern>/hello</url-pattern>   
              </servlet-mapping>
    
              <servlet-mapping>
                <servlet-name>hello</servlet-name>
                <url-pattern>/hello1</url-pattern>
              </servlet-mapping>

    注意:若是手动访问Servlet,则直接<url-pattern>中的值但是在开发过程之中,Servlet是表单提交时自动访问,所以一般情况下<url-pattern>中的值为from表单中action的值

    7 . Servlet元素的其他子节点:

      <!-- 配置初始化参数,且节点必须在load-on-startup之前 -->
              <servlet> 
                <init-param>
                    <param-name>user</param-name>
                    <param-value>root</param-value>
                </init-param>
                <init-param>
                    <param-name>password</param-name>
                    <param-value>1230</param-value>
                </init-param>
              </servlet>

    8 . 细节
    一个<servlet>节点可以配多个<servlet-mapping>,即多个<servlet-mapping>元素的子元素<servlet-name>
    设置值可以是同一个Servlet的注册名。
    在Servlet映射到的URL中也可以使用通配符,但是只能使用两种固定格式一种是.扩展名,另一种是/开头并以/*结尾

     <servlet-mapping>
                <servlet-name>AnyName</servlet-name>
                <url-pattern>*.do</url-pattern> 
             </servlet-mapping>
             <servlet-mapping>
                <servlet-name>AnyName</servlet-name>
                <url-pattern>/action/*</url-pattern>    
             </servlet-mapping> 
  • 相关阅读:
    sql ''增删改'' 笔记
    表单
    html基础
    第一本书的总结
    带参
    字符串
    zookeeper入门与实践
    node中间层转发请求
    npm脚本传参问题
    docker入门笔记
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453992.html
Copyright © 2011-2022 走看看