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文件中使用标签&lt;spring:url&gt;&lt;/spring:url&gt;在浏览器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里面的图片路径

Spring MVC 不会将 css、js 文件加载到静态 html 页面

spring MVC js和加载不出图片和js等静态文件的问题。

spring MVC开发中静态页面访问路径为啥出错

Spring MVC和springboot静态资源处理详细总结

如何使用角度和 Spring MVC 提供静态图像?