我无法从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"> </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" />
<input type="button" name="cancel" value="Cancel" />
</div>
</form>
</div>
</div>
</body>
</html>
谢谢!
答案 0 :(得分:19)
/WEB-INF
中的文件无法直接公开访问。只有中间(控制器)Servlet
可以在ServletContext#getResourceAsStream()
的帮助下为您访问和流式传输它们。这正是Spring(与任何其他体面的MVC框架一样)对JSP文件的作用。您无法通过URL直接访问JSP文件。这可能会泄漏源代码或破坏应用程序行为。
所以你基本上有两个选择:
将CSS文件放在公共网页内容中(只需移动WEB-INF
上方的一个文件夹,以便/css
与/WEB-INF
处于同一级别。)
创建一个监听url-pattern
/css/*
的Servlet,通过HttpServletRequest#getPathInfo()
获取请求的CSS文件,并使用上述内容从中获取InputStream
ServletContext#getResourceAsStream()
并使用至少OutputStream
和Content-Type
的正确响应标头集将其写入响应的Content-Length
。
毕竟我认为选项1更容易,更适合您的要求;)
答案 1 :(得分:7)
来自@BalusC的第二种方法的Spring样式实现是使用mvc:resources,就像那样:
<mvc:resources mapping="/css/**" location="/WEB-INF/css/*" />
在此之后,您的main.css
文件应该在/css/main.css
(注意:如果它不起作用,请检查DispatcherServlet
是否已映射到/
)
答案 2 :(得分:-2)
或试试这个
&lt;%@ taglib prefix =“spring”uri =“http://www.springframework.org/tags”%&gt;
“type =”text / css“/&gt;
它可能有效。