欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!
在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>也不会用到所有的标签,需要根据自身需求进行编写。
若文中存在错误和不足,欢迎指正!
本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!