springMVC的url-pattern

来源:互联网 发布:android电视直播软件 编辑:程序博客网 时间:2024/06/07 06:00

web.xml中

<servlet>        <servlet-name>springmvc</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:spring/spring-mvc.xml</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>

其中<url-pattern>中的路径的情况
1、“/”
.jsp能通过浏览器直接打开,.html则不能
此情况下会拦截静态资源,不会拦截.jsp
2、“/action/*”
.jsp和.html都可以通过浏览器直接打开,url中不需要加/action
需要controller处理的url则需要添加/action才会被拦截
3、 “/*” (错误)
.jsp和.html都不能通过浏览器直接打开
此情况或拦截所有请求,转发后的.jsp同样会被拦截
这算是一种错误的使用情况,因为会拦截所有请求,无法展示任何东西,单独配置展示类型资源则又比“/”的情况需要多处理一种.jsp类型,使用意义不大
4、 “/**”(错误)
.jsp和.html都可以通过浏览器直接打开
但是controller拦截不到url,同时会报出如下信息提示错误
信息: Suspicious url pattern: “/**” in context [/shoes] - see sections 12.1 and 12.2 of the Servlet specification
5、 “*.do”
简单好用的方式,不会拦截静态资源,页面都可以直接通过浏览器访问。
缺点:不是REST风格,对于追求url格式的没办法使用

ps:WEB-INF目录下的内容无法通过浏览器直接访问,其内的.jsp需要转发才能访问

对于静态资源拦截的处理,在网上可以找到三种方式
1、在web-xml中对每种类型的资源进行处理,需要写在spring的servlet前面

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

2、spring配置文件中的<mvc:resources>标签,此标签需要指定静态资源的位置,例如

<mvc:resources mapping="/images/**" location="/images/" />

可参考http://blog.csdn.net/clementad/article/details/46763339

3、spring配置文件中的<mvc:default-servlet-handler/>,个人认为这种方式最简单,只需两句话

    <!-- 配置mvc注解扫描 -->    <mvc:annotation-driven/>    <!-- 配置静态资源的默认servlet -->    <mvc:default-servlet-handler/>

这里会在DispatcherServlet找不到资源时调用servlet容器默认的servlet来处理,此时就不会拦截静态资源了
使用这种方式时碰到一个小问题:
@RequestMapping()中的地址和静态页面重复时会出问题,
例如@RequestMapping(“/add”)和静态页面add.html,
这样配置无法访问静态页面,会被spring拦下来进入(“/add”)的controller。
为此我使用第一种方式在web.xml中加了一个.html的过滤

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

ps:方式2、3在使用时需注意拦截器过滤的问题

原创粉丝点击