Eclipse dynamic web project link css из jsp с использованием tomcat

У меня есть этот динамический веб-проект в Eclipse:
Project tree screenshot

Я хочу сделать ссылку с home.jsp на home.css.

Глава home.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<!DOCTYPE html>
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Infinance Home Webpage">
    <meta name="author" content="Infinance">


    <link rel="icon" href="img/infinance-web-icon_128.png">
    <title>Infinance: Inicio</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <link rel="stylesheet" type="text/css" href="css/home.css" />

  <style id="style-1-cropbar-clipper">
.en-markup-crop-options {
    top: 18px !important;
    left: 50% !important;
    margin-left: -100px !important;
    width: 200px !important;
    border: 2px rgba(255,255,255,.38) solid !important;
    border-radius: 4px !important;
}

.en-markup-crop-options div div:first-of-type {
    margin-left: 0px !important;
}
</style></head>

...

Я пробовал много решений, которые нашел в других сообщениях StackOverFlow, но единственное, что сработало, это:

<style type="text/css">
  <%@include file="css/style.css" %>
</style>

но я хочу, чтобы он работал со ссылкой и href, потому что я хочу сделать ссылку на ресурс на стороне клиента, а не на стороне сервера.

Когда браузер запрашивает файл css, происходит следующее: Скриншот консоли Firefox

Я думаю, что происходит следующее: когда браузер запрашивает http: // локальный: 8080 / infinance / css / home.css, Tomcat возвращает home.jsp. Не знаю почему.

Код Home.java (сервлета):

@WebServlet("/")
public class Home extends HttpServlet {
    private static final long serialVersionUID = 1L;
      private static DatabaseManager db;

    public Home() {
        super();
    }
    public void init() {
        db = new DatabaseManager();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         ServletContext sc = getServletContext();
         RequestDispatcher rd = sc.getRequestDispatcher("/home.jsp");
         rd.forward(request,response);
        }
}

Любая идея? Все помогает. Спасибо.

Вы пробовали использовать абсолютные маршруты? например: <link rel="stylesheet" type="text/css" href="/yourApp/css/home.css"/>

Paplusc 11.04.2018 12:27

@Paplusc Да, я пробовал. Но это не сработало. Теперь я почти уверен, что проблема в том, что конфигурация сервлета ... Я думаю, что браузер запрашивает "локальный: 8080 / infinance / css / home.css" и возвращает сервлет по умолчанию, но я не знаю, почему он это возвращает. Спасибо за ваш комментарий.

Iago GR 11.04.2018 12:46

Как бы вы ни пробовали <link rel = "stylesheet" type = "text / css" href = "$ {pageContext.request.contextPath} /css/home.css" />

Sudhir Ojha 11.04.2018 13:37

@SudhirOjha Да, я пробовал. Та же проблема.

Iago GR 11.04.2018 14:36
2
4
1 026
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Измените basepath вашего home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String serverPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();
String basePath = serverPath + path+"/";
%>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="<%=basePath%>"/> <!-- reset the basepath of your jsp -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Infinance Home Webpage">
    <meta name="author" content="Infinance">
Ответ принят как подходящий

Я наконец решил это.

Если вы напишете:

@WebServlet("/")

в сервлете (Home.java) вы делаете home.jsp файлом по умолчанию, если URL-адрес не указан в сервлете. В этом случае у меня не было URL-адреса http: // локальный: 8080 / infinance / css / home.css ни в одном сервлете, поэтому он всегда перенаправлял на веб-страницу home.jsp.

Решение, которое сработало для меня, менялось:

@WebServlet("/")

и написав вместо этого:

@WebServlet("/home")

Таким образом, он перенаправляет вас только на home.jsp, когда вы пишете http: // локальный: 8080 / infinance / home, и вы получаете ошибку 404, если у вас не указан URL-адрес, но он позволяет использовать css и img с href.

Не стесняйтесь писать другие решения, которые также могут работать.

Другие вопросы по теме