servlet-我们到底能走多远系列(7)

servlet-我们到底能走多远系列(7)

ID:17880144

大小:200.00 KB

页数:9页

时间:2018-09-08

servlet-我们到底能走多远系列(7)_第1页
servlet-我们到底能走多远系列(7)_第2页
servlet-我们到底能走多远系列(7)_第3页
servlet-我们到底能走多远系列(7)_第4页
servlet-我们到底能走多远系列(7)_第5页
资源描述:

《servlet-我们到底能走多远系列(7)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Servlet的核心类图如下:上面的servlet只是接口,相当于描述了servlet的标准,也就是说与协议无关。而HttpServlet的实现是根据Http协议来完成的。看下面的截图:  打开源码看后发现大多数接口和抽象类,那么真正的实现都在哪呢?在servlet容器源代码里,即类似Tomcat这样的servlet容器。  所以我觉得可以这样理解Servlet的作用:它提供了操控的按钮,这些按钮一旦被安装到Servlet容器里面,http://gexing.qqq80.com我们就可以通过这些按钮操控

2、servlet容器,从而管理我们自己的Servlet实例。  这一点很重要。所以阅读Servlet源码其实就是了解他的基本结构和API,我们真正要读的是Tomcat的源码! Servlet的运行结构和API:首先看下一次Http请求-响应的过程:  A,首先客户端通过浏览器向服务器发送Http请求;  B,Tomcat监听服务器的8080端口,当有Http请求发过来之后,解析出项目名称,然后到webapps目录下搜索到该项目文件夹。  C,Tomcat作为servlet的容器,实例化第一次请求调用的的s

3、ervlet实例(以后再有相同的servlet的请求,使用第一次的实例)。  D,调用init()方法,初始化工作。  E,调用HttpServlet的service方法,中间会更加请求,调用doGet或doPost方法,执行核心逻辑代码。  F,执行完servlet后,返回响应,客户端浏览器根据响应呈现效果。然后我们看下基本的运行机制:从图上可以看出,不同的用户请求并发使用同一个Servlet实例,这是一个比较重要的基础机制。Container解析Http请求后,实例化Servlet,因为是Http请

4、求,会执行HttpServlet的代码:首先会执行HttpServlet中的service(ServletRequestreq,ServletResponseres)方法:publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpServletRequestrequest;HttpServletResponseresponse;http://www.caise8.comtry

5、{request=(HttpServletRequest)req;//请求转换成Http请求response=(HttpServletResponse)res;//响应转换成Http响应}catch(ClassCastExceptione){thrownewServletException("non-HTTPrequestorresponse");}service(request,response);//调用处理Http的service方法}然后会调用service(HttpServletRequest

6、req,HttpServletResponseresp)方法:protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{Stringmethod=req.getMethod();//取得req中的方法类型if(method.equals(METHOD_GET)){//根据方法类型来决定执行后续的方法,我们只关注doGet和doPostlonglastModif

7、ied=getLastModified(req);if(lastModified==-1){doGet(req,resp);}else{longifModifiedSince=req.getDateHeader(HEADER_IFMODSINCE);if(ifModifiedSince<(lastModified/1000*1000)){maybeSetLastModified(resp,lastModified);doGet(req,resp);//如此我们就能执行到自己写的doGet方法,从而执行自

8、己的业务逻辑。}else{resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}}elseif(method.equals(METHOD_HEAD)){longlastModified=getLastModified(req);maybeSetLastModified(resp,lastModified);doHead(req,resp);}elseif(method.equals(ME

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。