【发布时间】:2015-07-22 00:41:26
【问题描述】:
我有一个 Spring MVC 应用程序,其中包含例如注释的各种方法
@RequestMapping(value="/SomeUrl/{filename:.+}", method=RequestMethod.GET)
在大多数情况下,这完全可以正常工作; ".+" 正则表达式意味着包含点字符的文件名也可以正常工作(如此处所述 Spring MVC @PathVariable getting truncated )
但是,如果请求是“/SomeUrl/Something.jsp”,那么该请求甚至不会命中我的方法,大概是因为 Spring MVC 已经内置处理,注意到扩展名是 .jsp,然后搜索名为的实际文件东西.jsp。
我的应用确实有 JSP,但它们都是通过 @RequestMapping 方法或 servlet 访问的,JSP 永远不会被直接访问。那么如何禁止 Spring MVC 使用 .jsp 扩展名执行任何特殊处理呢?
在我的 web.xml 中仅供参考,我将所有内容通过管道传输到 MVC 调度程序中,如下所示:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
dispatcher-servlet.xml 包含以下内容:
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!-- Turn off working out content type based on URL file extension, should fall back to looking at the Accept headers -->
<property name="favorPathExtension" value="false" />
</bean>
<!-- This allows the static content (the CSS file) to be accessed still via the dispatcher -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<context:component-scan base-package="com.myservicepackage" />
非常感谢您对此提出任何建议!
【问题讨论】:
-
您打算允许访问jsp还是阻止访问? ` 那么我怎样才能禁止 Spring MVC 使用 .jsp 扩展名执行任何特殊处理`。这让我很困惑,因为您似乎有兴趣将请求发送给您的方法..
-
我的意图是 /SomeUrl/Something.jsp 与 /SomeUrl/Something.txt 没有什么不同,由我的 @RequestMapping 注释方法处理
标签: java spring jsp spring-mvc