【问题标题】:Spring MVC 4.2.4 / Controller with RequestMapping("/**") and static resourcesSpring MVC 4.2.4 / 带有 RequestMapping("/**") 和静态资源的控制器
【发布时间】:2016-04-13 05:35:52
【问题描述】:

我有一个使用 ui-router 的 Angular 应用程序,由 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>

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 {

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


我已经尝试过但没有用的方法

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

提前致谢。

【问题讨论】:

  • 你应该将MainController的请求映射值更改为不同的“/**”和“/resources”,例如:@RequestMapping("/yourapp")。
  • 这不是我想要的。我知道它会奏效的。我找到了解决办法,请看下面的答案

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


【解决方案1】:

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

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

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

在 Spring 配置中添加这样的命令后:

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

成功了。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2017-05-09
    • 1970-01-01
    • 2023-04-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多