关于web.xml 里<servlet>的常用配置解释

关于web.xml 里的常用配置解释

就看了一些问题以后,发现其实有些人对于web.xml的配置其实还是一知半解,特别是servlet这一块。。到底是什么意思。就知道这么写,不知道这么写会发生什么。所以出了问题的时候更加是一个头两个大。
一般在web.xml的配置的时候,关于servlet,会有两个 标签

<servlet>
<servlet-mapping>

然后servlet这个里面又有三个常用标签,分别是servlet-name,servlet-class,load-onon-startup
是什么意思呢?

  <servlet>
    <servlet-name>name</servlet-name>
    <servlet-class>com.servlettest.TestServlet</servlet-class>
  </servlet>

这个的意思是
首先,我创建了一个servlet 他的名字叫name
然后,他对应的方法(肉身),在路劲是com.servlettest.TestServlet的上面。
那么load-onon-startup又有什么用呢?

  <servlet>
    <servlet-name>name</servlet-name>
    <servlet-class>com.servlettest.TestServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

这个标签加上了以后,这个servlet就会在web启动的时候被生成(执行内部的init()方法被创建),顺序呢,是第1位,如果没有第0位的情况下呢,就是他第一个了,
(ps:普通的servlet(没有设置这个标签,或者设置了值为负数)是在被请求的时候,才会执行内部的init()方法,被生成)

那么,我们在来看servlet-mapping的内容,通常里面会有两个标签,一个是servlet-name,还有一个是url-pattern

  <servlet-mapping>
    <servlet-name>name</servlet-name>
    <url-pattern>/hello.html</url-pattern>
  </servlet-mapping>

这又是什么意思呢,这就是,当网页输入了这个/hello.html的url之后,我会把这个请求,拦截下来交给 名字叫做name的servlet 去处理他。而不是直接在相应目录下找hello这个文件。
这么一说,大家也应该知道url-pattern可以是多条的,也就是多个请求链接,交个一个servlet处理。

在接下来就是匹配问题了,除了/hello.html这种精确匹配呢,还有多种匹配方式。
下面,我按照,匹配的顺序来为大家介绍。

最先开始的是精确匹配。
也就是/hello.html 这种,表示url只有是它的时候,我才会匹配

第二个是路径匹配
也就是 /hello/* ,表示,当url为/hello/……类型的时候,会匹配

第三个是扩展名匹配
也就是 *.html ,表示,后缀是html的,我都能匹配的到

最后一个是缺省匹配 ,我一般喜欢叫全匹配
写法就是 / ,表示,所有的文件,我通吃。

匹配顺序依次下来
精确 -> 路劲 -> 扩展名 -> 全匹配 找不到的时候才会去下一个

有两点要注意到就是
全匹配的/ 会可能被写成/* ,但是/* 是属于路径匹配(优先度第二名),会把第三的 *.html这种扩展名匹配给覆盖掉。

还有呢,就是,这种匹配方式是不能混合使用的 就比如 我 /hello/*.html 这种呢是会报错的,用不了。

猜你喜欢

转载自blog.csdn.net/qq_38604499/article/details/81506408
今日推荐