【Servlet】Servlet的请求流程

Servlet的请求流程:
如下图:

1:浏览器先发送请求:http://localhost:80/day3/hello.
   2:DNS解析域名(忽略)
   3:Tomcat解析请求:/day3/hello.
       上下文路径:/day3
       资源的名称:/hello
   4:解析Tomcat根/conf/server.xml文件,获取其中所有的<Context/>元素,并找到path属性为/day3的元素.
      <Context docBase="D:\JavaApps\Servlet\webapp" path="day3"/>.
      再读取该<Context/>元素,再获取docBase属性值,该属性值就是当前访问的WEB项目的根路径.
   5:从该web的根路径/WEB-INF下找到web.xml文件.
   6:读取web.xml文件,获取所有的<url-patten>元素,并判断哪一个<url-pattern>的文本内容为:/hello.
      找不到: 报404错误.
      找  到: GOTO 7.
   7:通过/hello,找到当前Servlet的全限定名.
     com._520it._01_hello.HelloServlet.
   8:从Servlet的实例缓冲池中去获取com._520it._01_hello.HelloServlet对应的对象.
      Map<String,Servlet> cache = .....;
      Servlet obj = cache.get("com._520it._01_hello.HelloServlet");
      if(obj == null{
           //第一次请求:GOTO 9.
      }else{
           //非第一次请求:GOTO 12;
      }
    9:使用反射创建Servlet对象.
      Servlet obj = Class.forName("com._520it._01_hello.HelloServlet").newInstance();
    10.把创建的Servlet对象,存储到Servlet实例缓存池中,供下一次请求使用.
        cache.put("com._520it._01_hello.HelloServlet",obj);
    11:容器创建ServletConfig对象,并调用init方法,来完成初始化操作.
       obj.init(config);
    12:容器创建ServletRequest和ServletResponse对象,并调用service方法,处理请求.
       obj.service(req,resp);
    13:在service方法中,对当前请求的客户端做相应.

 

posted @ 2017-04-22 12:34  Qingyun_Qearl  阅读(326)  评论(0)    收藏  举报