目录
继承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 并且选中“包括非项目条目”
源代码如下:
//
// 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
<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中的代码如下
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