• 02-【servlet】


    1、什么是Servlet
      Servlet是JavaWeb的三大组件之一[Servlet,Filter,Listener],它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
    a. 接收请求数据;
    b. 处理请求;
    c .完成响应。
      例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。
    2、实现Servlet的方式(由我们自己来写!)
    实现Servlet有三种方式:
    l 实现javax.servlet.Servlet接口;
    l 继承javax.servlet.GenericServlet类;
    l 继承javax.servlet.http.HttpServlet类;
    * 通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始
    ①servlet元素对应一个servlet;一个servlet标签元素和servlet-mapping是一组servlet
    ②一个servlet可以对应多个 url-pattern;一个url-pattern 只能对应一个servlet
    ③ url -pattern 的几种配置方式:
    1.访问某个url:
     <!--第一种:也是常用的一种访问方式 -->
     <url-pattern>/TestServlet</url-pattern>
     访问方式:http://localhost:8080/servlet01/TestServlet
     <!--第二种:常用访问方式扩展 -->
     <url-pattern>/TestServlet.boom</url-pattern>
     访问方式:http://localhost:8080/servlet01/TestServlet.boom
    2.所有请求都可以访问某个servlet;
     <!-- 匹配所有的字符 -->
     <url-pattern>/*</url-pattern>
     访问方式:http://localhost:8080/servlet01/fdsafdsaf       【/后面随便跟什么字母】

     <!-- 框架使用 (一般不用) -->
     <url-pattern>/user/*</url-pattern>
     访问方式:http://localhost:8080/servlet01/user/fdasfasd   【/uesr/任意字母】
    3.匹配以某些字符结尾的请求
     <!-- 匹配以某些字符结尾的请求 -->
     <url-pattern>*.boom</url-pattern>
     访问方式:http://localhost:8080/servlet01/fdsafsda.boom
    4.根据不同的功能模块 ,servlet请求进行分组
     <!-- 根据不同的功能模块 ,servlet请求进行分组 -->
     <url-pattern>/user/adduser.boom</url-pattern>
     <url-pattern>/user/*</url-pattern>
    图解url-pattern

    ④ 注意:servlet名称和url区分大小写
    手写servlet配置,浏览访问servlet【了解,后期用servlet模板自动生成】


    用servlet模板生成servlet:
    web.xml里代码:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
     3 <web-app>
     4   <servlet>
     5     <servlet-name>TextServlet</servlet-name>
     6     <display-name>This is the display name of my J2EE component</display-name>
     7     <description>This is the description of my J2EE component</description>
     8     <servlet-class>boom.servlet.test01.TextServlet</servlet-class>
     9   </servlet>
    10 
    11   <servlet-mapping>
    12     <servlet-name>TextServlet</servlet-name>
    13     <url-pattern>/TextServlet</url-pattern>
    14   </servlet-mapping>
    15 
    16 </web-app>

    图解servlet模板与之对应的web.xml文件图解

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

    1、void init(ServletConfig);(服务启动后一次)
    2、void service(ServletRequest,ServletResponse);(每次刷新都会被执行)
    3、void destroy();(关闭服务器一次)
    特性:
    a.单例,一个类只有一个对象;当然可能存在多个Servlet类!
    b.多线程的 , servlet不要使用全局变量
    c.线程不安全的,所以它的效率是高的
    整个生命周期的过程:
    ① 加载servlet
    部署 web项目 
    ② servlet的初始化【两中方式】
    2.1 tomcat启动的时候 初始化 servlet执行init方法 
    在 web.xml中配置 
    <servlet>
    <load-on-startup>1<load-on-startup>
    </servlet>
    tomcat 服务器启动的时候,初始化 servlet 调用 init方法。数值 0 正整数 1 2 3【从小到大加载 】如果是负值 , 在第一次访问servlet的时候初始化servlet
    2.2 在第一次请求的时候,调用init方法进行初始化 【init方法只初始化一次 】
    servlet是单例的 , 可以加快请求的效率(在web应用中只有一个servlet实例) ,不能在servlet中添加全局变量
    调用servlet是多线程调用,每次请求是一个线程,全局变量会出现安全问题,尽量使用局部变量。
    tomcat启动的时候 初始化 servlet执行init()方法 
    在第一次请求的时候,调用init()方法进行初始化;init()方法只初始化一次 
    ③ 当每次发请求的时候,会执行service方法,去处理请求和响应
    接收请求的数据 ,响应数据到客户端
    可以设定响应数据的格式 ,告诉浏览器如何解析数据
    设置编码集
    ④ servlet的销毁
    tomcat关闭的时候 销毁servlet,执行destroy方法
    注:Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。
    4、servlet周期详解:【有个印象即可】

    servlet的出生
      服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器(Tomcat)启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。而且一个Servlet类型,服务器只创建一个实例对象,例如在我们首次访问http://localhost:8080/helloservlet/helloworld时,服务器通过“/helloworld”找到了绑定的Servlet名称为cn.itcast.servlet.HelloServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建HelloServlet的实例。当我们再次访问http://localhost:8080/helloservlet/helloworld时,服务器就不会再次创建HelloServlet实例了,而是直接使用上次创建的实例。在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生,只会被调用一次。我们可以把一些对Servlet的初始化工作放到init方法中!
    servlet服务
      当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!
    servlet离开
      Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet的临终遗言放到destroy()方法中,例如对某些资源的释放
    等代码放到destroy()方法中。

  • 相关阅读:
    JS: 子项可以来回交换的两个下拉列表
    DOM事件
    DOM基础2——元素
    DOM基础1
    JS: 随机点名程序与万年历
    G_S男女匹配算法(算法的第一个程序2016.09.19)
    Java IO流详尽解析(大神之作)
    细讲解JAVA中的IO流
    c++运算符的优先级(收好不谢)
    java程序——输出当月日历表
  • 原文地址:https://www.cnblogs.com/cao-yin/p/9858160.html
Copyright © 2020-2023  润新知