springmvc配置servlet的拦截形式/*和/的区别

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

今天复制一个现有的sPRing-mvc的项目修改配置作为新的项目,结果悲剧了!遇到了一个小问题困扰了半天,找同事找总监都没有搞定,纠结了半天终于发现了问题所在,随笔记一下,所谓好记性不如烂博客嘛!

问题描述:

项目很简单,只是简单搭建一个spring-mvc框架,写一个测试的NewsController,关于问题的配置如下:

web.xml

1<servlet>2<servlet-name>spring-mvc</servlet-name>3<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>4<init-param>5<param-name>contextConfigLocation</param-name>6<param-value>/WEB-INF/spring-mvc.xml</param-value>7</init-param>8</servlet>9<servlet-mapping>10<servlet-name>spring-mvc</servlet-name>11<url-pattern>/*</url-pattern>12</servlet-mapping>

spring-mvc的视图解析器如下:

<!--视图解释类 通过配置文件,把一个视图名交给到一个View来处理 InternalResourceViewResolver加入了JSTL的支持--><beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"/><propertyname="suffix"value=".jsp"/></bean>

controller方法如下

//首页

@RequestMapping("/index")

public String getnewsList(ModelMap model) {

return "ttt";

}

ttt.jsp是/WEB-INF/views/目录下的一个新建的ttt.jsp,就这样启动项目后,访问项目http://localhost:8080/news/index,结果返回404,Problemaccessing /news/WEB-INF/views/ttt.jsp。

解决方案

开始一直以为jsp页面没有编译,最后发现确实没有编译,tomcat的jsp是在第一次请求页面的时候编译的,但是为什么没有编译呢?说明没有请求到页面,查看控制台打印的信息发现

日志打印没有找到/WEB-INF/views/ttt.jsp对应的handler,说明/WEB-INF/views/ttt.jsp请求又被spring-mvc的selvet拦截了两次,问题出现了,为什么会拦截两次呢?原因就出在web.xml里配置的拦截形式/*上面,修改成/就没问题了。

总结一下

/*是拦截所有请求,包括视图解析后跳转的.jsp页面,/则不会拦截视图解析后的.jsp页面!

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航