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

HttpServlet

2017-06-21 11:34 381 查看
HttpServlet是用HTTP协议实现的Servlet基类,我们在写servlet时直接继承它就可以,不需再从头要实现servlet接口。

springMVC中的DispatcherServlet就是继承的HttpServlet

HttpServlet主要关心的是如何处理请求,所以它主要是重写了service方法,

在service方法中先将ServletRequest和ServletResponse转换为HttpServletRequest和HttpServletResponse

然后根据http请求类型的不同将请求路由到了不同的处理方法。

public abstract class HttpServlet extends GenericServlet {

...篇幅问题,省略部分代码

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);
}

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求类型
String method = req.getMethod();
//将不同的请求类型路由到不同的处理方法
if (method.equals("GET")) {
long lastModified = getLastModified(req);
if (lastModified == -1L) {
doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
} catch (IllegalArgumentException iae) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L) {
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if (method.equals("HEAD")) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
} else if (method.equals("POST")) {
doPost(req, resp);
} else if (method.equals("PUT")) {
doPut(req, resp);
} else if (method.equals("DELETE")) {
doDelete(req, resp);
} else if (method.equals("OPTIONS")) {
doOptions(req, resp);
} else if (method.equals("TRACE")) {
doTrace(req, resp);
} else {
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);

resp.sendError(501, errMsg);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  httpServlet
相关文章推荐