2013-08-30 200 views
0

我有一個SpringMVC應用程序,我需要創建一個控制器,能夠處理給定擴展名的文件的所有請求。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> 

調度的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

你是什麼'DispatcherServlet'映射到? –

+0

謝謝,我用這些信息編輯了問題。 – Augusto

回答

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.*被視爲等效。如果您有一個映射到/somePath@Controller處理程序方法,它可能會獲得優先級。

使用Java的配置,你可以匹配模式時聲明@Configuration類擴展WebMvcConfigurationSupport並添加

@Override 
@Bean 
public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
    RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); 
    handlerMapping.setUseSuffixPatternMatch(false); 
    return handlerMapping; 
} 

此設置決定

是否使用後綴模式匹配(「*」)到 請求。

RequestMappingHandlerMapping還有其他的方法/設置,您可以使用它們來設置正確的路徑。

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 

    } 

} 
相關問題