JavaWeb学习-Servlet系列-4-继承GenericServlet类-适配器模式

博客介绍了Servlet创建类的第二种方法,即通过继承GenericServlet类,此方式采用适配器模式。先查询GenericServlet类API文档,了解常用方法;接着给出继承该类的demo,包括创建Java类、修改web.xml;最后分析适配器模式源码,阐述其优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们介绍了Servlet的运行过程和生命周期以及生命周期内的三个方法,我们实现这个过程都是通过实现Servlet接口来做的。其实在Servlet中,一共有三个方法来实现创建Servlet类。这篇来介绍第二个方法,是通过继承GenericServlet类,这种方式也叫适配器模式。

 

1.查询GenericServlet类API文档

一开始描述内容太多,看不懂没关系,这里提到HttpServlet是我们说的第三个创建Servlet类的方法,后面来学习。由于HttpServlet是继承了GenericServlet类,所以本篇我们先学习GenericServlet类以及这个类下常用的几个方法。

 

常用方法

红圈这几个方法是我们前面学习过的生命周期内的方法,其中我们需要重写Service()方法,当我们自定义Servlet类继承GenericServlet类。上面蓝色圈内init()方法是GenericServlet类本身重写的一个方法,不带参数,下面带参数的是接口Servlet的方法。

 

2.写一个继承GenericServlet类的demo

2.1 创建一个Java类继承GenericServlet类, 重写service方法

package com.anthony.servlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ServletDemo2 extends GenericServlet {

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("ServletDemo2 run serice method.");
		
	}

}

使用这个继承类,我们这里只需要重写service这个方法就行。

2.2 修改web.xml 添加servlet 映射

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  
  <servlet>
  	<servlet-name>servletDemo1</servlet-name>
  	<servlet-class>com.anthony.servlet.ServletDemo1</servlet-class>
  	<load-on-startup>2</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>servletDemo1</servlet-name>
  	<url-pattern>/demo</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>servletDemo2</servlet-name>
  	<servlet-class>com.anthony.servlet.ServletDemo2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>servletDemo2</servlet-name>
  	<url-pattern>/demo2</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

这里添加一个Servlet的映射到/demo2,然后部署到tomcat,浏览器输入http://localhost:8080/Servlet01/demo2

Eclipse上控制台应该打印出来这句话“ServletDemo2 run serice method.”,这个servie方法只要刷新一次浏览器就会执行一次service方法。

 

3.适配器模式源码

如果想在Eclipse中看到GenericServlet类的源码,我们需要tomcat官网下载一个源码zip包,例如apache-tomcat-8.5.40-src.zip,然后添加到Eclipse上,就可以看源码了。我们找到GenericServlet类实现servlet接口这块的代码

public abstract class GenericServlet implements Servlet, ServletConfig,
        java.io.Serializable {

    private static final long serialVersionUID = 1L;

    private transient ServletConfig config;

我们只看上面几行代码,GenericServlet实现了三个接口,我们这里主要来看Servlet和ServletVConfig这两个。打开Eclipse中关于GenericServlet类的outline窗口,看看这些方法。

上面这些方法,带三角符号就是继承过来的方法,剔除我们熟悉的几个Servlet接口中五个方法,剩下的就是实现ServletVConfig相关的方法。所以GenericServlet实现了两个接口的方法,你需要那个接口的方法就用那个,这个机制就是适配器模式,这就是适配器模式的优点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值