hualinux servlet 2.9:继承serlvet接口实现servlet(懂)

目录

一、使用serlvet接口编写servlet

二、编写实现代码

2.1 建立java类继承servlet

 2.2 在web.xml注册servlet做映射

2.3 测试

三、其它知识

3.1 servlet的生命周期

3.2 load-on-startup参数

3.3 关于servlet-mapping


本章先不调用servlet的封装直接使用servlet接口实现,看一下复杂度

扫描二维码关注公众号,回复: 11303394 查看本文章

一、使用serlvet接口编写servlet

在前一章《hualinux servlet 2.6: IDEA 2020.1 建立简单的servlet》所建立的项目基础上,直接使用src右击新建立servlet,使用java继承servlet接口的方式。

在建立接口之前再看一下javaEE 8 API说明文档,找到servlet,看一下使用说明,如下图所示:

因为是接口,得知有5个方法是必须继承的

二、编写实现代码

2.1 建立java类继承servlet

src-->T1.java,鼠标点一下Servlet,按“Alt+Enter”

这样会自动弹出要继承的方法,继承接口的话,接口中所有方法得实现

上面有5个方法,这也与EE中的API文档一致,在自动生成的代码中,每个方法都添加输出并添加一个无参的构造函数

import javax.servlet.*;
import java.io.IOException;

public class T1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init方法...");
    }

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig方法...");
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法...");
    }

    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo方法...");
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy方法...");
    }
    public T1(){
        System.out.println("T1's constructor...");
    }
}

 2.2 在web.xml注册servlet做映射

 要使用servetl则需要web.xml注册

    <servlet>
        <servlet-name>t1</servlet-name>
        <servlet-class>T1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>t1</servlet-name>
        <url-pattern>/t1</url-pattern>
    </servlet-mapping>

2.3 测试

运行tomcat,并在弹出的浏览器尾部添加t1,效果如下:

看到空白页之后,再看IDE控制台如下:

再刷新一下,发现多了一个service方法...

从上面看出destroy()方法没有调用,点左边红色方块停止按钮 ,则destroy会被调用

 

三、其它知识

3.1 servlet的生命周期

 Serv1et生命周期的方法:以下方法都是由Serlvet容器负责调用。

1).构造器:只被调用一次。只有第一次请求Servlet时,创建Servlet的实例。调用构造器.
这说明Serlvet的单实例的!
2). init 方法:只被调用一 次。在创建好实例后立即被调用。用于初始化当前Servlet.
3). service: 被多次调用,每次请求都会调用service 方法。实际用于响应请求的。
4). destroy: 只被调用一 -次。在当前Serv1et所在的WEB应用被卸载前调用。用于释放当前Serv1et所占用的资源。

3.2 load-on-startup参数

1).配置在 servlet节点中:

<servlet>
<!-- Servlet注册的名字-->
<servlet- name> secondServ1et</ servlet - name>
<!-. Servlet的全类名-->
<servlet-class>com. atguigu. javaweb. SecondServ1et</servlet-class>
<!--可以指定Servlet被创建的时机-->
<load- on-startup>2</load-on-startup>
</serv1et>

2). load-on-startup: 可以指定 Serlvet被创建的时机。若为负数,则在第- 次请求时被创建.若为日或正数,则在当前WEB应用被Serlvet容器加载时创建实例,且数组越小越早被创建。

3.3 关于servlet-mapping

1).同一个Servlet可以被映射到多个URL上。 即多个<servlet- mapping>元素的<servlet-name>子元素的设置值可以是同一个
Serv1et的注量名。
2)。在Servlet映射到的URL中也可以使用 *通配符,但是只能有两种固定的格式。
- -种格式是“.扩属名”。另一种格式是以正科杠(/)开失并以“/*"结尾.

<serv1et- mapping>
<serv1et- name>secondServ1et</serv1et -name>
<ur1- pattern>/*</url-pattern>
</serv1et- mapping>

OR
<serv1et -mapping>
<serv1et - name> secondServlet</ servlet - name>
<ur1- pattern>* .do</ur1- pattern>
</serv1et -mapping>
注意:以下的既带/又帚扩展名的不合法。
<servlet-mapping>
<servlet-name> secondServ1et</serv1et -name>
<ur1-pattern>/* .action</ur1- pattern>
</servlet- mapping>

猜你喜欢

转载自blog.csdn.net/hualinux/article/details/106804965
今日推荐