《tomcat配置文件web.xml与server.xml解析--重要(0积分下载)》由会员分享,可在线阅读,更多相关《tomcat配置文件web.xml与server.xml解析--重要(0积分下载)(8页珍藏版)》请在金锄头文库上搜索。
1、Tomcat5028 里有里有 web.xml 和和 server.xml,它们是它们是 tomcat 自身的配置文件。自身的配置文件。Tomcat5028 里有里有 web.xml 和和 server.xml,它们是它们是 tomcat 自身的配置文件。自身的配置文件。Tomcat5028 里有里有 web.xml 和和 server.xml,它们是它们是 tomcat 自身的配置文件。自身的配置文件。Web.xml 里主要的内容:里主要的内容:关于关于 servlet 的定义:的定义:defaultorg.apache.catalina.servlets.DefaultServletdeb
2、ug0listingstrue1。 。 。 。 。 。关于关于 servlet-mapping 的定义:的定义:default/jsp*.jspjsp*.jspx关于关于 session-config 的定义:的定义:30关于关于 mime-mapping 的定义:的定义:absaudio/x-mpeg最后是关于最后是关于 welcom-file-list 的定义:的定义:index.htmlindex.htmindex.jsp可能还有事件监听器,过滤器事件监听器:事件监听器:事件监听器和 servlet 的过滤器类似,都是在 web 程序被部署到 web 服务器时生成并被 初始化的。 几类监
3、听器的作用: ServletContext 监听器接口可以使 web 得知整个程序的载入和卸载等运行情况。 HttpSession 监听器接口可以使 web 程序了解程序会话期间的状况并作出响应。 ServletRequest 监听器接口可以使 web 程序控制请求的生命周期。在第一个请求被 web 容器接受之前实例化并注册好监听器类是必须的。监听器在整个 web 应用生命周期中都要使用。 web 容器对每个监听类只会创建一个实例(单例模式) ,在第一个请求到来之前实例化 并注册。web 容器注册监听类的顺序根据他们实现的接口和在部署描述文件中定义的顺序。 web 应用调用监听实例的顺序按照他
4、们注册的顺序。 对appfuse来说,在web容器根据应用程序部署文件web.xml进行部署的时候,首先完成对 listener和filter的实例化和初始化,然后由于 public class StartupListener extends ContextLoaderListenerimplements ServletContextListener 。 StartupListener 继承自 ServletContextListener,因此在容器对 servletContext 进行初始化的时候,会调用这个监听。由于在 appfuse 应 用程序的 web.xml 里有关于 spring
5、的配置信息,因此这里就把 spring 配 置好了!过滤器:过滤器:Filter 生命周期生命周期在 web 工程发布后,在请求使引擎访问一个 web 资源之前,引擎必须定位 Filter 列表; 引擎必须确保为列表中的每一个 Filter 建立了一个实例,并调用了他们的 init(FilterConfig config)方法。在这过程中可以抛出异常。部署描述文件中定义的所有 filter,仅会在引擎中 产生一个实例。 当引擎接受一个请求时,引擎就会调用 filter 列表中第一个 filter 的 doFilter 方法,把 ServletRequest,ServletResponse 和
6、FilterChain 作为参数传给它。filter 中 doFilter 方法典型 的处理步骤是: 1)检查请求头信息 2)开发者创建一个实现了 ServletRequest 或 HttpServletRequest 的类,去包装 request 对象,以便修改请求的头信息或体数据。 3)开发者创建一个实现了 ServletReqponse 或 HttpServletResponse 的类,去包装response 对象,以便修改请求的头信息或体数据。 4)filter 可以调用链中的下一个实体,下一个实体是另一个 filter,如果该 filter 是列表 中最后的一个,则它的下一个实体就是
7、一个目标 web 资源。如果要调用下一个 filter 的 doFilter 方法,把 request,和 response 对象传给 FilterChain 对象的 doFilter 方法中就可以了。Filter chain 的 doFilter 方法是由引擎提供的,引擎在该方法中会定位 filter 列表中的下 一个 filter,调用它的 doFilter 方法,把传来的 request 和 response 对象传给它。 5)在调用 chain.doFilter 之后,filter 可以检测响应的头信息 6)在这些过程中,filter 可以抛出异常。当在调用 doFilter 过程中抛
8、出 UnavailableException 异常时,引擎重复尝试处理 下面的 filter chain 的方法,如过时后还没请求到 filter chain 就会关闭对 filter chain 的 请求。当 filter 是列表中最后一个 filter 时,它的下一个实体是描述配置文件中 filter 后面的 servlet 或其它资源。 在引擎删除一个 Filter 之前,引擎必须调用 Filter 的 destroy 方法,来释放资源。Web.xml:都是关于应用程序的。:都是关于应用程序的。各种。 。 。 。 各种,以及。 。 。 。 各种。 。 。 。 各种,以及。 。 。各种。
9、。 。 。Server.xml 里的主要内容:里的主要内容:首先是关于首先是关于 server 的定义:的定义:。 。 。 关于 server 的注释: A “Server“ is a singleton element that represents the entire JVM,which may contain one or more “Service“ instances. The Serverlistens for a shutdown command on the indicated port.关于关于 listener 的定义:的定义:关于关于 globalNamingResou
10、rces 的定义:的定义:factoryorg.apache.catalina.users.MemoryUserDatabaseFactorypathnameconf/tomcat-users.xml关于关于 service 的定义:的定义:。 。 。 注意 connector 和 engine(container)都是 service 里的元素。关于关于 connector 的定义:的定义:关于 connector 的注释: A “Connector“ represents an endpoint by which requests are receivedand responses are
11、 returned. Each Connector passes requests on to theassociated “Container“ (normally an Engine) for processing.关于关于 engine 的定义:的定义:。 。 。关于 engine 的注释: An Engine represents the entry point (within Catalina) that processesevery request. The Engine implementation for Tomcat stand aloneanalyzes the HTTP
12、headers included with the request, and passes themon to the appropriate Host (virtual host).关于关于 logger 的定义:的定义:关于关于 realm 的定义:的定义:Comment z1: 这个很重要,关于 tomcat 服务器的特性和对应的配置文 件。关于关于 host 的定义:的定义:关于关于 logger 的定义:的定义:关于 logger 的注释: Logger shared by all Contexts related to this virtual host. Bydefault (w
13、hen using FileLogger), log files are created in the “logs“directory relative to $CATALINA_HOME. If you wish, you can specifya different directory with the “directory“ attribute. Specify either arelative (to $CATALINA_HOME) or absolute path to the desireddirectory.。 。 。后面还可能有关于 context 的定义。server.xml
14、:都是关于服务器一些特性的。:都是关于服务器一些特性的。一个 server 有一个 service,一个 service 里有多个 connector 和一个 engine,不同的 connector 除了端口可能不同,协议也可能不同。多个 connector 对应一个 engine。engine 代 表我们应用程序的容器。一个 engine 中有一个到多个 host,一个 host 代表我们的一个虚拟 主机。host 里又有一个到多个 context,一个 context 代表了一个应用程序的虚拟子站点。应用程序里也有 web.xml 和 struts-config.xml,这两个配置文件的
15、内容不同于 tomcat 自带的配置文件。tomcat 应用程序的初始化和运行过程:应用程序的初始化和运行过程:在 tomcat 启动时的工作(初始化): 由于应用程序是放在 webapps 目录下面的,在 Tomcat 启动时,其 web 容器会自动校 验和载入此目录内的 web 程序,使其可以直接工作。如果程序有错,web 服务器会将错误信息输出或存入在 logs 目录,若错误严重,tomcat 可能会停止工作。从上面我们可以看到一个 webapp 应用程序中,包含的元素有: Filter,listener,servlet。它们初始化的时机应该是不一样的。Servlet 和和 jsp 的生
16、命周期:的生命周期:从 Tomcat 处理用户请求,我们可以清晰的看到容器 Servlet 的生命周期管理过程: 1、Tomcat 在启动的时候应该直接加载并实例化 webapps 下面应用程序的 listener 和 filter,并在相应的时机进行调用。 2、客户发出请求Web 服务器转发到 Web 容器 Tomcat; 3、Tomcat 主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest 和 HttpServletResponse; 4、从请求中的 URL 中找到正确 Servlet,Tomcat 为其创建或者分配一个线程,同时把 3 创建的两个对象传递给该线程; 5、Tomcat 调用 Servlet 的 servic()方法,根据请求参数的不同调用 doGet()或者 doPost() 方法; 6、假设是 HTTP GET 请求,doGet()方法生成静态页面,并组合到响应对象里; 7、Servlet 线程结束,Tomcat 将响应对象转换为 HTTP 响应发回给客户,同时删除请 求和响应对象。 从该