编写自定义GenericServlet

用途:

  编写自定义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()无参方法

   具体代码如下:

 

 1 public abstract class MyGenericServlet implements Servlet,ServletConfig {
 2 
 3     protected ServletConfig config;       //定义成员变量
 4     @Override
 5     public void init(ServletConfig config) throws ServletException {
 6         this.config=config;         //config赋值
 7         init();
 8     }
 9     
10     public void init(){           //为了子类重写,创建无参方法init()
11         
12     }
13 
14     @Override
15     public ServletConfig getServletConfig() {
16         return config;               //返回config
17     }
18 
19     @Override
20     public abstract void service(ServletRequest req, ServletResponse res)
21             throws ServletException, IOException ;                //抽象方法
22 
23     @Override
24     public String getServletInfo() {
25         return null;
26     }
27 
28     @Override
29     public void destroy() {       
30         
31     }
32 
33     @Override
34     public String getServletName() {
35         return config.getServletName();       //返回config.getServletName()的结果,子类直接调用该方法相当于调用config.getServletName()
36     }
37 
38     @Override
39     public ServletContext getServletContext() {
40         return config.getServletContext();
41     }
42 
43     @Override
44     public String getInitParameter(String name) {
45         return config.getInitParameter(name);
46     }
47 
48     @Override
49     public Enumeration<String> getInitParameterNames() {
50         return config.getInitParameterNames();
51     }
52 }

 

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

 1 public class MyServlet1 extends MyGenericServlet {
 2 
 3     @Override
 4     public void service(ServletRequest req, ServletResponse res)
 5             throws ServletException, IOException {
 6         String name = getServletName();           //直接调用,不需要config.getServletName()
 7         System.out.println(name);
 8     }
 9 
10 }

 

posted @ 2017-11-14 19:20  咕噜噜zmj  阅读(210)  评论(0编辑  收藏  举报