包括带有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文件。 这可能会泄漏源代码或破坏应用程序行为。

所以你基本上有两个选择:

  1. 将CSS文件放在公共webcontent中(只需将一个文件夹移到WEB-INF上方,这样/css/WEB-INF处于同一级别)。

  2. 创建一个监听/css/*url-pattern的Servlet,通过HttpServletRequest#getPathInfo()获取请求的CSS文件,并使用前面提到的ServletContext#getResourceAsStream()基本上从它获取一个InputStream ,并将其写入到OutputStream 。响应一组正确的响应标头,至少包含Content-TypeContent-Length

毕竟我认为选项1更容易,更适合您的要求;)

@BalusC的第二种方法的Spring风格实现是使用mvc:resources ,就像这样:

  

在此之后,你的main.css文件应该在/css/main.css上可用

(注意:如果它不起作用,请检查DispatcherServlet是否映射到/

或试试这个

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

“type =”text / css“/>

它可能会奏效。