zoukankan      html  css  js  c++  java
  • Servlet

    生命周期方法:

     void init(ServletConfig):出生之后(1次);

     void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用;

     void destroy():临死之前(1次);

    特性:

    单例,一个类只有一个对象;当然可能存在多个Servlet类!

    线程不安全的,所以它的效率是高的!

    Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法!!!

    1、 什么是servlet?

     ServletJavaWeb三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

        接收请求数据;

        处理请求;

        完成响应

       例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

    2、实现Servlet的方式(由我们自己来写!)

    实现Servlet三种方式:

      实现javax.servlet.Servlet接口;

      继承javax.servlet.GenericServlet类;

      继承javax.servlet.http.HttpServlet类;

      通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。

    Servlet.java

    1 public interface Servlet {
    2     public void init(ServletConfig config) throws ServletException;
    3     public ServletConfig getServletConfig();
    4     public void service(ServletRequest req, ServletResponse res)
    5             throws ServletException, IOException;
    6     public String getServletInfo();
    7     public void destroy();
    8 }
    9 //[Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!]

    HelloServlet.java,继承 Servlet.java.

     1 public class HelloServlet implements Servlet {
     2     public void init(ServletConfig config) throws ServletException {}
     3 
     4     public ServletConfig getServletConfig() {return null;}
     5 
     6     public void destroy() {}
     7 
     8     public String getServletInfo() {return null;}
     9 
    10     public void service(ServletRequest req, ServletResponse res)
    11             throws ServletException, IOException {
    12         System.out.println("hello servlet!");
    13     }
    14 }

    配置web.xml

    web.xml中配置Servlet的目的其实只有一个,就是把访问路径与一个Servlet绑定到一起,下面配置是把访问路径:“/helloworld”与“cn.servlet.HelloServlet”绑定到一起。

    *<servlet>:指定HelloServlet这个Servlet的名称为hello

    * <servlet-mapping>:指定/helloworld访问路径所以访问的Servlet名为hello

    *<servlet><servlet-mapping>通过<servlet-name>这个元素关联在一起了!

    *接下来,我们编译HelloServlet,注意,编译HelloServlet时需要导入servlet-api.jar,因为Servlet.class等类都在servlet-api.jar中。

    javac -classpath F:/tomcat6/lib/servlet-api.jar -d . HelloServlet.java

    然后把HelloServlet.class放到/helloworld/WEB-INF/classes/目录下,然后启动Tomcat,在浏览器中访问:http://localhost:8080/helloservlet/helloworld即可在控制台上看到输出!

    * /helloservlet/WEB-INF/classes/cn/itcast/servlet/HelloServlet.class

    1     <servlet>
    2         <servlet-name>hello</servlet-name>
    3         <servlet-class>cn.servlet.HelloServlet</servlet-class>
    4     </servlet>
    5     <servlet-mapping>
    6         <servlet-name>hello</servlet-name>
    7         <url-pattern>/helloworld</url-pattern>
    8     </servlet-mapping>

    Servlet接口

    1、Servlet的生命周期

    所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:

    * void init(ServletConfig)

    * void service(ServletRequest,ServletResponse)

    *  void destroy()

    1.1 Servlet的出生

    服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。

    而且一个Servlet类型,服务器只创建一个实例对象,例如在我们首次访问http://localhost:8080/helloservlet/helloworld时,服务器通过“/helloworld”找到了绑定的Servlet名称为cn.servlet.HelloServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建HelloServlet的实例。当我们再次访问http://localhost:8080/helloservlet/helloworld时,服务器就不会再次创建HelloServlet实例了,而是直接使用上次创建的实例。

    Servlet被创建后,服务器会马上调用Servletvoid init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生。这个方法只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。

    我们可以把一些对Servlet的初始化工作放到init方法中!

    1.2 Servlet服务

      当服务器每次接收到请求时,都会去调用Servletservice()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!

    1.3 Servlet的离去

      Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servletdestroy()方法,我们可以把Servlet的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。

    2Servlet接口相关类型

    Servlet接口中还存在三个我们不熟悉的类型:

    * ServletRequestservice() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;

    * ServletResponseservice()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;

    * ServletConfiginit()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素。

  • 相关阅读:
    怎么将ETL技术落地
    vue.js解决刷新404找不到页面问题
    Python 图像识别入门篇
    快速实现CentOS7安装python-pip
    ffmpeg+HLS实现直播与回放
    HBase 二级索引与Coprocessor协处理器
    你做电商死法TOP10:你中了几枪?
    讲讲跳跃表(Skip Lists)
    说框架设计思路
    《Effective Java 第三版》目录汇总
  • 原文地址:https://www.cnblogs.com/jiangjianzhu/p/5497496.html
Copyright © 2011-2022 走看看