博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Servlet、JSP和Spring MVC初学指南》——1.8 GenericServlet
阅读量:6172 次
发布时间:2019-06-21

本文共 2755 字,大约阅读时间需要 9 分钟。

本节书摘来自异步社区《Servlet、JSP和Spring MVC初学指南》一书中的第1章,第1.8节,作者:【加】Budi Kurniawan(克尼亚万) , 【美】Paul Deck著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.8 GenericServlet

前面的例子中展示了如何通过实现Servlet接口来编写Servlet。但你注意到没有?它们必须给Servlet中的所有方法都提供实现,即便其中有一些根本就没有包含任何代码。此外,还需要将ServletConfig对象保存到类级变量中。

值得庆幸的是GenericServlet抽象类的出现。本着尽可能使代码简单的原则, GenericServlet实现了Servlet和ServletConfig接口,并完成以下任务:

将init方法中的ServletConfig赋给一个类级变量,以便可以通过调用getServletConfig获取。

为Servlet接口中的所有方法提供默认的实现。
提供方法,包围ServletConfig中的方法。
GenericServlet通过将ServletConfig赋给init方法中的类级变量servletConfig,来保存ServletConfig。下面就是GenericServlet中的init实现:

public void init(ServletConfig servletConfig)        throws ServletException {    this.servletConfig = servletConfig;    this.init();}但```  是,如果在类中覆盖了这个方法,就会调用Servlet中的init方法,并且还必须调用super.init(servletConfig)来保存ServletConfig。为了避免上述麻烦,GenericServlet提供了第二个init方法,它不带参数。这个方法是在ServletConfig被赋给servletConfig后,由第一个init方法调用:

public void init(ServletConfig servletConfig)

throws ServletException {this.servletConfig = servletConfig;this.init();

}

`
意味着,可以通过覆盖没有参数的init方法来编写初始化代码,ServletConfig则仍然由GenericServlet实例保存。

清单1.3中的GenericServletDemoServlet类是对清单1.2中ServletConfigDemoServlet类的改写。注意,这个新的Servlet扩展了GenericServlet,而不是实现Servlet。

清单1.3 GenericServletDemoServlet类

package app01a;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.GenericServlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;@WebServlet(name = "GenericServletDemoServlet",    urlPatterns = { "/generic" },    initParams = {        @WebInitParam(name="admin", value="Harry Taciak"),        @WebInitParam(name="email", value="admin@example.com")    })public class GenericServletDemoServlet extends GenericServlet {    private static final long serialVersionUID = 62500890L;    @Override    public void service(ServletRequest request,            ServletResponse response)            throws ServletException, IOException {        ServletConfig servletConfig = getServletConfig();        String admin = servletConfig.getInitParameter("admin");        String email = servletConfig.getInitParameter("email");        response.setContentType("text/html");        PrintWriter writer = response.getWriter();        writer.print("" +                "Admin:" + admin +                "
Email:" + email + ""); }}

可见,通过扩展GenericServlet,就不需要覆盖没有计划改变的方法。因此,代码变得更加整洁。在清单 1.3 中,唯一被覆盖的方法是 Service 方法。而且,不必亲自保存ServletConfig。

利用下面这个URL调用Servlet,其结果应该与ServletConfigDemoServlet相似:

http://localhost:8080/app01a/generic

即使GenericServlet是对Servlet一个很好的加强,但它也不常用,因为它毕竟不像HttpServlet那么高级。HttpServlet才是主角,在现实的应用程序中被广泛使用。关于它的详情,请查阅1.9节。

转载地址:http://hoxba.baihongyu.com/

你可能感兴趣的文章
指针的看法
查看>>
Cocos-2d 坐标系及其坐标转换
查看>>
LAMP网站的CACHE机制概要
查看>>
[MySQL 5.6] 5.6新参数slave_rows_search_algorithms
查看>>
ESXi5.1嵌套KVM虚拟化环境支持配置
查看>>
爬虫的小技巧之–如何寻找爬虫入口
查看>>
JVM学习(二)垃圾收集器
查看>>
为hexo博客添加基于gitment评论功能
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
Flutter - Drawer 抽屉视图与自定义header
查看>>
ERP系统的优势_库存管理软件开发
查看>>
如何内行地评价公链(一)从真正的不可能三角谈起
查看>>
BigDecimal 详解
查看>>
Shell实战之函数的高级用法
查看>>
NASA制做模拟系外行星环境 发现了热木星大气不透明的原因
查看>>
Slog67_后端框架Skynet之Makefile解读
查看>>
iOS ShareSDK桥接技术
查看>>
BAT面试须知:Java开发的招聘标准
查看>>
WeUI for 小程序–使用教程
查看>>
[vuex] unknown action type
查看>>