学习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

相关推荐
绛橘色的日落(。・∀・)ノ1 分钟前
Matplotlib实践学习笔记
笔记·学习
chase。2 分钟前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
bu_shuo20 分钟前
git练习学习网站【中文网站】
git·学习
EnglishJun1 小时前
ARM嵌入式学习(十四)--- IMX6ULL的I2C通信实现
arm开发·学习
_李小白2 小时前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习
嵌入式小企鹅2 小时前
蓝牙学习系列(七):BLE GATT 数据模型详解
学习·蓝牙·ble·蓝牙协议栈·蓝牙开发·gatt
arvin_xiaoting2 小时前
OpenClaw学习总结_III_自动化系统_3:CronJobs详解
数据库·学习·自动化
少许极端3 小时前
算法奇妙屋(四十一)-贪心算法学习之路 8
学习·算法·贪心算法
arvin_xiaoting3 小时前
OpenClaw学习总结_III_自动化系统_2:Webhooks详解
运维·学习·自动化
不早睡不改名@4 小时前
Netty源码分析---Reactor线程模型深度解析(一)
java·笔记·学习·netty