标签:row final 安全 适配 vat 使用 res init 实现
* 适配器 (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