您的位置:首页 > 理论基础 > 计算机网络

皮皮学web不知道第几弹——GenericServlet,HttpServlet

2017-02-24 15:21 309 查看
一、GenericServlet:

1、 是一个 Serlvet. 实现了Servlet接口和ServletConfig接口,service()方法为抽象方法,是一个抽象类。

2、继承这个类会使开发更简洁。
    比如 获取初始化参数,要先声明config 然后再在service方法中,用config获取初始化参数。
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config); //To change body of generated methods, choose Tools | Templates.

this.config=config;
}
service()方法中:
ServletContext context=config.getServletContext();
        String user1=context.getInitParameter("user1");
        String pwd1=context.getInitParameter("password1");

但是继承这个类 就可以直接写
ServletContext context=getServletConfig().getServletContext();
String user1=context.getInitParameter("user1");
String pwd1=context.getInitParameter("password1");


3、 具体实现:

public abstract class GenericServlet implements Servlet, ServletConfig {

/** 以下方法为 Servlet 接口的方法 **/
@Override
public void destroy() {}

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

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

private ServletConfig servletConfig;

@Override
public void init(ServletConfig arg0) throws ServletException {
this.servletConfig = arg0;
init();
}

public void init() throws ServletException{}

@Override
public abstract void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException;

/** 以下方法为 ServletConfig 接口的方法 **/
@Override
public String getInitParameter(String arg0) {
return servletConfig.getInitParameter(arg0);
}

@Override
public Enumeration getInitParameterNames() {
return servletConfig.getInitParameterNames();
}

@Override
public ServletContext getServletContext() {
return servletConfig.getServletContext();
}

@Override
public String getServletName() {
return servletConfig.getServletName();
}


二、HttpServlet:

1、 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制.

2、在 service() 方法中直接把 ServletReuqest 和  ServletResponse 转为 HttpServletRequest 和 HttpServletResponse.并调用了重载的 service(HttpServletRequest, HttpServletResponse)
     在 service(HttpServletRequest, HttpServletResponse) 获取了请求方式: request.getMethod(). 根据请求方式有创建了doGet, doPost方法
3、直接继承 HttpServlet, 并根据请求方式复写 doGet() 或doPost()方法即可. 可以直接使用HttpServletRequest和HttpServletResponse,不需要强转。
实现方法:
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {

HttpServletRequest  request;
HttpServletResponse response;

try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
// TODO Auto-generated method stub

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息