• 阅读笔记——Servlet


    什么是Servlet

    Servlet是用java编写的运行在web服务器中的程序,因此它可以调用服务器端的类,它也可以被调用,它本身就是一个类。

    Servlet的工作原理

    servlet由web服务器引擎负责编译执行,当客服端浏览器访问servlet时,服务器将启动一个线程来响应,而并非CGI技术的进程。因此相对CGI方式占用的系统资源(特别是内存)比较少,具有较高的运行效率。

    当web服务器中的servlet被请求访问时,次servlet被加载到java虚拟机中,在servlet中要接受http请求并作相应处理。由于servlet是在服务器端运行的,对客户完全透明,因此比java applet具有更好的安全性,当服务器有防火墙的保护时,servlet也受到防火墙的保护。

    Servlet的生命周期

    servlet是一种在web容器中运行的组件,有一个从创建到销毁的过程,这个过程被称为servlet生命周期,包括5个阶段。

    1. 类加载
      servlet是普通的Java类,编译后存储在web应用的WEB-INFclasses目录或者打包成jar文件存储在WEB-INFlib目录中。在web应用程序启动或第一次访问时,应用程序的类加载程序将查找Servlet类文件,找到后将字节码加载到内存中。
    2. Servlet实例化
      Servlet加载到内存中后,容器将调用类的默认构造方法创建一个实例,因此编写Servlet类时要么提供一个默认构造方法,要么由编译器提供。
    3. Servlet初始化
      创建Servlet实例后,容器将调用init(ServletConfig)方法对Servlet初始化。然后调用init()方法,之后Servlet就完成了初始化。在Servlet生命周期中,init()方法仅被调用一次。
    4. 为客户提供服务
      在servlet初始化后,它就准备为客户提供服务。当容器受到对Servlet的请求后,容器根据请求的URL找到正确的servlet,容器首先创建两个对象,一个是请求对象,一个是相应对象。然后创建一个新的线程,在该线程中调用service()方法,同时将请求对象和相应对象作为参数传递给该方法。容器调用两个service()方法,一个从GenericServlet,之后调用HttpServlet类的service()方法。接下来service()将检查HTTP请求的类型(GET、POST等)类决定调用Servlet的doGet()方法或者doPost()方法。
    5. Servlet销毁
      当容器决定不再需要Servlet实例时,它将在servlet实例上调用destroy()方法,Servlet在该方法中释放资源,一旦该方法被调用,Servlet实例不能再提供服务。Servlet实例从该状态仅能进入卸载状态。在调用destroy()方法之前,容器会等待其他执行Servlet的service()方法的线程结束。
      一旦Servlet实例被销毁,它将作为垃圾被回收。如果web容器关闭,Servlet也将被销毁和卸载。

    部署Servlet

    要部署Servlet,首先要编译Servlet。编译Servlet就是执行javac命令,编译源代码文件.java为字节码文件.class。如果使用Eclipse或者其它可视化开发工具,无需使用javac来编译,在Eclipse中保存.java文件即会自动编译为.class字节码,并会按照类的层次结构生成对应的文件夹。

    类编译后,把字节码文件复制到当前应用“WEB-INFclasses”目录下,即可使用了。这里注意Servlet如果属于某个包,则在“WEB-INFclasses”相应的目录中。

    复制字节码文件后,还需要在web.xml文件中进行配置。在web.xml的<web-app></web-app>之间加入如下的语句:

    <servlet>

             <servlet-name>Servlet名称</servlet-name>

             <servlet-class>Servlet类</servlet-class>

    </servlet>

    <servlet-mapping>

             <servlet-name>Servlet名称</servlet-name>

             <url-pattern>Servlet名称访问路径</url-pattern>

    </servlet-mapping>

    其中,<servlet-name>中配置的是Servlet的名称(可以自己随便起,只要不和其他Servlet名称冲突都可以);<servlet-class>中配置的是Servlet指向的类,必须是完整的类名;<url-pattren>中配置的是web方式访问Servlet时相对于当前应用的路径(也可以自行设定,访问的时候用这个路径)。

    在Servlet3.0中可以使用@WebServlet注解定义定义Servlet,而不需要在web.xml文件中定义。该注解属于javax.servlet.annotation包,因此在定义Servlet是应该使用导入语句:import javax.servlet.annotation.WebServlet;在定义Servlet类的前一行加上注解@WebServlet(name=“Servlet的名字”,urlPatterns=“访问Servlet的路径”)。

  • 相关阅读:
    四种方案解决ScrollView嵌套ListView问题
    Android学习笔记之Intent
    Struts2中 radio标签的详细使用方法
    Qrcode生成二维码的参数总结 及最小尺寸的测试
    java.lang.IllegalStateException: getOutputStream() has already been called for this response
    HTTP中的重定向和请求转发的区别
    SpringMVC(五)-- springmvc的系统学习之拦截器
    SpringMVC(三)-- springmvc的系统学习之数据的处理,乱码及restful
    Github上的star和fork是什么
    如何在MyEclipse上耍Chrome
  • 原文地址:https://www.cnblogs.com/maosonglin/p/6380796.html
Copyright © 2020-2023  润新知