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

---servlet(四)Servlet和GenericServlet和HttpServlet

2016-07-10 14:20 393 查看

Servlet和GenericServlet和HttpServlet

UML图:



Servlet

使用直接实现Servlet接口必须实现以下五个方法

init(servletconfig config)

service(servletrequest

destroy()

getservletconfig()

getservletinfo()

public class TestServlet implements Servlet {
private ServletConfig servletconfig;

@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.servletconfig = config;
}

@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return servletconfig;
}

@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub

}

@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return getServletInfo();
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}

}


GenericServlet

GenericServlet类是一个抽象类,提供了Servle接口的基本实现,他的子类需要实现其service方法

public abstract class MyGenericServlet implements Servlet, ServletConfig {

private ServletConfig servletConfig;

// 以下为实现Servlet接口中的方法

@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.servletConfig = config;
init();
}

/**
* 两个Init方法,如果以后在子类中想要重写init,直接重写没有参数的init();
*
* 如果在子类中重写了init(ServletConfig config),
*
* 那么servletConfig就不能初始化,调用getServletConfig 会产生空指针异常
*
* 通常在编写继承自GenericServlet的Servlet类时,只需重写不带参数的init()方法就可以了。如果覆盖了带参数的init(
* ServletConfig config )方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。
*
*/
private void init() {
// TODO Auto-generated method stub

}

@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return servletConfig;
}

@Override
public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return getServletInfo();
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}
// 以下为实现ServletConfig接口的方法

@Override
public String getServletName() {
// TODO Auto-generated method stub
return servletConfig.getServletName();
}

@Override
public ServletContext getServletContext() {
// TODO Auto-generated method stub
return servletConfig.getServletContext();
}

@Override
public String getInitParameter(String name) {
// TODO Auto-generated method stub
return servletConfig.getInitParameter(name);
}

@Override
public Enumeration<String> getInitParameterNames() {
// TODO Auto-generated method stub
return servletConfig.getInitParameterNames();
}

}


HttpServlet

httpservlet类扩展了genericservlet并且提供了servlet接口中具体于http的实现,它更象一个其他所有的servlet都要扩展的类,主要使用这个类

/**
* 对于HTTP协议的一个Servlet基类
*
* @author tuxianchao
*
*/
public class MyHttpServlet extends MyGenericServlet {

@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
service((HttpServletRequest) request, (HttpServletResponse) response);
}

}

public void service(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
// 根据请求方式对应处理
String method = request.getMethod();
if ("GET".equalsIgnoreCase(method)) {
doGet(request, response);
} else if ("POST".equalsIgnoreCase(method)) {
doPost(request, response);

}

}

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

}

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

}

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