Я пытаюсь сделать простой проект Servlets + JSP. Структура выглядит следующим образом:
index.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>
style.css:
body {
background-color: beige;
}
web.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>
Когда я запускаю приложение и открываю его в браузере, я вижу страницу index.jsp, но его фон белый, поэтому css там не работает. В чем может быть проблема?
В вашем приложении есть две проблемы:
В JSP вы должны использовать ${pageContext.request.contextPath}
чтобы добавить базовый путь для своих URL-адресов. При этом вы можете быть уверены, что используете абсолютный путь вместо относительного пути для своих URL-адресов. Итак, это:
<link rel="stylesheet" type="text/css" href="../css/style.css"/>
Будет
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/style.css"/>
Это также может быть выполнено с помощью <c:url>
из JSTL:
<link rel="stylesheet" type="text/css" href="<c:url value='/css/style.css' />"/>
Ваш сервлет сопоставляет каждый запрос, сделанный в вашем приложении. Обратите внимание, что это включает простые запросы на ресурсы, такие как этот файл CSS. Если вы не обрабатываете эти запросы успешно, вы можете получить ответ об ошибке или пустой ответ или что-то еще, зависит от того, как вы обрабатываете запрос на файлы CSS в сервлет. Я рекомендую вам изменить шаблон URL-адреса для вашего сервлета для сопоставления с конкретными путями.
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>