我有一个简单的网络应用
webapp
static
images
- a.gif
pages
- test.html
WEB-INF
pages
- test.jsp
在test.html中,有
<img src="/static/images/a.gif"/>
问题是在我将uri更改为
之前图像不会显示<img src="/web app name/static/images/a.gif"/>
但我在URI
加载test.htmlhttp://server/web app name/static/pages/test.html
我在web.xml中配置了静态资源映射,如下所示。
<servlet>
<servlet-name>springWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springWeb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>resourceServlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>resourceServlet</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
我错过了什么吗?我确实希望在DEV阶段将这些静态资源保留在应用程序中,而不是将它们移动到HTTP服务器。
非常感谢。
答案 0 :(得分:6)
出于这个原因,最好使用spring:url标记或JSTL c:url标记来包装HTML中的URL。这些标签会自动添加上下文路径。
例如:
<img src="<spring:url value='/static/images/a.gif'/>"/>
或者,您可以在开发中使用“”的上下文路径。那样你的网址就会与生产相匹配。对于每个servlet容器,这样做的方式是不同的 - 例如,对于Tomcat,您将应用程序部署到webapps / ROOT。
答案 1 :(得分:2)
使其更通用的一种方法是使用
<img src="<%=request.getContextPath()%>/static/images/a.gif"/>
如果您知道目录结构,则可以使用相对URL,例如
static/images/a.gif
../static/images/a.gif