学习Servlet( Servlet实现方式2)

目录

前言

继承javax.servlet.GenericServlet类


前言

上一篇博客,介绍了Servlet 的第一种实现方式:实现javax.servlet.Servlet接口。并且提到Servlet的创建有三种实现方式:

  • 实现javax.servlet.Servlet接口;
  • 继承javax.servlet.GenericServlet类;
  • 继承javax.servlet.http.HttpServlet类;

本篇博客介绍第二种实现方式:继承javax.servlet.GenericServlet类

继承javax.servlet.GenericServlet类

步骤

  • 0 创建web项目
  • 1 创建一个Servlet 继承 GenericServlet类

其他的和上一篇的相同,可以参照上一篇博客【学习Servlet( Servlet实现方式1)】

从之前的学习知道: GenericServlet类是一个抽象类,不能被实现。因此需要一个手写一个子类去继承该抽象类。

我们现在看一下GenericServlet类 的源码

双击shift 键 弹出搜索GenericServlet 并且选中"包括非项目条目"

源代码如下:

java 复制代码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package javax.servlet;

import java.io.IOException;
import java.io.Serializable;
import java.util.Enumeration;

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    private static final long serialVersionUID = 1L;
    private transient ServletConfig config;

    public GenericServlet() {
    }

    public void destroy() {
    }

    public String getInitParameter(String name) {
        return this.getServletConfig().getInitParameter(name);
    }

    public Enumeration<String> getInitParameterNames() {
        return this.getServletConfig().getInitParameterNames();
    }

    public ServletConfig getServletConfig() {
        return this.config;
    }

    public ServletContext getServletContext() {
        return this.getServletConfig().getServletContext();
    }

    public String getServletInfo() {
        return "";
    }

    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    public void init() throws ServletException {
    }

    public void log(String message) {
        this.getServletContext().log(this.getServletName() + ": " + message);
    }

    public void log(String message, Throwable t) {
        this.getServletContext().log(this.getServletName() + ": " + message, t);
    }

    public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    public String getServletName() {
        return this.config.getServletName();
    }
}

和上一篇博客的区别在于

发现我们之前在实现Servlet 的第一种方式,写的许多操作,如获得初始化参数在这里已经不用写了。它已经写好了。

我们只需要重写service方法

实例

如果我要获得在配置文件中的初始化参数【键值对的形式】key1-value1

注意:不要忘记指定BServlet 的url

XML 复制代码
  <servlet>
        <servlet-name>BServlet</servlet-name>
        <servlet-class>fs.BServlet</servlet-class>
        <init-param>
        <param-name>key1</param-name>
        <param-value>value1</param-value>
    </init-param>
    </servlet>
<!--    通过sevlet-name关联se-->
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>BServlet</servlet-name>
        <url-pattern>/b</url-pattern>
    </servlet-mapping>

BServlet中的代码如下

java 复制代码
package fs;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

public class BServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        String initParameter = this.getServletConfig().getInitParameter("key1");
        System.out.println(initParameter);

    }
}

启动tomcat服务器,访问BServlet

相关推荐
Chef_Chen32 分钟前
从0开始学习计算机视觉--Day08--卷积神经网络
学习·计算机视觉·cnn
weixin_4462608532 分钟前
Isaac Lab:让机器人学习更简单的开源框架
学习·机器人
我真不会起名字啊2 小时前
OpenSceneGraph(OSG)开发学习
学习
永日456702 小时前
学习日记-spring-day42-7.7
java·学习·spring
Love__Tay5 小时前
笔记/云计算基础
笔记·学习·云计算
Bella_chene7 小时前
IDEA中无法使用JSP内置对象
java·servlet·intellij-idea·jsp
wuxuanok8 小时前
Web后端开发-分层解耦
java·笔记·后端·学习
wuxuanok9 小时前
Web后端开发-请求响应
java·开发语言·笔记·学习
i7i8i9com9 小时前
后端微服务基础架构Spring Cloud
学习
蜡笔小电芯10 小时前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习