设计模式中的模板模式
1、GenericSevlet的底层实现
2、HttpServlet的底层实现
抽象出一个专门处理HTTP类型的请求和响应——处理Http的service方法,统一处理GET/POST请求,提供doGet和doPost方法。(继承GenericServlet类)
public class MyHttpServlet extends MyGenericServlet {
// 只能处理一般的请求
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
// 调用处理Http请求的方法
service(httpServletRequest, httpServletResponse);
}
public void service(HttpServletRequest reg, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求方式 GET/POST
String method = reg.getMethod();
if ("GET".equals(method)){
doGet(reg, resp);
} else if("POST".equals(method)){
doPost(reg, resp);
}
}
// 专门用于处理POST请求
private void doPost(HttpServletRequest reg, HttpServletResponse resp) {
System.out.println("AServlet.doPost()");
}
// 专门用于处理GET请求
private void doGet(HttpServletRequest reg, HttpServletResponse resp) {
System.out.println("AServlet.doGet()");
}
}
而在子类中只需要重写父类的init方法以及service方法即可。
public class TestServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// 初始化代码
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service()----");
// 不要调用父类的service
// super.service(req, resp);
}
}