0

SpringMVC アプリケーションがあり、特定の拡張子を持つファイルに対するすべての要求を処理できるコントローラーを作成する必要があります。

これまでのところ、私はこれを持っています:

web.xml

<filter-mapping>
    <filter-name>redirectFilter</filter-name>
    <url-pattern>*.jhtml</url-pattern>
</filter-mapping>

spring-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-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>      

コントローラはどのように記述すればよいですか?

4

2 に答える 2

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 config を使用すると、拡張および追加する@Configurationクラスを宣言できますWebMvcConfigurationSupport

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

この設定で決まります

パターンをリクエストに一致させるときにサフィックス パターン マッチ (".*") を使用するかどうか。

にはRequestMappingHandlerMapping、正しいパスを設定するためにいろいろ試してみることができる他の方法/設定があります。

于 2013-08-30T20:28:00.013 に答える
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

    }

}
于 2013-08-31T14:05:29.537 に答える