Spring MVC 4.2.4 / 带有 RequestMapping("/**") 和静态资源的控制器
Spring MVC 4.2.4 / Controller with RequestMapping("/**") and static resources
我有一个 angular 应用程序,它使用 ui-router,并由 SpringMvc (4.2.4) java 应用程序提供服务。我决定将任何请求映射到单个 Controller/method,它加载我项目的单个 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 {
在遇到这个问题之前,我在 web.xml 中为每个 /resources/* 使用了默认的 servlet,但是我正在使用 maven 生成我的 scripts/css 的 .gz 版本
我希望这种配置能够使用 GzipResourceResolver。
我已经尝试过,但没有用
- 在 web.xml 中声明 2 个不同的 DispatcherServlets,一个仅用于 JSP,另一个仅用于资源。 (我将 mvc 配置拆分为每个 servlet 的 2 个不同文件)
- controller中的@RequestMapping("/"),用户必须在根地址输入网站,不能接受。
- 我尝试为 InternalResourceViewResolver
设置一个 属性 的订单
提前致谢。
好的,
在调试模式下挖掘后。 HandlerMappings 的顺序为:
- RequestMappingHandlerMapping(@Controller 一个,内部 属性 "order" = 0)
- SimpleUrlHandlerMapping(资源一,内属性"order"=0)
- BeanNameUrlHandlerMapping(不知道是什么...^^)
调用 /resource/* 文件时,RequestMappingHandlerMapping 是第一个响应为有效候选者。
在 Spring 配置中添加这样的命令后:
<mvc:resources mapping="/resources/**" location="/resources/" order = "-1">
成功了。
我有一个 angular 应用程序,它使用 ui-router,并由 SpringMvc (4.2.4) java 应用程序提供服务。我决定将任何请求映射到单个 Controller/method,它加载我项目的单个 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 {
在遇到这个问题之前,我在 web.xml 中为每个 /resources/* 使用了默认的 servlet,但是我正在使用 maven 生成我的 scripts/css 的 .gz 版本 我希望这种配置能够使用 GzipResourceResolver。
我已经尝试过,但没有用
- 在 web.xml 中声明 2 个不同的 DispatcherServlets,一个仅用于 JSP,另一个仅用于资源。 (我将 mvc 配置拆分为每个 servlet 的 2 个不同文件)
- controller中的@RequestMapping("/"),用户必须在根地址输入网站,不能接受。
- 我尝试为 InternalResourceViewResolver 设置一个 属性 的订单
提前致谢。
好的, 在调试模式下挖掘后。 HandlerMappings 的顺序为:
- RequestMappingHandlerMapping(@Controller 一个,内部 属性 "order" = 0)
- SimpleUrlHandlerMapping(资源一,内属性"order"=0)
- BeanNameUrlHandlerMapping(不知道是什么...^^)
调用 /resource/* 文件时,RequestMappingHandlerMapping 是第一个响应为有效候选者。
在 Spring 配置中添加这样的命令后:
<mvc:resources mapping="/resources/**" location="/resources/" order = "-1">
成功了。