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

相关推荐
星火开发设计6 小时前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
Gorgous—l6 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
Hello_Embed7 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
●VON8 小时前
Flutter for OpenHarmony 21天训练营 Day03 总结:从学习到输出,迈出原创第一步
学习·flutter·openharmony·布局·技术
香芋Yu8 小时前
【大模型教程——第四部分:大模型应用开发】第1章:提示工程与上下文学习 (Prompt Engineering & ICL)
学习·prompt
LYS_06188 小时前
寒假学习10(HAL库1+模数电10)
学习
runningshark8 小时前
【项目】示波器学习与制作
学习
€8118 小时前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战
自可乐9 小时前
n8n全面学习教程:从入门到精通的自动化工作流引擎实践指南
运维·人工智能·学习·自动化