2

私は ui-router を使用する角度のあるアプリケーションを持っており、SpringMvc (4.2.4) Java アプリによって提供されます。プロジェクトの単一の JSP ページをロードする単一のコントローラー/メソッドにすべての要求をマップすることにしました。

しかし、js および css ファイルをロードするために静的リソース マッピングを追加しようとすると、それらの静的リソースは無視されます... [mayapp]/resources/* パス内のすべての要求は、単一の jsp ページにつながります。

ここに私の設定があります:

web.xml

      <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring/servlet.xml</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>

サーブレット.xml

      <context:component-scan base-package="com.adveasys.omrh.front.web" />
      <mvc:annotation-driven></mvc:annotation-driven>

      <mvc:resources mapping="/resources/**" location="/resources/">
       <mvc:resource-chain resource-cache="false" auto-registration="false">
         <mvc:resolvers>
           <bean class="org.springframework.web.servlet.resource.GzipResourceResolver"/>
           <bean class="org.springframework.web.servlet.resource.PathResourceResolver"/>
         </mvc:resolvers>
       </mvc:resource-chain>
     </mvc:resources> 

       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/pages/" />
         <property name="suffix" value=".jsp" />
      </bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/pages/" />
      <property name="suffix" value=".jsp" />
    </bean>

MainController.java

@RequestMapping("/**")
public ModelAndView mainPage(HttpServletRequest request) throws JsonProcessingException {

この問題が発生する前に、すべての /resources/* に対して web.xml でデフォルトのサーブレットを使用していましたが、maven を使用してスクリプト/css の .gz バージョンを生成しており、この種の構成で GzipResourceResolver を使用できるようにしたいと考えています。 .


すでに試してうまくいかなかったこと

  • web.xml で 2 つの個別の DispatcherServlets を宣言します。1 つは JSP 専用、もう 1 つはリソース専用です。(サーブレットごとに mvc 構成を 2 つの異なるファイルに分割しました)
  • コントローラーで @RequestMapping("/") を使用すると、ユーザーはルート アドレスで Web サイトを入力する必要があり、受け入れられません。
  • InternalResourceViewResolver のプロパティとして順序を設定しようとしました

前もって感謝します。

4

1 に答える 1

1

さて、デバッグモードで掘った後。HandlerMappings の順序は次のとおりです。

  • RequestMappingHandlerMapping (@Controller one、内部プロパティ "order" = 0)
  • SimpleUrlHandlerMapping (リソース 1、内部プロパティ "order" = 0)
  • BeanNameUrlHandlerMapping (なんのことかわからない…^^)

/resource/* ファイルを呼び出すと、RequestMappingHandlerMappingが最初に有効な候補として応答しました。

Spring 構成でそのような順序を追加した後:

<mvc:resources mapping="/resources/**" location="/resources/" order = "-1">

出来た。

于 2016-01-08T14:55:12.383 に答える