我有一个SpringMVC应用程序,我需要创建一个能够处理具有给定扩展名的文件的所有请求的控制器。
到目前为止,我有这个:
的web.xml
<filter-mapping>
<filter-name>redirectFilter</filter-name>
<url-pattern>*.jhtml</url-pattern>
</filter-mapping>
弹簧mvc.xml
<bean id="anotherViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver" >
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jhtml"/>
</bean>
Dispatcher Servlet
<servlet>
<servlet-name>abc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name>
<url-pattern>/abc/*</url-pattern>
</servlet-mapping>
我该怎么写控制器?
答案 0 :(得分:0)
您可以像这样编写@Controller
方法
@RequestMapping(value = "**/*.jhtml")
public String handleExtensionRequest() {
return "viewName";
}
这将映射到
之类的路径www.yourhost.com/abc/somePath.jhtml
www.yourhost.com/abc/asdasdasd/qweqwe1231/12312312/somePath.jhtml
沿着任意数量的子路径前进。
问题是/abc/somePath
和/abc/somePath.*
被视为等效。如果您有@Controller
处理程序方法映射到/somePath
,它可能会获得优先权。
使用Java配置,您可以声明@Configuration
类来扩展WebMvcConfigurationSupport
并添加
@Override
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
handlerMapping.setUseSuffixPatternMatch(false);
return handlerMapping;
}
此设置决定
匹配模式时是否使用后缀模式匹配(“。*”) 请求。
RequestMappingHandlerMapping
可以使用其他方法/设置来设置正确的路径。
答案 1 :(得分:0)
我选择了最简单的方法:因为我只需要将这些* .jhtml请求重定向到其他地方,我为它们添加了一个过滤器。
<强>的web.xml 强>
<filter>
<description>Filter for *.jhtml requests</description>
<display-name>jhtmlRedirectFilter</display-name>
<filter-name>jhtmlRedirectFilter</filter-name>
<filter-class>com.mycompany.JHTMLRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jhtmlRedirectFilter</filter-name>
<url-pattern>*.jhtml</url-pattern>
</filter-mapping>
JHTMLRedirectFilter类
public class JHTMLRedirectFilter implements Filter {
private static final Logger logger = Logger.getLogger(JHTMLRedirectFilter.class);
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// Some logic here
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}