servlet
GenericServlet
HttpServlet
如上图:每一个自定义的Servlet类都重复编写红色横线被标出的三行代码 如此一来 多个servlet的话 会出现多次重复
--->解决方案:重构代码 消除重复
定义一个MyGenericServlet————>实现servlet 并把之前的实现的功能和方法复制过来
让之前的那两个servlet继承这个MyGenericServlet这个类,通过继承 代码复用的原则 这两个Servlet就不会出现代码重复的问题了,同时使用父类的代码。
public class helloworldServlet extends MyGenericServlet{
}
public class helloworldServlets extends MyGenericServlet{
}
问题又来了:继承完之后 这里的servlet是空白的 就不知道 该怎么处理请求了,servlet的本质就是处理请求,如果想处理请求 我们就得编写service()方法.--进行修改
//父类
abstract public class MyGenericServlet implements Servlet{
// 把之前的service方法 修改成抽象方法--强制让继承者的子类 实现这个方法
abstract public void service(ServletRequest Request, ServletResponse Response);
//把当前的servletConfig对象暴漏给子类访问使用
public ServletConfig getServletConfig() {
return this.confige;
}
//其他的方法省略。。。。
}
//子类
public class helloworldServlet extends MyGenericServlet{
public void service(ServletRequest request, ServletResponse response) {
System.out.println(super.getServletConfig().getInitParameter("param1"));
}}
public class helloworldServlets extends MyGenericServlet{
public void service(ServletRequest request, ServletResponse response) {
System.out.println(super.getServletConfig().getInitParameter("param2"));
}}
子类还可以继续的简化代码 把super.getServletConfig().getInitParameter("param")==>简化为super.getInitParameter("param")
怎么做呢?
首先 我们把getServletConfig()省略了 这个方法在哪里来的呢 是从父类中ServletConfig中获取到的,遵循万物守恒原则,子类少写了代码 那么父类要给补回来 以后我们只调用子类 不用父类。
然后让父亲的MyGenericServlet实现ServletConfig接口 以后我们做网络传输 还要实现Serializable接口,如下图:
学习知识,要知其然并知其所以然。