web.xml配置详解

web.xml配置详解

web.xml配置

根标签

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xmlns="http://java.sun.com/xml/ns/javaee" 
		xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" 
		xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
		version="3.0">

	<!-- 其它内容 -->

</web-app>

安全认证标签

元素 说明
web-resource-collection web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTP方法。如果不存在HTTP方法,就将安全约束应用于所有的方法。
web-resource-name 是与受保护资源相关联的名称
auth-constraint auth-constraint元素用于指定可以访问该资源集合的用户角色。如果没有指定auth-constraint元素,就将安全约束应用于所有角色。
role-name 包含安全角色的名称
	<security-constraint>
        <display-name>描述名</display-name>
        <web-resource-collection>
            <web-resource-name>test</web-resource-name>
            <url-pattern>/*</url-pattern>
            <http-method>PUT</http-method>
      		<http-method>DELETE</http-method>
      		<http-method>HEAD</http-method>
      		<http-method>OPTIONS</http-method>
      		<http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
    </security-constraint>
    
	<login-config>
    	<auth-method>BASIC</auth-method>
	</login-config>
<!-- 四种认证类型 -->
    <!-- BASIC:HTTP规范,Base64 这种方式被认为是最不安全的认证,因为它没有提供强烈的加密措施 -->
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
    
    <!-- DIGEST:HTTP规范,数据完整性强一些,但不是SSL 相比于BASIC认证,它是种比较安全的认证,它在认证时将请求数据 通过MD5的加密方式进行认证 -->
    <login-config>
        <auth-method>DIGEST</auth-method>
    </login-config>
    
    <!-- CLIENT-CERT:J2EE规范,数据完整性很强,公共钥匙(PKC) 这是一种基于客户端证书的认证方式,比较安全。但缺陷是在没有安全证书的客户端无法使用 -->
    <login-config>
        <auth-method>CLIENT-CERT</auth-method>
    </login-config>
    
    <!-- FORM:J2EE规范,数据完整性非常弱,没有加密,允许有定制的登录界面 这是种基础自定义表单的认证,你可以指定登录时的验证表单 -->
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.html</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
	</login-config>
参数 说明
BASIC HTTP规范,Base64 这种方式被认为是最不安全的认证,因为它没有提供强烈的加密措施
DIGEST HTTP规范,数据完整性强一些,但不是SSL 相比于BASIC认证,它是种比较安全的认证,它在认证时将请求数据 通过MD5的加密方式进行认证
CLIENT-CERT J2EE规范,数据完整性很强,公共钥匙(PKC) 这是一种基于客户端证书的认证方式,比较安全。但缺陷是在没有安全证书的客户端无法使用
FORM J2EE规范,数据完整性非常弱,没有加密,允许有定制的登录界面 这是种基础自定义表单的认证,你可以指定登录时的验证表单

Web 应用图标,名称与描述

	<!-- .gif 或者 .jpg格式 -->
	<!-- 指出IDE和GUI工具用来表示Web应用的大图标和小图标 -->
	<icon> 
	  <!-- (16x16像素) -->
	  <small-icon>/images/app_small.gif</small-icon> 
	  <!-- (32x32像素) -->
	  <large-icon>/images/app_large.gif</large-icon> 
	</icon>
	
	<!-- 指定Web应用程序的显示名称,即GUI工具可以显示的简称 -->
	<display-name>Tomcat Example</display-name>
	
	<!-- 给出于此相关的说明性文本 -->
	<disciption>Tomcat Example servlets and JSP pages.</disciption> 

初始化过程

  • 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<context-param>

  • 接着容器会创建一个ServletContext(上下文),整个WEB项目都能使用这个上下文

  • 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext

  • 容器创建<listener>中的类实例,即创建监听

    备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener

  • 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter(“contextConfigName”) 来得到context-param 设定的值

  • 在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法,用于关闭应用前释放资源,比如说数据库连接的关闭
    得到这个context-param的值之后,你就可以做一些操作了

    注意,这个时候你的WEB项目还没有完全启动完成,这个动作会比所有的Servlet都要早

  • 容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

上下文参数context-param

application范围内的参数,存放在servletcontext中

<context-param>
	<param-name>contextConfigName</param-name>
	<param-value>contextConfigValue></param-value>
</context-param>

作用

  • 该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数

    param-name 设定上下文的参数名称。必须是唯一名称
    param-value 设定的参数名称的值

使用

  • 页面中
    ${initParam.contextConfigName}
  • Servlet中
    String param = getServletContext().getInitParameter(“contextConfigName”);

过滤器filter

	<filter>
        <filter-name>OutFilter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        <init-param>
            <param-name>testName</param-name>
            <param-value>testValue</param-value>
        </init-param>
        <init-param>
        	<param-name>...</param-name>
        	<param-value>...</param-value>
        </init-param>
        <!-- filterConfig.getInitParameter("testName"); -->
    </filter>
    <filter-mapping>
        <filter-name>OutFilter</filter-name>
        <url-pattern>/Check.do</url-pattern>
		<!-- 
			完全匹配:/index.jsp 
			目录匹配:/com/*
			扩展匹配:*.do
			全部匹配:/*
		-->
	
        <!-- <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher> -->
    </filter-mapping>  
元素 说明
<filter><\filter> 定一个过滤器
<filter-name><\filter-name> 用于为过滤器指定一个名字,该元素的内容不能为空
<filter-class><\filter-class> 用于指定过滤器的完整的限定类名
<init-param><\init-param> 用于为过滤器指定初始化参数
它的子元素<param-name>指定参数的名字,<param-value>指定参数的值
在过滤器中,可以使用FilterConfig接口对象来访问初始化参数
<filter-mapping><\filte-mapping> 元素用于设置一个 Filter 所负责拦截的资源
<filter-name><\filter-name>子元素 用于设置filter的注册名称
该值必须是在<filter>元素中声明过的过滤器的名字
<url-pattern><\url-pattern>子元素 设置 filter 所拦截的请求路径(过滤器关联的URL样式)
<servlet-name><servlet-name> 指定过滤器所拦截的Servlet名称
<dispatcher>子元素 指定过滤器所拦截的资源被 Servlet 容器调用的方式
可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST
用户可以设置多个<dispatcher>子元素用来指定 Filter 对资源的多种调用方式进行拦截
  • <dispatcher>子元素可以设置的值及其意义

  • REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用

  • INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用

    只要是通过<jsp:include page=“xxx.jsp” />,嵌入进来的页面,每嵌入的一个页面,都会走一次指定的过滤器

  • FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用

    只有当当前页面是通过请求转发转发过来的情形时,才会走指定的过滤器

  • ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用

监听器listener

	<listener> 
      <listerner-class>com.listener.MyListener</listener-class> 
	</listener>

servlet

基础配置

	<servlet> 
	  <!-- <description>描述</description>
      <display-name>描述名</display-name> -->
      <servlet-name>TestServlet</servlet-name> 
      <servlet-class>com.my.controller.TestServlet</servlet-class> 
   </servlet> 
   <servlet-mapping> 
      <servlet-name>TestServlet</servlet-name> 
      <url-pattern>/testServlet</url-pattern> 
   </servlet-mapping>

高级配置

	<servlet> 
	  <!-- <description>This is a text description about myservlet</description>
  	  <display-name>myServlet</display-name>
  	  <icon>...</icon> -->
      <servlet-name>TestServlet</servlet-name> 
      <servlet-class>com.my.controller.TestServlet</servlet-class> 
      <init-param> 
         <param-name>testName</param-name> 
         <param-value>testValue</param-value> 
      </init-param> 
	  <!-- 在servlet的
	  this.getInitParameter("testName") -->

      <load-on-startup>0</load-on-startup>
      <run-as> 
         <description>Security role for anonymous access</description> 
         <role-name>tomcat</role-name> 
      </run-as> 
      <security-role-ref>
      	<description>...</description>
      	<role-name>...</role-name>
      	<role-link>...</role-link>
      </security-role-ref>
   </servlet> 
   <servlet-mapping> 
      <servlet-name>TestServlet</servlet-name> 
      <url-pattern>/testServlet</url-pattern> 
   </servlet-mapping> 
元素 说明
<servlet><\servlet> 用来声明一个servlet的数据
<servlet-name><\servlet-name> 指定servlet的名称
<servlet-class><servlet-class> 指定servlet的类名称
<jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
servlet-class和jsp-file二选一,只能存在一个
<init-param><init-param>
<param-name></param-name>
<param-value></param-value>
用来定义参数,可有多个init-param
servlet范围内的参数,只能在servlet的init()方法中取得
在servlet的init()方法中通过this.getInitParameter(“testName”)获取
<load-on-startup></load-on-startup> load-on-startup 元素标记容器是否应该在启动的时候加载这个servlet,(实例化并调用其init()方法)。
它的值必须是一个整数,表示servlet应该被载入的顺序
指定当Web应用启动时,装载Servlet的次序
当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它
当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet
当值相同时,容器就会自己选择顺序来加载。
<run-as><run-as> 指定用于执行Web应用程序的运行身份。它包含一个可选描述和安全角色的名称
<security-role-ref><\security-role-ref> 用于将<security-role>定义的安全角色名称链接到在servlet逻辑中硬编码的备用角色名称
这种额外的抽象层允许在部署时配置servlet,而无需更改servlet代码
<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素
<servlet-name></servlet-name> 指定servlet的名称
<url-pattern></url-pattern> 指定servlet所对应的URL
  • description,display-name, icon的三个标签必须按照description到display-name再到icon顺序,否则会报错

会话超时配置(单位为分钟)

	<session-config> 
      <session-timeout>30</session-timeout> 
	</session-config> 
	<!-- 设置值为-1表示会话永不会超时 -->

MIME类型配置

	<mime-mapping> 
      <extension>htm</extension> 
      <mime-type>text/html</mime-type> 
   </mime-mapping>
   <mime-mapping>
    <extension>doc</extension>
    <mime-type>application/msword</mime-type>
  </mime-mapping>

指定欢迎文件页配置

	<welcome-file-list> 
      	<welcome-file>index.jsp</welcome-file> 
      	<welcome-file>index.html</welcome-file> 
      	<welcome-file>index.htm</welcome-file> 
	</welcome-file-list>

配置错误页面

	<!-- 通过错误码来配置error-page -->
	<error-page> 
      	<error-code>404</error-code> 
     	 <location>/jsp/NotFound.jsp</location> 
	</error-page> 
	<!-- 通过异常的类型来配置error-page -->
	<error-page> 
      	 <exception-type>java.lang.NullException</exception-type> 
      	 <location>/jsp/error.jsp</location> 
    </error-page>
    <!-- 当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp -->

jsp-property-group

	<jsp-config>
		<jsp-property-group>
	    	<!-- 成组导入jsp文件 -->
        	<url-pattern>*.jsp</url-pattern>
        	<!-- 设置jsp网页的抬头,扩展名为.jspf -->
        	<include-prelude>/WEB-INF/jspf/first.jspf</include-prelude>
        	<!-- 设置jsp网页的结尾,扩展名为.jspf -->
        	<include-coda>/WEB-INF/jspf/end.jspf</include-coda>
	  	</jsp-property-group>
	</jsp-config>

TLD配置

	<jsp-config> 
      	<taglib> 
      		<!-- 描述一个相对于web.xml文档位置的URI,用于标识Web应用程序中使用的标记库 -->
      		<!-- 如果URI与JSP页面上的taglib指令中使用的URI字符串匹配,则使用此taglib -->
        	<taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri> 
        	<!-- 相对于Web应用程序根目录的标记库描述符的文件位置 -->
        	<taglib-location>/WEB-INF/pager-taglib.tld</taglib-location> 
      	</taglib> 
	</jsp-config>

获取配置文件中的参数

  • servlet
    import javax.servlet.ServletConfig;
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		// 利用ServletConfig的getInitParameter来获取参数
		String testName = config.getInitParameter("testName");
	}
  • struts
	try {
		javax.servlet.ServletConfig config = this.getServlet().getServletConfig();
		System.out.println("--" + config.getInitParameter("testName"));
	} catch (Exception e) {
		e.printStackTrace();
	}
  • jsp
String testName = new String(application.getInitParameter("testName"));
上一篇:锦囊1—读取XML文件转换为String


下一篇:2. Mybatis的第一个程序