spring mvc与html中处理引用js等静态文件的问题

最近开发页面遇到一些问题,在这里记录一下。

通常,我们的html页面或jsp页面难免需要引入一些图片、js、css等文件,于是需要填写对应的文件路径,有相对路径和绝对路径两种写法,写相对路径时,如果通过controller后再返回对应的html或jsp页面时,相对路径可能会不是我们想要的,例如,在服务器端,如果某js文件路径为:/js/xx.js,html文件为/html/xx.html,并在在html中写入一下相对路径引用代码<script src="../js/jquery.min.js"></script>,会有两种结果发生,这里假设filter不拦截访问,并且配置了<mvc:resources
location="/js/" mapping="/js/**" />,如果我们直接访问路径为:http://127.0.0.1:8080/(项目名)/html/xx.html,结果很一切正常,但是当我们通过controller映射返回对应的html页面时,可能就会出错了。

例如我们的controller映射如下:

@Controller
@RequestMapping("/download")
public class DownloadController {

	@RequestMapping(value="/develop/*",method=RequestMethod.GET,produces={"text/html"})
	public String developPage()  {
	       return "xx";
	}  

}

从上面的controller得出,我们访问xx.html的路径可写为:http://127.0.0.1:8080/(项目名)/download/develop/......

那么这个时候相对路径../js/xx.js在浏览器端解析后将为:http://127.0.0.1:8080/(项目名)/download/js/xx.js,于是悲催的事情就发生了,对应的js文件将得不到正常的引用,原因很简单,路径不对了,自然找不到,网上查找到的资料解释为:导入的js是相对当前请求的路径的,而不是相对于你在服务器文件的放置目录的。因此,正好印证了网上的解释,../js/xx.js被浏览器端解析后地址就是http://127.0.0.1:8080/(项目名)/download/js/xx.js。

那么怎么解决这个由controller引起的相对路径问题呢?

如果不经过controller映射,那么这个问题无需担心,大胆的写相对路径就是了,因为你的请求地址的目录结构和服务器的一致,如果要经过controller映射,方法如下:

假设是jsp页面,可以使用如下代码获取绝对路径地址:

<%
<span><span>  String path = request.getContextPath();</span></span><span>
  String basePath = request.getScheme() + <span class="string">"://"</span><span> + request.getServerName() + </span><span class="string">":"</span><span> </span></span><span>+ request.getServerPort() + path + <span class="string">"/"</span><span>;  </span></span>
%>
<script type="text/javascript" src="<%=basepath%>/js/xx.js"></script>  
    如果是html代码,这也是我遇到的问题,由于接触web开发时间不太长,就悲催在这里了,因为我所有的页面都使用html+ajax的方式,因此就没有机会使用jsp的一些方法了,

其实解决方法也比较简单,可以直接写绝对路径为:/(项目名)/js/xx.js。

说到这里,想说的问题基本上说完了,如有更好的方案,希望大神指点。

时间: 2024-10-13 18:01:37

spring mvc与html中处理引用js等静态文件的问题的相关文章

2017.3.31 spring mvc教程(三)请求映射(静态文件访问、拦截器)

学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(三)拦截器 1.Spring中的拦截器 (1)拦截器接口 Spring提供了拦截器接口.实现这个接口或继承这个类,就能实现自己的拦截器. 1 org.springframework.web.servlet.HandlerInterceptor接口 2 or

spring mvc 处理html,css,js等静态文件

在spring mvc,可以使用<mvc:resources/>标签来处理css,js,images等文件,使用方法如下: <mvc:resources location="/WEB-INF/pages/welcome/" mapping="/welcome/*.html"/> <mvc:resources location="/WEB-INF/pages/welcome/js/" mapping="/we

Spring MVC 了解WebApplicationContext中特殊的bean类型

Spring MVC 了解WebApplicationContext中特殊的bean类型 Spring的DispatcherServlet使用了特殊的bean来处理请求.渲染视图等,这些特定的bean是Spring MVC框架的一部分.如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们.当然这只是可选的,Spring MVC维护了一个默认的bean列表,如果你没有进行特别的配置,框架将会使用默认的bean.下一小节会介绍更多的细

Spring MVC 使用tomcat中配置的数据源

Spring MVC 使用tomcat中配置的数据源 配置tomcat数据源 打开tomcat目录下的conf目录,编辑sever.xml目录.在<GlobalNamingResources>标签中添加数据源配置: <Resource name="jdbc/dbsourse" scope="Shareable" type="javax.sql.DataSource" factory="org.apache.tomcat

Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)

profile相关知识点: 在开发项目时,设想有以下场景: 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发.但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库.此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做? 此外,你的项目需要部署.为了调试,在开发时我们在Java编译结果中加入了调试信息(

MVC应用程序中管理(更新)上传的文件

实现上传文件功能,有时上传也会操作出错,能让用户有改正有机会,开发上传文件能有更新的功能. 文件上传时,如果是存储于应用程序某一目录的话,在更新时需要了解一些流程,先是删除旧文件,更新数据表相关信息,存储新文件. 本篇让你了解到MVC与jQuery的交互处理. 在数据库中,新建一个更新的存储过程: 找到并打开FileLibraryEntity.cs,添加一个vlid更新方法: 在ExerciseController.cs控制器中,创建一个更新Action: A标记,删除旧文件. B标记,获取新上

Django中加载js和css文件

Django中加载js和css文件 项目的目录结构如下: mysite |-mysite |-|-static |-|---js和css文件 |-|-|-init.py |-| |-models.py |-| |-views.py |-|-init.py |-|-settings.py |-|-urls.py |-templates |-|-(template html 文件) settings.py中static变量的设置: STATIC_ROOT = os.path.join(os.path

Spring MVC 中请求返回之后的页面没法加载css、js等静态文件

1.是否被拦截,这个在Web.xml配置中servlet拦截是“/”,如果是则 a.使用spring MVC 的静态资源文件 <!-- 静态文件访问,主要是针对DispatcherServlet的拦截是/的--> <mvc:annotation-driven /> <mvc:resources location="/image/" mapping="/image/**"/> <mvc:resources location=&

Spring MVC Restful构建中静态资源访问问题

在构建Spring MVC Restful风格的应用时,由于在web.xml中: <span style="font-family:Microsoft YaHei;font-size:18px;"><servlet> <servlet-name>story</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</se