Cas*_*sey 14 java spring jsp spring-mvc
我无法从jsp页面链接到样式表.我认为它与我的目录结构有关,它是:
WEB-INF
|-- css
| |-- main.css
|
|-- jsp
|-- login.jsp
Run Code Online (Sandbox Code Playgroud)
我尝试过各种形式的标准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" />
Run Code Online (Sandbox Code Playgroud)
我也尝试将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>
Run Code Online (Sandbox Code Playgroud)
谢谢!
Bal*_*usC 19
文件/WEB-INF
不能直接公开访问.只有中间(控制器)Servlet
可以在您的帮助下访问和流式传输它们ServletContext#getResourceAsStream()
.这正是Spring(与任何其他体面的MVC框架一样)对JSP文件的作用.您无法通过URL直接访问JSP文件.这可能会泄漏源代码或破坏应用程序行为.
所以你基本上有两个选择:
将CSS文件放在公共webcontent中(只需移动上面的一个文件夹WEB-INF
,使其/css
处于同一级别/WEB-INF
).
创建一个侦听上一个Servlet url-pattern
中/css/*
,通过获得所要求的CSS文件HttpServletRequest#getPathInfo()
,基本上得到一个InputStream
使用上述从它ServletContext#getResourceAsStream()
并将其写入到OutputStream
沿着正确设定的响应报头的至少响应的Content-Type
和Content-Length
.
毕竟我认为选项1更容易,更适合您的要求;)
@BalusC的第二种方法的Spring风格实现是使用mvc:resources,就像这样:
<mvc:resources mapping="/css/**" location="/WEB-INF/css/*" />
Run Code Online (Sandbox Code Playgroud)
在此之后,您的main.css
文件应该可以在/css/main.css
(注意:如果它不起作用,检查DispatcherServlet
映射到/
)
归档时间: |
|
查看次数: |
26329 次 |
最近记录: |