专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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);
    }

运行结果:

109_1.png

(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);
    }

109_2.png

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

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

ServletRequest :代表请求信息。

ServletResponse :代表响应信息。

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

3、public void destroy()方法:

servlet对象销毁时执行。

4、servlet的生命周期:

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

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

109_3.png

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

109_4.png

二、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>

109_5.png

访问的路径必须与里面的虚拟路径名完全相同。

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

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

/abc/123

109_6.png

/abc/123/456

109_7.png

/abc

109_8.png

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

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

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

109_9.png

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/包名+类名,这样的方式将类和包的信息外漏很不安全,通过添加配置文件的方式,实现了对访问的类的隐藏。

109_10.png

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

5、的使用

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

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

109_11.png

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页面):

109_12.png

执行后:

109_13.png

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

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

109_14.png

(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>

109_15.png

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

7、生命周期

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

文章永久链接:https://tech.souyunku.com/23382

未经允许不得转载:搜云库技术团队 » servlet(API、配置文件、生命周期)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们