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

相关推荐
DianSan_ERP9 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛9 天前
计算机系统概论——校验码
学习
babe小鑫9 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode