ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

web.xml配置详解

2022-01-28 16:58:13  阅读:119  来源: 互联网

标签:xml web 元素 指定 详解 jsp 过滤器 servlet


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-collectionweb-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTP方法。如果不存在HTTP方法,就将安全约束应用于所有的方法。
web-resource-name是与受保护资源相关联的名称
auth-constraintauth-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>
参数说明
BASICHTTP规范,Base64 这种方式被认为是最不安全的认证,因为它没有提供强烈的加密措施
DIGESTHTTP规范,数据完整性强一些,但不是SSL 相比于BASIC认证,它是种比较安全的认证,它在认证时将请求数据 通过MD5的加密方式进行认证
CLIENT-CERTJ2EE规范,数据完整性很强,公共钥匙(PKC) 这是一种基于客户端证书的认证方式,比较安全。但缺陷是在没有安全证书的客户端无法使用
FORMJ2EE规范,数据完整性非常弱,没有加密,允许有定制的登录界面 这是种基础自定义表单的认证,你可以指定登录时的验证表单

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"));

标签:xml,web,元素,指定,详解,jsp,过滤器,servlet
来源: https://blog.csdn.net/m0_56921622/article/details/120431720

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有