web.xm 是 web 应用的描述文件,它支持的元素及属性来自于 servlet 规范定义。在 Tomcat 中,web 应用的描述信息包括 tomcat/conf/web.xml 中的默认配置以及 web 应用文件目录 中 WEB-INE/web.xml 内的定制配置。
可以通过<context-param>添加 Servletcontext 初始化参数,它配置了一个键值对,这样就 可以在应用程序中使用 javax.servlet.servletContext.getInitParameter()方法获取参数, 以此来配置 Servlet context 初始化时的一些参数信息,也就是说通过<context-param>配 置的参数可以在 servlet 中使用。
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xm1</param-value> <description>Spring Config File Location</description> </context-param> <!-- 例如:web.xml中配置为 --> <context-param> <param-name>site_of_project</param-name> <!-- 参数名 --> <param-value>www.domainname.cn</param-value> </context-param>
<!-- 在servlet中使用下面的方法获取该参数 --> public class BbsServlet extends HttpServlet { @Override protected void doGet (...){ String value = req.getServletContext ().getInitParameter( S: "site_of_project");<!-- 使用该方法获取参数 --> System. out.println(value) ; } ... }
1.3 会话配置 session-config
如图,左边为客户端浏览器,右边为服务器。假设 HTTP 请求 A 为登录请求,那么服务器端 就会记录此次登录信息,将其保存在服务端 Session 内。保存好后,服务器给客服端响应一 个 JSESSIONID,这个 JSESSIONID 实际上就是个 Cookie,将该 Cookie 写入给浏览器端,下 一次浏览器访问该服务器时,比如图中请求 B,就会带上 JSESSIONID,此时,服务器就知道 该客户端之前登录过,客户端也就不必再次登录。此时浏览器默认的 Cookie 就是 JSESSIONID。 Tomcat 的会话配置就是上图中 Session 交互过程的属性配置,如 Session 的生命周期,和 Cookie 相关配置。
<session-config>用于配置 web 应用会话,包括超时时间、Cookie 配置以及会话追踪模式。 它将覆盖 server.xml 和 context.xml 中的相应配置。
<session-config> <session-timeout>30</session-timeout> <!-- session有效期 --> <cookie-config> <name>JESSIONID</name> <!-- 默认的cookie名叫JSESSIONID --> <domain>www.domainname.cn</domain> <path>/</path> <comment>Session Cookie</comment> <!-- 注释信息 --> <http-only>true</http-only> <!-- 该cookie对象只能通过http请求携带到服务端 --> <secure>false</secure> <!-- true 则表示只允许https协议携带该cookie --> <max-age>3600</max-age> <!-- cookie的有效期 --> </cookie-config> <tracking-mode>COOKIE</tracking-mode> <!-- session会话的跟踪模式,此处使用cookie跟踪,还可以使用URL或者SSL --> </session-config>
Servlet 的配置主要是两部分,servlet 和 servlet-mapping:
<servlet> <servlet-name>myServlet</servlet-name> <!-- servlet的名称 --> <servlet-class>cn.itcast.web.MyServlet</servlet-c1ass> <!-- 指定servlet类 --> <init-param> <!-- 针对当前的servlet的初始化参数配置 --> <param-name> fileName</param-name> <param-value>init.conf</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 当前servelt的加载顺序,0或者大于0时表示应用程序启动时加载该servlet --> <enabled>true</enabled> <!-- 当前servlet是否能够接受请求 --> </servlet> <servlet-mapping> <!-- servlet映射配置 --> <servlet-name>myServlet</servlet-name> <url-pattern>*.do</url-pattern> <url-pattern>/myservlet/*</url-pattern> <!-- 此配置表示访问http://www.domainname.cn/myservlet/* 等URL就找myServlet进行请求处理 --> </servlet-mapping>
配置多个 url-pattern. Servlet 中文件上传配置示例:
<servlet> <servlet-name>uploadServlet</servlet-name > <servlet-class>cn.domainname.web.UploadServlet</servlet-class> <multipart-config> <location>D://path</location> <max-file-size>10485760</max-file-size> <max-request-size>10485760</max-request-aize> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet>
Listener 用于监听 servlet 中的事件,例如 context、request、 session 对象的创建、 修改、删除,并触发响应事件。Listener 是观察者模式的实现,在 servlet 中主要用于对 context、 request、 session 对象的生命周期进行监控。在 servlet2.5 规范中共定义 了 8 种 Listener。在启动时, servletContextlistener 的执行顺序与 web.xml 中的 配置顺序一致,停止时执行顺序相反。
<listener> <listener-class>oxg. spxingfr amework .web. context. ContextLoaderListener</listener-class> </listenex>
filter 用于配置 web 应用过滤器,用来过滤资源请求及响应。 经常用于认证、日志、加密、 数据转换等操作,配置如下:
<filter> <filter-name>myFilter</filter-name> <filter-class>cn.domainname.web.MyFilter</filter-cla33> <async-supported>true</async-supported> <init-param> <param-name>language</param-name> <param-value>CN</param-value> </init-param> </filter> <fiter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
welcome-file-list 用于指定 web 应用的欢迎文件列表。在每个应用中配置则 覆盖 tomcat 的默认 web.xml 中的配置。
<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
尝试请求的顺序为从上到下。
error-page 用于配置 web 应用访问异常时定向到的页面,支持 HTTP 响应码和异常类两种形式。
<error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/500.html</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
从早期的 Tomcat 版本开始,就提供了 Web 版的管理控制台,他们是两个独立的 web 应用, 位于 webapps 目录下。Tomcat 提供的管理应用有用于管理的 Host 的 host-manager 和 用于管理 web 应用的 manager。
Tomcat 启动之后,可以通过http://localhost:8080/host-manager/html 访问该 Web 应用。 host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码 (conf/tomcat-users.xm1 中配置)。 所以要想访问该页面,需要在conf/tomcat-users.xml 中配置,并分配对应的角色:
admin-gui :用于控制 HTML 页面访问权限 admin-script :用于控制以简单文本的形式进行访问 配置如下:
<role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="username" password="password" roles="manager-script, manager-gui"/>
默认 Tomcat 不允许其它主机访问,只允许 Tomcat 所在的本地主机访问,需要编辑webapps/manager/META-INF/context.xml
[root@node1]# vim webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.*"/> <!-- 增加需要访问Tomcat应用的相应主机的地址 --> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$Lru Cache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
manager 的访问地址为http://localhost:8080/manager 同样,manager 也添加了页面访问控制,因此我们需要为登录用户分配角色为:
<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="tomcat" password="stevenux" roles="admin-script, admin-gui, manager -gui , manager-script"/>
同样需要编辑webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.*" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$Lru Cache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>