用途:

  编写自定义GenericServlet类后,子类只需继承这个类,就可以直接使用ServletConfig的config对象和ServletConfig接口的方法,而不需要init()方法获取config对象,也不需要通过config对象调用ServletConfig接口的方法,直接通过方法名()就可以调用

  具体步骤如下:

    1、新建类MyGenericServlet,实现Servlet,ServletConfig接口

    2、重写父类的相关方法

    3、将service()方法定义为抽象(abstract)方法,将类定义为抽象类,以便在子类予以service()方法新的实现

    4、定义MyGenericServlet的成员变量protected ServletConfig config,并通过初始化方法init(ServletConfig config)赋值this.config=config;

    5、重载init()的无参方法,当子类需要在初始化时执行某些操作时调用,并通过init(ServletConfig config)方法调用init()无参方法

  具体代码如下:

 public abstract class MyGenericServlet implements Servlet,ServletConfig {

     protected ServletConfig config;       //定义成员变量
@Override
public void init(ServletConfig config) throws ServletException {
this.config=config; //config赋值
init();
} public void init(){ //为了子类重写,创建无参方法init() } @Override
public ServletConfig getServletConfig() {
return config; //返回config
} @Override
public abstract void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException ; //抽象方法 @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() { } @Override
public String getServletName() {
return config.getServletName(); //返回config.getServletName()的结果,子类直接调用该方法相当于调用config.getServletName()
} @Override
public ServletContext getServletContext() {
return config.getServletContext();
} @Override
public String getInitParameter(String name) {
return config.getInitParameter(name);
} @Override
public Enumeration<String> getInitParameterNames() {
return config.getInitParameterNames();
}
}

  子类只需继承GenericServlet类,就可以通过方法名直接调用方法

 public class MyServlet1 extends MyGenericServlet {

     @Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
String name = getServletName(); //直接调用,不需要config.getServletName()
System.out.println(name);
} }

最新文章

  1. intellij idea 15 修改基础配置加载路径
  2. window frida安装
  3. embed chrome 无法播放问题
  4. LINQ系列:Linq to Object联接操作符
  5. mysql 简单优化方法
  6. 关于HTML+CSS设置图片居中的方法
  7. Pig Run on Hadoop, V1.0
  8. 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程
  9. Opencv各个版本的万能头文件
  10. Spring.Net+Nhibernate+Asp.Net Mvc 框架
  11. [Android开发常见问题-12] Android开发中debug.keystore如何使用。
  12. CocosCreator检测动作执行完毕的方法~之一吧,应该= =
  13. 使用Xilinx UART-LITE IP实现串口--逻辑代码实现
  14. yolov3中 预测的bbox如何从特征图映射到原图?
  15. jmeter聚合报告导出时乱码的解决
  16. 借鉴seisman安装软件时的文件放置选择
  17. django会话跟踪技术
  18. Python需要知道的知识点
  19. canvas图像绘制过程中的注意
  20. linux删除乱码文件[转载]

热门文章

  1. PyCharm配置过程记录
  2. hdu-5640 King&#39;s Cake (水题)
  3. 【leetcode刷题笔记】Pow(x, n)
  4. Gym - 100513K :Treeland (按距离还原一棵树)
  5. ES+open-falcon之报警自动发送请求信息
  6. bzoj 1006: 神奇的国度 MCS
  7. Unity3D中的Coroutine及其使用(延时、定时调用函数)
  8. IPC的使用
  9. nginx利用proxy_cache来缓存文件
  10. Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法