标签:接收 pattern 编写 启动 str send 对象 std context
Servlet:Java编写的服务器端程序,处理客户端的http请求并将其结果发送到客户端。
Servlet容器Tomcat:
最熟悉的是容器就是tomcat。在tomcat中,server-包含-service-包含-connector+container+other
最核心的组件:
Connector:接收TCP请求,创建response和request对象,分配线程给container处理
Container:servlet容器,责任链模式的子容器:engine--host--Context--wrapper
一个wrapper负责一个servlet,装载,初始化,执行,回收
Context是运行servlet基本环境,功能是管理里面的servlet实例。一个Context对应一个web工程。
生命周期:Lifecycle接口控制,最高组件是server,所以server.startup;server.shutdown;
Servlet,Filter,Listener:
一个应用的初始化入口是web.xml,首先需要将其中各个配置项属性设置到Context容器中,包括servlet,filter,listener。
Servlet:
方法:init();如果不设置load-on-startup,则在被调用之后才初始化
service();参数:ServletRequest,ServletResponse:描述一次请求和响应的类,作用是在服务器收到请求后,将请求穿过容器传递给servlet处理。我们创建自己的servlet类是经常使用的HttpServletRequest继承于它。
destroy();
如何找到正确的servlet(即wrapper容器)并且执行它?
Tomcat7中,由一个http.mapper类管理,它保存了所有子容器信息。
mapper类为什么可以保存所有子容器信息?
将mapperListener类作为一个监听者加到每个子容器中。
Filter:拦截 请求和响应发送到servlet之前被调用
方法:
init();容器启动后即初始化
doFilter();参数:ServletRequest,ServletResponse,FilterChain
destroy()
在<servlet-mapping>和<filter-mapping>中都有<url-pattern>配置项,servlet-mapping中以url配置,filter-mapping中以url或者servlet名称配置。
Listener:监听 1.生命周期的变化 2.属性的变化
Servlet的请求转发与重定向:
Servlet可以将发送给自己的某个请求转发给另外一个url地址,这个地址可以是html,jsp,servlet等。
1. 转发,forward()
request.getRequestDispatcher (“/url"). forward(request, response);//转发到url
转发在服务器端完成,浏览器并不知道这个操作,浏览器的地址栏不改变,并且转发和转发到的界面可以共享request里的数据。
2. 重定向,sendRedirect()
response.sendRedirect(“request.getContextPath()+/url"); //重定向到url,客户端第二次发送请求会直接请求服务器根目录,所以需要getContextPath得到当前容器目录
服务器返回一个重定向路径,客户端重新发出请求,浏览器的地址栏改变,request中的变量全部失效,两个界面不能共享数据。
标签:接收 pattern 编写 启动 str send 对象 std context
原文地址:http://blog.51cto.com/13580976/2070811