включая таблицу стилей на jsp странице с Spring MVC

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

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

Я попробовал различные формы стандартного тега link 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>

Спасибо!

14
задан Casey 9 February 2010 в 19:18
поделиться

1 ответ

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

Таким образом, у вас есть в основном 2 варианта:

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

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

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

19
ответ дан 1 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: