zoukankan      html  css  js  c++  java
  • servlet(API、配置文件、生命周期)

    一、servlet的API

    Servlet接口对Servlet进行了规范,定义了方法的主要范围。

    1、public void init(ServletConfig servletConfig) (初始化)Servlet第一次进入内存时被调用

    参数的作用:

    (1)调用ServletConfig对象的方法,获取Servlet的名称:

    配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>MyServletname</servlet-name>
            <servlet-class>MyServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MyServletname</servlet-name>
            <url-pattern>/abc</url-pattern>
        </servlet-mapping>
    </web-app>
      public void init(ServletConfig servletConfig) throws ServletException {
            String servletName=servletConfig.getServletName();
            System.out.println(servletName);
        }

    运行结果:

     (2)获得配置文件中的初始化参数:

        <servlet>
            <servlet-name>MyServletname</servlet-name>
            <servlet-class>MyServlet</servlet-class>
            <init-param>
                <param-name>zhai</param-name>
                <param-value>I love study</param-value>
            </init-param>
        </servlet>
      public void init(ServletConfig servletConfig) throws ServletException {
            String paramvalue =servletConfig.getInitParameter("zhai");
            System.out.println(paramvalue);
        }

     (3)此方法只有在servlet对象创建时执行(刷新浏览器)

    2、public void service(ServletRequest servletRequest, ServletResponse servletResponse)方法:

    ServletRequest :代表请求信息。

    ServletResponse :代表响应信息。

    每次都会创建servletRequest和servletResponse对象。

    3、public void destroy()方法:

    servlet对象销毁时执行。

    4、servlet的生命周期:

    (1)初始化函数只有在首次访时才被执行

    (2)service函数在每次被访问时都会被执行

     (3) dastory函数在对象被销毁时(关闭服务器)执行

    二、servlet的配置

    1、基本配置

    (1)类的配置:

       <servlet>
            <servlet-name>MyServletname</servlet-name>//名字可以任意,但是必须与<servlet-mapping>中的保持一致。
            <servlet-class>MyServlet</servlet-class>//全路径,包名加类名
        </servlet>

    2、访问方式

    (1)完全匹配:

        <servlet-mapping>
            <servlet-name>MyServletname</servlet-name>
            <url-pattern>/abc</url-pattern>
        </servlet-mapping>

     访问的路径必须与<url-patteren>里面的虚拟路径名完全相同。

    (2)目录匹配:/虚拟路径/*

        <servlet-mapping>
            <servlet-name>MyServletname</servlet-name>
            <url-pattern>/abc/123/*</url-pattern>
        </servlet-mapping>

    /abc/123

     /abc/123/456

    /abc

     即:虚拟路径后面的内容可以任意。

    3、扩展名匹配:*.扩展名

        <servlet-mapping>
            <servlet-name>MyServletname</servlet-name>
            <url-pattern>*.jsp</url-pattern>
        </servlet-mapping>

     4、配置文件的作用:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>MyServletname</servlet-name>
            <servlet-class>MyServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MyServletname</servlet-name>
            <url-pattern>/abc</url-pattern>
        </servlet-mapping>
    </web-app>

    如果没有配置文件,浏览器访问服务器,就要用http://localhost:8080/包名+类名,这样的方式将类和包的信息外漏很不安全,通过添加配置文件的方式,实现了对访问的类的隐藏。

     在访问MyServlet类的时候,通过虚拟路径abc找到配置文件中的abc,再用MyServletname找到要访问的类(包名+类名)。

    5、<load-on-startup>的使用

    如果不加<load-on-startup>标签,Servlet的初始化方法是在浏览器访问的时候才执行,但是加了标签之后,在服务器启动的时候该方法即被执行。

    <servlet>
        <servlet-name>MyServletname</servlet-name>
        <servlet-class>MyServlet</servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>

    6、全局配置与局部配置

    (1)当配置文件如下时:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    <servlet>
        <servlet-name>MyServletname</servlet-name>
        <servlet-class>MyServlet</servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServletname</servlet-name>
        <url-pattern>/abc</url-pattern>
    </servlet-mapping>
    </web-app>

    目录结构(有html页面和jsp页面):

     执行后:

     执行的时HTML页面,但是为什么没有执行JSP呢?

    这是因为在自己配置的WEB.XML文件中,没有对页面的优先级进行定义,只能调用默认的全局web.xml文件。文件配置如下图:

     

    (2)自定义访问优先级:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    <servlet>
        <servlet-name>MyServletname</servlet-name>
        <servlet-class>MyServlet</servlet-class>
        <load-on-startup>4</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServletname</servlet-name>
        <url-pattern>/abc</url-pattern>
    </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>
    </web-app>

     可以看出,如果已经自定义了文件的优先级,则按照自定义的文件的优先级。

    7、生命周期

    Servlet的生命周期始于它被装入Web容器的内存时,并在Web容器终止或重新装入Servlet时结束。
    Servlet一旦被装入Web容器,一般不会从Web容器内存中删除,直至Web容器关闭或者重新启动结束。
    一般来说第一次访问Servlet程序时所用的时间开销要大大多于以后访问所用的时间。

  • 相关阅读:
    使用可跨平台的函数执行命令
    linux查看及修改文件权限以及相关
    php 文件缓存类
    秒杀抢购思路以及高并发下数据安全
    php 无限分类
    isset ,empty,is_null 区别
    phpstorm 在线激活码
    phpstorm 不能提示代码tp 3.2 $this->display等 解决办法
    laravel-ide-helper 遇到There are no commands defined问题怎么解决
    NFS共享服务
  • 原文地址:https://www.cnblogs.com/zhai1997/p/11478635.html
Copyright © 2011-2022 走看看