JSP看不到CSS

Gre*_*man 1 css java jsp servlets

我正在尝试制作一个简单的 Servlet + JSP 项目。它的结构如下所示:

在此输入图像描述

索引.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>App</title>
  <link rel="stylesheet" type="text/css" href="../css/style.css"/>
</head>
<body>
<h1>Header</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

样式.css:

body {
    background-color: beige;
}
Run Code Online (Sandbox Code Playgroud)

网络.xml:

<web-app>
    <display-name>App</display-name>

    <servlet>
        <servlet-name>IndexServlet</servlet-name>
        <servlet-class>com.example.web.IndexServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>IndexServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序并在浏览器中打开它时,我看到了 index.jsp 页面,但它的背景是白色的,因此 css 在那里不起作用。可能是什么问题呢?

Lui*_*oza 5

您的应用程序存在两个问题:

  1. 在 JSP 中,您应该${pageContext.request.contextPath}附加 URL 的基本路径。这样,您就可以确定您的 URL 将使用绝对路径而不是相对路径。所以这:

    <link rel="stylesheet" type="text/css" href="../css/style.css"/>
    
    Run Code Online (Sandbox Code Playgroud)

    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/style.css"/>
    
    Run Code Online (Sandbox Code Playgroud)

    <c:url>这也可以通过使用JSTL 来完成:

    <link rel="stylesheet" type="text/css" href="<c:url value='/css/style.css' />"/>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您的 servlet 映射到您的应用程序中发出的每个请求。请注意,这包括对 CSS 文件等资源的简单请求。如果您没有成功处理这些请求,您可能会收到错误响应或空响应或其他任何内容,具体取决于您如何处理 servlet 中的 CSS 文件请求。我建议您更改 servlet 的 URL 模式以映射到特定路径。

    <servlet-mapping>
        <servlet-name>IndexServlet</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
    
    Run Code Online (Sandbox Code Playgroud)