我开发网络应用程序。
Tomcat servlet 容器上的 Spring+Hibernate。
今天我在另一台 PC 上部署了应用程序,发现 css 没有加载。
在 jsp 中我为此使用相对路径(示例)
<link href="/resources/css/ui-lightness/jquery-ui-1.10.0.custom.min.css" rel="stylesheet">
浏览器发送的相应请求:
http://localhost:8080/resources/css/ui-lightness/jquery-ui-1.10.0.custom.min.css
并且此请求返回 404 http 错误。
对于另一个jsp:
<link href="/resources/css/bootstrap.min.css" rel="stylesheet">
浏览器发送:
http://localhost:8080/terminal-company/resources/css/bootstrap.min.css
因此您可以看到,从第一个 jsp 项目名称开始并没有添加到 URL
为什么?以及如何解决?询问我应该添加到相关答案中的详细信息。
项目结构:
web.xml 的 spring 相关部分:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/webContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
最佳答案
如果您的目标是能够使用绝对路径,而不关心(和不知道)webapp 的上下文路径(在您的第二个示例中为 /terminal-company
),则使用 the JSTL <c:url>
生成所有 URL 的标记:
<link href="<c:url value='/resources/css/bootstrap.min.css'/>" rel="stylesheet">
第二个例子会发送一个请求到/resources/css/bootstrap.min.css
, 而不是 /terminal-company/resources/css/bootstrap.min.css
, 除非有 <base>
生成的 HTML 页面中的标记。
编辑:您最初的问题并没有说您正在使用 spring,并将/映射到调度程序 servlet。 Spring因此负责服务资源。 The documentation解释了如何配置它。但这并没有改变上面的答案:要独立于上下文路径,请使用 c:url。
关于java - tomcat是如何解析资源的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421390/