SpringMVC中url-pattern的使用

SpringMVC中url-pattern的使用

<servlet-mapping>
        <servlet-name>mySpringMVC</servlet-name>
        <url-pattern> </url-pattern> <!-- *号匹配后缀-->
</servlet-mapping>

1. 不要配置为 /*

url-pattern 不能写为/*。因为此时 DispatchterServlet 会向动态页面的跳转发送请求,即向 JSP 页面的跳转请求也当作是一个普通的 Controller 请求,中央处理器会调用处理器映射器查找响应的处理器,当然是找不到相应处理器的;

即当写为/*时,会拦截所有动态资源请求 (jsp) 交给 DispatchterServlet,当然是找不到相应处理器的,在这种情况下,所有的 JSP 页面跳转均会报 404 错误。

对于静态资源请求…

2. 最好不要配置为 /

url-pattern 最好不要写为/。因为此时 DispatchterServlet 会向静态资源的获取发送请求,例如 .css、.js、.jpg、.png 等资源的获取请求,也当作是一个普通的 Controller 请求,中央处理器会调用处理器映射器查找响应的处理器,当然是找不到相应处理器的;

即当写为/会时,会拦截下所有静态资源请求交给 DispatchterServlet,当然是找不到相应处理器的,在这种情况下,所有的静态资源获取请求均会报 404 错误。

对于动态资源请求…

PS:此时静态资源无法访问的解决方法:

方法一:使用 Tomcat 默认的 Servlet,配置 servlet-mapping

使用 Tomcat 默认的 Servlet,在电脑的 Tomcat 安装目录下,tomcat/conf/web.xml 的 web.xml 文件中,有默认配置如下:

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

然后在项目的 web.xml 文件中,配置 servlet-mapping,使用此默认 Servlet:

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
</servlet-mapping>

然后就可以顺利加载 .html 后缀的静态资源了。其它如 .css、.js、.jpg 后缀的静态资源文件也可类似的设置。

方法二:使用 mvc:default-servlet-handler/
  1. 保证 springmvc.xml 中有 spring-mvc 的约束:
xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  1. 在 springmvc.xml 中添加 <mvc:default-servlet-handler/> 标签即可;然后便可以访问所有静态资源了。

  2. 执行原理分析:

    mvc:default-servlet-handler 会将对静态资源的访问请求通过 HandlerMapping 映射到默认 Servlet 请求处理器 DefaultServletHttpRequestHandler 对象。而该处理器调用了 Tomcat 的 DefaultServlet 来处理静态资源的访问请求。(方法一)

方法三:使用 mvc:resources/

参考方法二;

然后将 <mvc:default-servlet-handler>标签改为 <mvc:resources location="/resouces-directory-name/" mapping="/resouces-directory-name/**"/>标签。其中 location 表示静态资源所在目录,mapping 表示对该资源的请求(注意后面有两个星号**)。

该配置会该配置会把对该静态资源的访问请求经 HandlerMapping 直接映射到静态资源处理器对象 ResourceHttpRequestHandler。

3. 建议使用*.do的形式

注:

/*/的理解感觉仍存在问题。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值