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

前面我们介绍了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实现了两个接口的方法,你需要那个接口的方法就用那个,这个机制就是适配器模式,这就是适配器模式的优点。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值