servlet3.0初体验

Posted onsim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet3.0初体验相关的知识,希望对你有一定的参考价值。

  这是关于servlet3.0的学习笔记,整理和记录是通往成功的必经之路。首先就不比较servlet3.0与历史版本的区别,目前servlet等底层技术也是相对于比较固定了,版本之间也是没有太大的变化,一通则十通.....

  先说说servlet,servlet是一个用于Javaweb服务端的程序,主要常用相关的jar包有javax.servlet,其中包含定义servlet和servlet容器之间契约的类和接口。javax.servlet.http其中包含定义httpservlet和servlet容器之间契约的类和接口。servlet技术的核心是servlet,它是所有servlet类必须直接或间接实现的一个接口。

  servlet的生命周期相关方法有init(),service(),destory()。

  init()方法

       在一个Servlet的生命周期中,init()方法只会被执行一次,之后无论用户执行多少次请求,都不会在调用该方法。关于init方法的执行时机,有两种方式可选,一般的是在服务器启动后第一个用户请求g该Servlet时调用,你也可以设置该Servlet在服务器启动后自动执行。init()方法负责简单的创建或者加载一些数据,这些数据将用于该Servlet的整个生命周期中。

  service()方法

        当一个客户请求该Servlet时,实际的处理工作全部有service()方法来完成,service方法用来处理客户端的请求,并生成格式化数据返回给客户端。 
        每一次请求服务器都会开启一个新的线程并执行一次service方法,service根据客户端的请求类型,调用doGet、doPost等方法。 
        service是由web容器来调用的,我们无需对service具体内容做任何处理,service会自动的根据客户端的请求类型去调用doGet、doPost等方法,所以我们只需要做好doGet、doPost方法的实现就可以了。

  destory()方法

        该方法在整个生命周期中,也是只会被调用一次,在Servlet对象被销毁是调用,在servlet中,我们可以做一些资源的释放等操作,执行destory方法之后的servlet对象,会等待jvm虚拟机的垃圾回收机制择时回收。

  doget(),dopost()方法

        实际的业务处理流程,service根据客户端的请求类型来自动匹配需要执行那个方法。

  

  servlet的生命周期

 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。常用的tomcat、jboss、weblogic都是Servlet容器)中的,其生命周期是由容器来管理。Servlet生命周期通过java.servlet.Servlet接口中的init()、Service()、和destory()方法表示。Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。 

步骤:

  1. 当Servlet容器负责加载和实例化Sevlet。当容器启动时,或者容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当容器启动后,Servlet通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化操作。 

  2. 实例化操作完成后,会调用Init()方法,并传递实现ServletConfig接口的对象。在init()方法中,Servlet可以部署描述符中读取配置参数,或者执行任何其他一次性活动。在Servlet的整个生命周期类,init()方法只被调用一次。

  3.  当Servlet初始化后,容器就可以准备处理客户机请求了。当容器收到对这一Servlet的请求,就调用Servlet的service()方法,并把请求和响应对象作为参数传递。当并行的请求到来时,多个service()方法能够同时运行在独立的线程中。通过分析ServletRequest或者HttpServletRequest对象,service()方法处理用户的请求,并调用ServletResponse或者HttpServletResponse对象来响应。当servlet完成一次请求和相应后,会等待下一个请求或有服务器将其销毁。

  4. 一旦Servlet容器检测到一个Servlet要被卸载,这可能是因为要回收资源或者因为它正在被关闭,容器会在所有Servlet的service()线程之后,调用Servlet的destroy()方法。然后,Servlet就可以进行无用存储单元收集清理。这样Servlet对象就被销毁了。这四个阶段共同决定了Servlet的生命周期。

  Servlet的配置

      servlet常用的配置方式有两种,一种是通过注解的形式,一种是通过web.xml的方式

  1,通过注解的方式 

    @WebServlet(name = ("FormServlet"),urlPatterns = {"/formServlet"})
    public class FormServlet extends HttpServlet {}

    其中@WebServlet代表是通过注解的方式配置servlet其中name对应的值代表servlet的名称,urlPatterns代表的servlet的请求路径,注意请求路径前一定要加上“/”。如果需要初始化参数则    

    @WebServlet(name = "GenericServletDemoServlet",urlPatterns = {"/enericServletDemo"},
      initParams = {
        @WebInitParam(name = "admin",value = "admin"),
        @WebInitParam(name = "password",value = "admin")
    }
  )通过此种方式进行参数的初始化动作

  2,通过web.xml的方式

  

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>

  <servlet>
    <servlet-name>myServletDemo</servlet-name>
    <servlet-class>com.liu.day02.MyServletDemo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>myServletDemo</servlet-name>
    <url-pattern>/myServletDemo</url-pattern>
  </servlet-mapping>

</web-app>

  其中servlet-name代表的是servlet的名称,servlet-class代表servlet对应的类,url-pattern表示映射路径。

  servlet配置中比较常用的是基于web的配置。

   

  

以上是关于servlet3.0初体验的主要内容,如果未能解决你的问题,请参考以下文章

Servlet3.0学习总结——基于Servlet3.0的文件上传

Servlet3.0学习总结——使用注解标注Servlet

Servlet3.0

Servlet3.0新特性

重新学习Spring注解——servlet3.0

Servlet3.0 Test