`

tomcat配置文件web.xml与server.xml解析--重要

阅读更多

Web.xml里主要的内容:

 

关于servlet的定义:

<servlet>

        <servlet-name>default</servlet-name>

        <servlet-class>

          org.apache.catalina.servlets.DefaultServlet

        </servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <init-param>

            <param-name>listings</param-name>

            <param-value>true</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

</servlet>

。。。。。。

关于servlet-mapping的定义:

<servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>/</url-pattern>

</servlet-mapping>

 

<servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

    </servlet-mapping>

 

    <servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jspx</url-pattern>

    </servlet-mapping>

 

关于session-config的定义:

<session-config>

        <session-timeout>30</session-timeout>

    </session-config>

 

关于mime-mapping的定义:

<mime-mapping>

        <extension>abs</extension>

        <mime-type>audio/x-mpeg</mime-type>

    </mime-mapping>

 

最后是关于welcom-file-list的定义:

       <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

 

可能还有事件监听器,过滤器

事件监听器:

事件监听器和servlet的过滤器类似,都是在web程序被部署到web服务器时生成并被初始化的。

几类监听器的作用:

ServletContext监听器接口可以使web得知整个程序的载入和卸载等运行情况。

HttpSession监听器接口可以使web程序了解程序会话期间的状况并作出响应。

ServletRequest监听器接口可以使web程序控制请求的生命周期。

 

在第一个请求被web容器接受之前实例化并注册好监听器类是必须的。监听器在整个web应用生命周期中都要使用。

web容器对每个监听类只会创建一个实例(单例模式),在第一个请求到来之前实例化并注册。web容器注册监听类的顺序根据他们实现的接口和在部署描述文件中定义的顺序。web应用调用监听实例的顺序按照他们注册的顺序。

appfuse来说,在web容器根据应用程序部署文件web.xml进行部署的时候,首先完成对listenerfilter的实例化和初始化,然后由于

public class StartupListener extends ContextLoaderListener

    implements ServletContextListener {。。。。

StartupListener继承自ServletContextListener,因此在容器对servletContext进行初始化的时候,会调用这个监听。由于在appfuse应用程序的web.xml里有关于spring的配置信息,因此这里就把spring配置好了!!!

 

过滤器:

Filter生命周期

web工程发布后,在请求使引擎访问一个web资源之前,引擎必须定位Filter列表;引擎必须确保为列表中的每一个Filter建立了一个实例,并调用了他们的init(FilterConfig config)方法。在这过程中可以抛出异常。部署描述文件中定义的所有filter,仅会在引擎中产生一个实例。

当引擎接受一个请求时,引擎就会调用filter列表中第一个filterdoFilter方法,把ServletRequestServletResponseFilterChain作为参数传给它。filterdoFilter方法典型的处理步骤是:

1)检查请求头信息

2)开发者创建一个实现了ServletRequestHttpServletRequest的类,去包装request对象,以便修改请求的头信息或体数据。

3)开发者创建一个实现了ServletReqponseHttpServletResponse的类,去包装response对象,以便修改请求的头信息或体数据。

4)filter可以调用链中的下一个实体,下一个实体是另一个filter,如果该filter是列表中最后的一个,则它的下一个实体就是一个目标web资源。如果要调用下一个filterdoFilter方法,把request,和response对象传给FilterChain对象的doFilter方法中就可以了。

Filter chain doFilter方法是由引擎提供的,引擎在该方法中会定位filter列表中的下一个filter,调用它的doFilter方法,把传来的requestresponse对象传给它。

5)在调用chain.doFilter之后,filter可以检测响应的头信息

6)在这些过程中,filter可以抛出异常。当在调用doFilter过程中抛出UnavailableException异常时,引擎重复尝试处理

下面的filter chain的方法,如过时后还没请求到filter chain 就会关闭对filter chain的请求。当filter是列表中最后一个filter时,它的下一个实体是描述配置文件中filter后面的servlet或其它资源。

在引擎删除一个Filter之前,引擎必须调用Filterdestroy方法,来释放资源。

 

Web.xml:都是关于应用程序的。

 

<web-app >

各种<context-param>。。。。

各种<filter>,以及<filter-mapping>。。。。

各种<listener>。。。。

各种<servlet>,以及<servlet-mapping>。。。

<session-config>

<welcome-file-list>

    各种<error-page>。。。。

       <taglib>

       <resource-ref>

       <security-constraint>

       <login-config>

       <security-role>

 

Server.xml里的主要内容:

首先是关于server的定义:

<Server port="8005" shutdown="SHUTDOWN" debug="0">

。。。

关于server的注释:

A "Server" is a singleton element that represents the entire JVM,

     which may contain one or more "Service" instances.  The Server

     listens for a shutdown command on the indicated port.

 

关于listener的定义:

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"

            debug="0"/>

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"

            debug="0"/>

 

关于globalNamingResources的定义:

<GlobalNamingResources>

 

    <!-- Test entry for demonstration purposes -->

    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

 

    <!-- Editable user database that can also be used by

         UserDatabaseRealm to authenticate users -->

    <Resource name="UserDatabase" auth="Container"

              type="org.apache.catalina.UserDatabase"

       description="User database that can be updated and saved">

    </Resource>

    <ResourceParams name="UserDatabase">

      <parameter>

        <name>factory</name>

        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>

      </parameter>

      <parameter>

        <name>pathname</name>

        <value>conf/tomcat-users.xml</value>

      </parameter>

    </ResourceParams>

 

  </GlobalNamingResources>

 

关于service的定义:

<Service name="Catalina">

。。。

              注意connectorenginecontainer)都是service里的元素。

 

关于connector的定义:

<Connector port="8000"       URIEncoding="gbk"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               debug="0" connectionTimeout="20000"

               disableUploadTimeout="true" />

关于connector的注释:

A "Connector" represents an endpoint by which requests are received

         and responses are returned.  Each Connector passes requests on to the

         associated "Container" (normally an Engine) for processing.

 

关于engine的定义:

       <Engine name="Catalina" defaultHost="localhost" debug="0">

       。。。

 

关于engine的注释:

An Engine represents the entry point (within Catalina) that processes

         every request.  The Engine implementation for Tomcat stand alone

         analyzes the HTTP headers included with the request, and passes them

         on to the appropriate Host (virtual host).

 

关于logger的定义:

<Logger className="org.apache.catalina.logger.FileLogger"

              prefix="catalina_log." suffix=".txt"

              timestamp="true"/>

 

关于realm的定义:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"

                 debug="0" resourceName="UserDatabase"/>

 

关于host的定义:

<Host name="localhost" debug="0" appBase="webapps"

       unpackWARs="true" autoDeploy="true"

       xmlValidation="false" xmlNamespaceAware="false">

 

关于logger的定义:

<Logger className="org.apache.catalina.logger.FileLogger"

                 directory="logs"  prefix="localhost_log." suffix=".txt"

            timestamp="true"/>

关于logger的注释:

Logger shared by all Contexts related to this virtual host.  By

          default (when using FileLogger), log files are created in the "logs"

           directory relative to $CATALINA_HOME.  If you wish, you can specify

           a different directory with the "directory" attribute.  Specify either a

           relative (to $CATALINA_HOME) or absolute path to the desired

           directory.

 

。。。后面还可能有关于context的定义。

 

server<!--[if !supportAnnotations]-->[z1]<!--[endif]--> .xml:都是关于服务器一些特性的。

一个server有一个service,一个service里有多个connector和一个engine,不同的connector除了端口可能不同,协议也可能不同。多个connector对应一个engineengine代表我们应用程序的容器。一个engine中有一个到多个host,一个host代表我们的一个虚拟主机。host里又有一个到多个context,一个context代表了一个应用程序的虚拟子站点。

 

应用程序里也有web.xmlstruts-config.xml,这两个配置文件的内容不同于tomcat自带的配置文件。

 

tomcat应用程序的初始化和运行过程:

tomcat启动时的工作(初始化):

由于应用程序是放在webapps目录下面的,在Tomcat启动时,其web容器会自动校验和载入此目录内的web程序,使其可以直接工作。如果程序有错,web服务器会将错误信息输出或存入在logs目录,若错误严重,tomcat可能会停止工作。

 

从上面我们可以看到一个webapp应用程序中,包含的元素有:

Filterlistenerservlet。它们初始化的时机应该是不一样的。

 

Servletjsp的生命周期:

Tomcat处理用户请求,我们可以清晰的看到容器Servlet的生命周期管理过程:

1Tomcat在启动的时候应该直接加载并实例化webapps下面应用程序的listenerfilter,并在相应的时机进行调用。

2、客户发出请求—>Web 服务器转发到Web容器Tomcat

3Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequestHttpServletResponse

4、从请求中的URL中找到正确ServletTomcat为其创建或者分配一个线程,同时把3创建的两个对象传递给该线程;

5Tomcat调用Servletservic()方法,根据请求参数的不同调用doGet()或者doPost()方法;

6、假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;

7Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。

从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应4步);Servlet实例化(对应3步);调用init方法(对应4步);调用service()方法(对应56步);;调用destroy()方法(对应7步)。

从中可以看到servletjsp是在请求到来的时候,web容器进行首次对servletjsp(转换为servlet)的初始化。而且初始化一次之后,在web容器中就只存在这样一个实例,利用多线程来处理不同用户的请求。

 

Struts-config.xml

<form-beans>

       各种<form-bean>

 

<global-exceptions>

<global-forwards>

              各种<forward>。。。。

<action-mappings>

各种<action>。。。。action里还可能有forward元素,如果有,而且它与global-forwards里的重名,则它会将global里的覆盖。

 

各种</plug-in>

<!--[if !supportAnnotations]-->
<!--[endif]-->
分享到:
评论

相关推荐

    tomcat配置文件web.xml与server.xml解析

    tomcat配置文件web.xml与server.xml解析

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

    Tomcat6.x+IIS6+jk2最新整合

    我整我整整了我大半天,不过直得整合的好处就不说了 ...tomcat的一些虚拟主机配置可以见配置文件server.xml 在访问过测试页后ISAPI筛选器"jakarta"会显示绿色箭头,红色是配置错误 不知道还有没有漏掉的 ^^

    Tomcat6.x+IIS6+jk2 整合

    软件环境:Window server 2003+ IIS6.0 + Tomcat6.0 + JK2 ...tomcat的一些虚拟主机配置可以见配置文件server.xml 在访问过测试页后ISAPI筛选器"jakarta"会显示绿色箭头,红色是配置错误 不知道还有没有漏掉的 ^_^

    how-tomcat-works

    第14章 Server与Service 114 14.1 概述 114 14.2 server 114 14.3 StandardServer 114 14.3.1 initialize方法 114 14.3.2 start方法 115 14.3.3 stop方法 115 14.3.4 await方法 116 14.4 Service接口 116 14.5 ...

    axis1.4 部署解析webservie

    1.TOMCAT+AXIS的安装配置 首先机子上应该安装JDK1.5版本以上(带有XML解析包)。我这里是1.5.0.6 从APACHE的官方网站(www.apache.org)下载TOMCAT安装软件。下载版本要在4.0以上。这里用的是5.0版本。安装完后,...

    Tomcat面试专题及答案.pdf

    2)在 server.xml 文件上配置节点,设置相关的属性即可 3)通过 Catalina 来进行配置:进入到 conf\Catalina\localhost 文件下,创建一个 xml 文件,该文件的名字就是站点的名字。 编写 XML 的方式来进行设置。

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.5.1 Struts2的配置文件类型 8.5.2 Struts2的包配置 8.5.3 名称空间配置 8.5.4 Action相关配置 8.5.5 通配符实现简化配置 8.5.6 返回结果的配置 8.6 Struts2的开发模式 8.6.1 实现与ServletAPI的交互 86.2 域模型...

    Java 面试宝典

    14、Integer 与 int 的区别 .............................................................................................. 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? .....................

    java面试题

    32. 应用服务器与WEB SERVER的区别? 16 33. BS与CS的联系与区别。 16 34. 启动一个线程是用run()还是start()? 17 35. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,...

    spring security 参考手册中文版

    6.2.1 web.xml配置 50 6.2.2最小的配置 50 6.2.3表单和基本登录选项 52 设置默认的登录目的地 54 6.2.4注销处理 54 6.2.5使用其他身份验证提供程序 55 添加密码编码器 56 6.3高级Web功能 56 6.3.1记得我认证 56 ...

    happycat:用于学习tomcat服务器的Web服务器

    happycat / conf / server.xml的配置权限文档库 使用“ java -jar happycat.jar”运行 :eyes: 参考 Apache Tomcat食谱 Tomcat架构解析 Tomcat如何工作 Tomcat权威指南 规范UML 2.5.1 UML蒸馏 PlantUML_Language_...

    详解在Tomcat7.0中设置默认服务器和不加端口名访问

    在WEB-INF文件夹下有个web.xml文件(最近新建的项目不包含此文件,可以手动新建),在welcome-file-list节点中设置,代码如下 &lt;welcome&gt;test.html&lt;/welcome&gt;  这样,原先需要在浏览器访问htt

    JavaHttpServer:一个像tomcat等的servlet容器,可以运行这个项目下的web应用

    一个像tomcat等的servlet...config.xml :是配置文件,就像web-app在com.test中的web.xml一样 现在我们已经实现了:(1)连接器(实现多连接的HttpProcessor池)(2)容器(管道和方案)(3)请求解析(4)配置servlet

Global site tag (gtag.js) - Google Analytics