Spring MVC - 包含静态文件/javascript、css
Posted
技术标签:
【中文标题】Spring MVC - 包含静态文件/javascript、css【英文标题】:Spring MVC - include static files / javascript , css 【发布时间】:2012-01-24 20:05:51 【问题描述】:我已经创建了 MVC 应用程序。
我想将 js 或 css 文件包含到 jsp 中。
我的静态文件位于:
- 网络应用 -js/jquery.js -WEB-INF| | - jsp/*.jsp我包含 jquery 的代码是:
<script type="text/javascript" src="<c:url value="js/jquery.js" />"></script>
我无法将 js 文件加载到视图中。
我看到了带有信息的日志:
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/pool/js/jquery.js] in DispatcherServlet with name 'appServlet'
这意味着,MVC 尝试将 url 映射到 js 文件。
我认为我的配置有问题,但我不知道是什么。
我的 web.xml 是:
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【问题讨论】:
见:***.com/questions/10495571/… 【参考方案1】:将此添加到您的配置中,并根据您的需要修改位置。
<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>
看到这个How to handle static content in Spring MVC?
【讨论】:
【参考方案2】:将您的 DispatcherServlet
映射更改为例如:
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
或其他不冲突的url-pattern
,如*.htm
或/controllers/*
。请记住,从现在开始,您的所有控制器都只能通过此模式使用。
现在它正在拦截您的 Web 应用程序中的所有内容,包括 .js
文件、图像等。
与hibernateFilter
相同 - 在获取.js
文件时,您真的不需要打开的 Hibernate 会话,不是吗?
【讨论】:
但是,当我这样做时,我的实际映射被破坏了。更改我的网址后:localhost:8080/pool/main 不起作用 一个 chenge - 我用 *.js 添加了另一个 servlet-mapping【参考方案3】:为什么不用简单的jsp核心呢?
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<link rel="stylesheet" type="text/css" href="<c:url value='/resources/css/bootstrap.css'/>" />
【讨论】:
【参考方案4】:使用 spring JSTL 标签来包含外部脚本文件或样式表。 首先你应该在 JSP 中包含 taglib,如下所示。
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
然后您可以使用包含外部脚本文件,
<script type="text/javascript" src="<spring:url value="/js/jquery.js"/>"></script>
【讨论】:
【参考方案5】:我同意你的回答。但在 style.css 文件中声明与图像路径相关的 url。
--style.css--
.cwt-object0
display: block;
left: 2.62%;
margin-left: -1px;
position: absolute;
top: 43px;
width: 64px;
height: 64px;
background-image: url('/resources/images/object0.png');
background-position: 0 0;
background-repeat: no-repeat;
z-index: 0;
如何在style.css文件中使用标签<spring:url></spring:url>
在浏览器IE/Firefox中查看
--jsp文件---
<link href="<spring:url value="/resources/style.css"/>" rel="stylesheet" type="text/css" media="screen">
【讨论】:
【参考方案6】:在你的配置文件中添加mvc:resources(*-servlet.xml),你会发现它有效
【讨论】:
【参考方案7】:我只是跟着Mkyong Tutorial 放置 css、js、jquery 和图像文件。它为我工作。
在 servlet-context.xml 中
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the $webappRoot/resources directory -->
<resources mapping="/resources/**" location="/resources/assets/" />
在JSP中,导入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
并添加喜欢
<link rel="stylesheet" href="<c:url value='/resources/css/custom.css'/>">
【讨论】:
以上是关于Spring MVC - 包含静态文件/javascript、css的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC 不会将 css、js 文件加载到静态 html 页面
spring MVC js和加载不出图片和js等静态文件的问题。