Servlet规范系列 之 <servlet>、<servlet-mapping>配置详解

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!

  在Servlet2.x版本中,配置依然是通过web.xml的形式进行配置的,升级到Servlet3.x后,可以依赖注解式方式进行配置。

  本文只对<servlet>、<servlet-mapping>进行分析解释。

  XSD地址

  可以从官方获取web.xml的XSD约束web-app_2_5.xsd,同时web-app_2_5.xsd依赖javaee_5.xsd、jsp_2_1.xsd、javaee_web_services_client_1_2.xsd三个约束,地址如下:

  · http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

  · http://java.sun.com/xml/ns/javaee/javaee_5.xsd

  · http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd

  · http://java.sun.com/xml/ns/javaee/javaee_web_services_client_1_2.xsd

  <servlet>、<servlet-mapping>配置

  根据XSD约束,整理出<servlet>、<servlet-mapping>节点内容如下:

<servlet>
	<description></description>			<!-- 0或1个 -->
    <display-name></display-name>		<!-- 0或1个 -->
    <icon>								<!-- 0或1个 -->
    	<small-icon></small-icon>
        <large-icon></large-icon>
    </icon>
    <servlet-name></servlet-name>		<!-- 1个 -->
    <servlet-class></servlet-class>		<!-- <servlet-class>和<jsp-file>任选一个即可 -->
    <jsp-file></jsp-file>
    <init-param>						<!-- 0或多个 -->
    	<description></description>
        <param-name></param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup></load-on-startup>	<!-- 0或1个 -->
    <run-as>							<!-- 0或1个 -->
    	<description></description>
        <role-name></role-name>
    </run-as>
    <security-role-ref>					<!-- 0或1个 -->
    	<discription></discription>
        <role-name></role-name>
        <role-link></role-link>
    </security-role-ref>
</servlet>
<servlet-mapping>						<!-- 1或多个 -->
    <servlet-name></servlet-name>		<!-- 0或1个 -->
    <url-pattern></url-pattern>			<!-- 0或多个 -->
</servlet-mapping>

​  <servlet>、<servlet-mapping>详解

  · <servlet>

   · <display-name>

    Servlet的显示名称,并不参与实际编码。

   · <description>

    Servlet的描述信息,并不参与实际编码。

    对于<display-name>和<description>来说,都是用来描述Servlet,尽管是程序运行的非必要元素,但当需要管理的Servlet较多时,较好的编写<display-name>和<description>可以使得配置更具有可读性和可维护性,在一些Servlet管理工具中可以更加方便的进行管理。

   · <icon></icon>

    为当前Servlet指定一个图标,包含<small-icon>、<large-icon>两个子标签,可以定义小、大图标,在一些Servlet管理工具中可以通过图标进行辨认。

   · <servlet-name>

    指定Servlet的名称,这个名称会参与其他配置。

   · <servlet-class> 和 <jsp-file>

    Jsp严格来说也是Servlet的一种形式,在配置时,<servlet-class>和<jsp-file>任选其一,作为程序的入口。

   · <init-param>

    用来定义参数,包含<description>、<param-name>、<param-value>三个子标签。<description>用于描述配置的信息,<param-name>用于自定参数名,<param-value>用于指定参数值。可以配置多个参数,通过GenericServlet模板类的public String getInitParameter(String name)获取指定参数、public Enumeration getInitParameterNames()获取所有参数的参数名。

   · <load-on-startup>

    Servlet容器启动时,装载Servlet的顺序。当值为正数或零时,Servlet启动时就会装载,Servlet容器优先加载数值较小的Servlet。当值为负数或未定义时,Servlet容器将在首次访问这个Servlet时加载它。

   · <run-as>

    此标签下包含<description>和<role-name>两个子标签,<description>用于描述配置的信息,<role-name>用于指定执行组件的角色名。

   · <security-role-ref>

    声明在组件和部署组件的代码中的安全角色引用。如果使用了<security-role-ref>元素,则必须包含<role-name>元素,可以包含零个或多个<description>元素,零个或一个<role-link>元素。<description>用于描述配置的信息,<role-name>用于指定代码中使用的安全角色名,<role-link>指定到一个安全角色的引用。

  · <servlet-mapping>

  定义Servlet和URL之家的映射。

   · <servlet-name>

    已经定义的Servlet名称。

   · <url-pattern>

    指定对应于Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径。URL匹配规则:

     尝试进行精准匹配,对请求路径和映射路径进行精准匹配,若匹配成功,使用此Servlet来处理请求。

    精准匹配:<url-pattern>/login</url-pattern>。

     在①未匹配成功的情况下,尝试进行路径匹配,匹配最长的路径前缀,以斜杠(/)为路径分隔符,按照路径树逐级递减匹配,选择最长匹配的Servlet处理请求。

    路径匹配:<url-pattern>/admin/user/*</url-pattern>。

     在①、②未匹配成功的情况下,尝试进行扩展名匹配,根据请求路径的扩展名进行匹配,若匹配成功,使用此Servlet来处理请求。

    扩展名匹配:<url-pattern>*.htm</url-pattern>。

     在①、②、③未匹配成功的情况下,Servlet容器会调用默认Servlet来处理请求,若没有默认Servlet请求,则会响应404(找不到请求资源)。

    默认Servlet:<url-pattern>/</url-pattern>。

  总结

  一般开发中可能很少涉及web.xml的编写,即使编写web.xml,对于<servlet>、<servlet-mapping>也不会用到所有的标签,需要根据自身需求进行编写。

  若文中存在错误和不足,欢迎指正!

本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值