SpringMVC - 具有相同文件扩展名的所有文件的控制器

时间:2013-08-30 20:17:42

标签: java spring-mvc

我有一个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>      

我该怎么写控制器?

2 个答案:

答案 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

    }

}