включая таблицу стилей на странице JSP с Spring MVC - PullRequest
14 голосов
/ 09 февраля 2010

У меня проблемы со связью с таблицей стилей со страницы jsp. Я считаю, что это как-то связано с моей структурой каталогов:

WEB-INF
  |-- css
  |    |-- main.css
  |
  |-- jsp
       |-- login.jsp

Я пробовал различные формы стандартного тега HTML-ссылки, такие как:

<link href="css/main.css" rel="stylesheet" type="text/css" media="screen" />
<link href="main.css" rel="stylesheet" type="text/css" media="screen" />
<link href="WEB-INF/css/main.css" rel="stylesheet" type="text/css" media="screen" />

Я также попытался включить файл css в папку jsp и связать его напрямую. Ничего не работает Когда я просматриваю источник после развертывания и пытаюсь получить доступ к файлу CSS напрямую, его там нет, но это меня не удивляет, поскольку он находится в каталоге WEB-INF.

Я также подтвердил, что он развертывается вместе с остальной частью приложения. Источник jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>

<link href="css/main.css" rel="stylesheet" type="text/css" media="screen" />

</head>

<body>
<div id="wrapper">
<div id="header">
<div id="logout">&nbsp;</div>
<h1>Login</h1>
</div>
<div id="content" class="content">
  <form action="" method="post" name="login-form">
    <fieldset>
      <legend>Login</legend>
      <table border="0" align="center">
        <tr>
          <td><label>User Name:</label></td>
        <td><input type="text" name="userName" /><br><br></td>
        </tr>
        <tr>
            <td><label>Password:</label></td>
        <td><input type="text" name="password" /><br><br></td>
         </tr>
        </table>
      </fieldset>
      <div class="buttons">
        <input type="submit" name="submit" value="Login" />&nbsp;&nbsp;&nbsp;
        <input type="button" name="cancel" value="Cancel" />
      </div>
    </form>
  </div>
</div>
</body>
</html>

Спасибо!

Ответы [ 3 ]

19 голосов
/ 09 февраля 2010

Файлы в /WEB-INF не являются общедоступными. Только посредник (контроллер) Servlet может получить к ним доступ и передать их вам с помощью ServletContext#getResourceAsStream(). Это именно то, что Spring (как и любой другой достойный MVC-фреймворк) делает с файлами JSP. Вы не можете получить доступ к файлам JSP напрямую по URL. Это может привести к утечке исходного кода или нарушению поведения приложения.

Итак, у вас есть 2 варианта:

  1. Разместите CSS-файлы в общедоступном веб-контенте (просто переместите одну папку выше WEB-INF, чтобы /css был на том же уровне, что и /WEB-INF).

  2. Создайте сервлет, который прослушивает url-pattern из /css/*, получает запрошенный файл CSS на HttpServletRequest#getPathInfo() и в основном получает от него InputStream, используя вышеупомянутый ServletContext#getResourceAsStream() и записывает его в OutputStream ответа вместе с правильным набором заголовков ответа, по крайней мере, с Content-Type и Content-Length.

В конце концов, я думаю, что вариант 1 проще и более подходит для ваших требований;)

7 голосов
/ 15 июля 2011

Spring-реализация второго подхода от @BalusC заключается в использовании mvc: resources , например:

<mvc:resources mapping="/css/**" location="/WEB-INF/css/*" />

и после этого ваш main.css файл должен быть доступен на /css/main.css

(ПРИМЕЧАНИЕ: если это не работает, убедитесь, что DispatcherServlet сопоставлено с /)

0 голосов
/ 14 июля 2011

или попробуйте

<% @ taglib prefix = "spring" uri = "http://www.springframework.org/tags"%>

"type =" text / css "/>

это может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...