tomcat如何解析资源?

时间:2014-10-17 08:55:13

标签: java jsp tomcat servlets

我开发了Web应用程序。

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

为什么呢?以及如何解决它?请求我详细说明我应该添加到相关答案。

项目结构:

enter image description here

弹簧相关的web.xml部分:

<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>

3 个答案:

答案 0 :(得分:2)

如果您的目标是能够使用绝对路径,而无需关心(并了解)webapp的上下文路径(在第二个示例中为/terminal-company),那么请使用the JSTL {{1标记生成所有网址:

<c:url>

第二个示例将向<link href="<c:url value='/resources/css/bootstrap.min.css'/>" rel="stylesheet"> 发送请求,而不是/resources/css/bootstrap.min.css,除非生成的HTML页面中有/terminal-company/resources/css/bootstrap.min.css标记。

编辑:您的原始问题并未说明您使用的是spring,而是映射/调度到servlet。因此Spring负责服务资源。 The documentation解释了如何配置它。但这并没有改变上述答案的任何内容:要独立于上下文路径,请使用c:url。

答案 1 :(得分:0)

您忘记在web.xml中为您的css文件添加servlet映射。

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

这适用于所有js,png。

这会起作用我想因为我也有同样的问题。

答案 2 :(得分:0)

我遇到过在localhost上运行的相同行为。只需添加默认的servlet,它将提供静态资源,如css,js,images等。 映射必须放在“/”urlpattern之前,因为“/”将匹配“/ js”。

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>
        org.apache.catalina.servlets.DefaultServlet
    </servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/css/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/*</url-pattern>
</servlet-mapping>