如何处理Spring MVC中的静态内容?
我正在开发一个使用Spring MVC 3的Web应用程序,并让DispatcherServlet
像这样(web.xml)捕获所有请求到'/':
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
现在,它可以像广告一样工作,但是如何处理静态内容? 之前,在使用RESTful URL之前,我会捕获所有* .html并将其发送到DispatcherServlet
,但现在它是一个不同的球类游戏。
我有一个包含/ styles /,/ js /,/ images / etc的/ static /文件夹,我想从DispatcherServlet
排除/ static / *。
当我这样做时,现在我可以获得静态资源:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/</url-pattern>
</servlet-mapping>
但我希望它具有很好的URL(我使用Spring MVC 3),而不是登陆页面www.domain.com/app/
我也不希望将解决方案与tomcat或任何其他servlet容器相结合,并且由于这是相对较低的流量,我不需要Web服务器(如Apache httpd)。
有没有一个干净的解决方案?
由于我在这个问题上花了很多时间,我想我会分享我的解决方案。 自Spring 3.0.4以来,有一个名为<mvc:resources/>
的配置参数(更多关于参考文档网站的参数)可用于静态资源,同时仍在您的站点根目录中使用DispatchServlet。
为了使用它,请使用如下所示的目录结构:
src/
springmvc/
web/
MyController.java
WebContent/
resources/
img/
image.jpg
WEB-INF/
jsp/
index.jsp
web.xml
springmvc-servlet.xml
这些文件的内容应该如下所示:
SRC /用SpringMVC /网络/ HelloWorldController.java:
package springmvc.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorldController {
@RequestMapping(value="/")
public String index() {
return "index";
}
}
的WebContent / WEB-INF / web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
的WebContent / WEB-INF /用SpringMVC-servlet.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- not strictly necessary for this example, but still useful, see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-controller for more information -->
<context:component-scan base-package="springmvc.web" />
<!-- the mvc resources tag does the magic -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- also add the following beans to get rid of some exceptions -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>
<!-- JSTL resolver -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
的WebContent / JSP / index.jsp的:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Page with image</h1>
<!-- use c:url to get the correct absolute path -->
<img src="<c:url value="/resources/img/image.jpg" />" />
希望这可以帮助 :-)
这个问题在Spring 3.0.4.RELEASE中解决,你可以在你的spring dispatcher配置文件中使用<mvc:resources mapping="..." location="..."/>
配置元素。
检查Spring文档
在Spring 3.0.x中,将以下内容添加到您的servlet-config.xml(在web.xml中配置为contextConfigLocation的文件中)。如果您不知道如何添加mvc命名空间,但只需要google即可!;)
这对我行得通
<mvc:default-servlet-handler/>
问候
Ayub Malik
链接地址: http://www.djcxy.com/p/67363.html上一篇: How to handle static content in Spring MVC?
下一篇: numeric values within NSString are displayed in a wrong locale