包括带有Spring MVC的jsp页面中的样式表
我无法从jsp页面链接到样式表。 我认为它与我的目录结构有关,它是:
WEB-INF |-- css | |-- main.css | |-- jsp |-- login.jsp
我尝试过各种forms的标准html链接标记,例如:
我也尝试将css文件包含在jsp文件夹中并直接链接到它。 什么都行不通。 当我在部署后查看源代码并尝试直接访问CSS文件时,它不在那里,但这对我来说并不奇怪,因为它位于WEB-INF目录中。
我还validation了它已与其他应用程序一起部署。 jsp源是:
Login Login
谢谢!
/WEB-INF
中的文件不能直接公开访问。 只有中间(控制器) Servlet
可以在ServletContext#getResourceAsStream()
帮助下为您访问和流式传输它们。 这正是Spring(与任何其他体面的MVC框架一样)对JSP文件的作用。 您无法通过URL直接访问JSP文件。 这可能会泄漏源代码或破坏应用程序行为。
所以你基本上有两个选择:
-
将CSS文件放在公共webcontent中(只需将一个文件夹移到
WEB-INF
上方,这样/css
与/WEB-INF
处于同一级别)。 -
创建一个监听
/css/*
的url-pattern
的Servlet,通过HttpServletRequest#getPathInfo()
获取请求的CSS文件,并使用前面提到的ServletContext#getResourceAsStream()
基本上从它获取一个InputStream
,并将其写入到OutputStream
。响应一组正确的响应标头,至少包含Content-Type
和Content-Length
。
毕竟我认为选项1更容易,更适合您的要求;)
@BalusC的第二种方法的Spring风格实现是使用mvc:resources ,就像这样:
在此之后,你的main.css
文件应该在/css/main.css
上可用
(注意:如果它不起作用,请检查DispatcherServlet
是否映射到/
)
或试试这个
<%@ taglib prefix =“spring”uri =“http://www.springframework.org/tags”%>
“type =”text / css“/>
它可能会奏效。