带有RequestMapping的Spring MVC 4.2.4 / Controller(" / **")和静态资源

时间:2016-01-08 13:52:34

标签: angularjs jsp spring-mvc resolver request-mapping

我有一个使用ui-router的角度应用程序,由SpringMvc(4.2.4)java应用程序提供服务。我决定将任何请求映射到一个Controller /方法,该Controller加载我项目的单个JSP页面。

但是,当我尝试添加静态资源映射时,要加载js和css文件,这些静态资源会被忽略... [mayapp] / resources / *路径中的每个请求都会导致我的单个jsp页面。< / p>

这是我的配置:

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

servlet.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 {

在遇到这个问题之前,我在web.xml中使用了每个/ resources / *的默认servlet,但是我正在使用maven生成我的脚本/ css的.gz版本 我希望这种配置能够使用GzipResourceResolver。

我已经尝试过但没有用的东西

  • 声明2区分web.xml中的DispatcherServlet,一个仅用于JSP,另一个仅用于资源。 (我将mvc配置拆分为每个servlet的2个不同文件)
  • @RequestMapping(&#34; /&#34;)在控制器中,用户必须在根地址输入网站,这是不可接受的。
  • 我尝试设置订单,并作为InternalResourceViewResolver的属性

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的, 在调试模式下挖掘。 HandlerMappings按此顺序排列:

  • RequestMappingHandlerMapping (@ Controller一,内部属性“order”= 0)
  • SimpleUrlHandlerMapping (资源一,内部属性“order”= 0)
  • BeanNameUrlHandlerMapping (不知道它是什么...... ^^)

当调用/ resource / *文件时, RequestMappingHandlerMapping 是第一个作为有效候选者回复的人。

在Spring配置中添加这样的订单后:

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

有效。