码迷,mamicode.com
首页 > 编程语言 > 详细

JAVAEE_Servlet_09_Adapter适配器GenericServlet

时间:2021-04-22 15:19:02      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:row   final   安全   适配   vat   使用   res   init   实现   

适配器 GenericServlet


 * 适配器 (Adapter)
    
     - 适配器的作用?
       
          1.我们目前所有的Servlet类都直接实现了javax.servlet.Servlet接口,但是该接口中有些方法是我们暂时不需要的,我们可能只需要编写service方法,直接实现Servlet接口的话,显得代码丑陋,我们有必要添加一 
            个适配器抽象类,让这个抽象类去实现所有的方法,然后将service方法设置成为抽象方法,这样的话以后所有的servlet类不再去直接实现Servlet接口,而是去继承适配器抽象类,然后只需要重写service方法。
   
          2. 适配器除了可以让代码优雅以外,我们还可以在适配器中提供大量方法,子类继承以后可以在子类中直接使用,进而方便编程。

       
      - 创建适配器?
          
	    在Web中创建一个GenericStrvlet抽象类,该抽象类去实现Servlet接口,然后将service方法设置为抽象方法。   该类就是一个适配器,以后不需要直接实现Servlet接口,去继承这个适配器即可,重写service方法。

      
     -  因为原始的init()方法为了保证方法的安全性,用了final修饰,所以子类不能够再继承原始的init()方法了。如果以后程序需要在Servlet对象初始化的时刻执行一段代码怎么办呢?

            重写父类的init()方法,但是父类的init()方法中已经有了代码(获取了ServletConfig对象了),如果在子类中重写,那面父类中的init()方法就无效了,那么势必会造成程序问题,况且父类中的init方法为了防止重写,一般都会用final修饰,那就不 
            能重写了。这个时候怎么办呢?
     
            可以在父类中再写一个init()方法,然后在子类中重写这个新的init()方法,在父类的原始init()方法中调用这第二个init()方法   this.init()  这样就解决了。
     

  * Sun公司已经写好了 javax.servlet.GenericServlet 适配器类,可以直接调用。它即实现了Servlet也实现了ServletConfig


  * 代码 写一个GenericServlet适配器



     ```

            import javax.servlet.*;
            import java.io.IOException;

          /**
           * Generic抽象类是一个适配器
           */

          public abstract class GerericServlet implements Servlet {

              private ServletConfig config;

              @Override
              public final void init(ServletConfig servletConfig) throws ServletException {

                 this.config=servletConfig;
                 this.init();
              }

              /**
               * 若在初始化时刻需要执行一段代码,那面重写该init()方法
               */

              public void init(){

              }

              @Override
              public abstract void service(ServletRequest request, ServletResponse response);


              @Override
              public void destroy() {

              }

              @Override
              public ServletConfig getServletConfig() {
                  return config;
              }

              @Override
              public String getServletInfo() {
                  return "";
              }

              /**
               * 扩展方法
               * @return 返回ServletContext对象
               */

              public ServletContext getServletContext(){
                  return getServletConfig().getServletContext();
              }


          }

JAVAEE_Servlet_09_Adapter适配器GenericServlet

标签:row   final   安全   适配   vat   使用   res   init   实现   

原文地址:https://www.cnblogs.com/szqengr/p/14682939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!