GenericServlet
实现了Servlet接口,并帮我们做了一些常用操作1.init方法 妥善的保存config对象并实现getServletInfo,getServletConfig,
2.增加一个空参init方法,供开发人员初始化,为了防止开发人员重写 原生init方法
3.service方法空实现=> 声明城抽象(强制开发人员实现该方法)
4.destory方法空实现
5.实现了servletConfig接口. 接口中的方法直接调用config实现类实现.
自定义一个GeneriServlet类,加深原理的理解
public abstract class MyGenericServlet implements Servlet, ServletConfig {
private ServletConfig servletConfig;
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return this.servletConfig;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException;
@Override
public String getInitParameter(String arg0) {
return servletConfig.getInitParameter(arg0);
}
@Override
public ServletContext getServletContext() {
return servletConfig.getServletContext();
}
@Override
public Enumeration<String> getInitParameterNames() {
return null;
}
@Override
public String getServletName() {
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
this.init();
}
public void init() throws ServletException {
}
}
public class ServletTwo extends MyGenericServlet{ 普通的Servlet只需要继承自定义的Servlet,起到讲话的作用。Tomcat也自帶了一個GenericServlet我們可以用它。
HttpServlet
在GenericServlet的基础上针对http服务做的一些优化1.service函数中强转参数
ServletRequest—>HttpServletRequest;
ServletResponse—>HttpServletResponse
2.根据不同的请求方式(get,post等)调用不同的方法(doGet,doPost等)
所以我们写http服务的话,直接继承HTTPServlet就可以了,然后再doGet等方法中处理响应
自定义一个HttpServlet类,,加深原理的理解
public abstract class MyHttpServlet extends MyGenericServlet {
private static final String METHED_GET = "GET";
private static final String METHED_POST = "POST";
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) {
try {
// 强转类型
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 调用service(HttpServletRequest,HttpServletResponse)方法
service(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
// 根据请求方式,决定使用的方法
String method = httpServletRequest.getMethod();
if (method.equalsIgnoreCase(METHED_GET)) {
doGet(httpServletRequest, httpServletResponse);
} else if (method.equalsIgnoreCase(METHED_POST)) {
doPost(httpServletRequest, httpServletResponse);
}
}
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
}
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
}
}
从以上的代码中可以看出,我们自己写Servlet的时候,直接继承Httpservlet类就行。
GenericServlet和HttpServlet的联系
1、GenericServlet类是所有Servlet类的祖先类。
2、HttpServlet类继承了GenericServlet类。