JSP中的路径
我的原则
所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径。形如:
/imgs/1.jpg
<%= request.getContextPath()%>/imgs/1.jpg //推荐使用
应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径。一方面,这样当文件移动时,很容易出问题。另一方面,绝对路径用起来简单。
相对路径和绝对路径
相对路径(Relative Path)以引用文件的网页所在位置为参考基础,而建立出的目录路径。形如:
imgs/1.jpg; ../imgs/1.jpg; ./imgs/1.jpg
绝对路径(absolute path)以Web 站点根目录(形如:http://localhost:8080/)为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。形如:
http://localhost:8080/yourwebapp/index.jsp
/imgs/1.jpg
"." -- 代表目前所在的目录,相对路径。 如:<a href="./abc">文本</a> 或 <a href="abc">
".." -- 代表上一层目录,相对路径。 如:<a href="../abc">文本</a>
"../../" -- 代表的是上一层目录的上一层目录,相对路径。 如:<img src="../../abc" />
"/" -- 代表根目录,绝对路径。 如:<a href="/abc">文本</a> 或 <img src="/abc" />
"D:/abc/" -- 代表根目录,绝对路径。
前端后台根目录
前端——服务器的根目录"/":所代表的路径形如:
http://localhost:8080/
后台——Web应用的根目录"/":所代表的路径形如:
http://localhost:8080/yourwebapp/
前端地址(浏览器解析)
所有的html页面中的绝对地址都是相对于host根目录(http://localhost:8080/)的,是由浏览器解析。路径前的"/"代表host根目录。
注:host代表指定请求资源的Intenet主机和端口号。
jsp页面中html标签如<a> <img><form>路径前面的"/"代表(http://localhost:8080/)。
eg:
<form action="myaction"> //绝对URL地址是http://localhost:8080/yourwebapp/myaction
注意这里是因为,后面讲到的basePath。
<form action="<%=basePath%>myaction"> //绝对URL地址是http://localhost:8080/yourwebapp/myaction
<form action="/myaction"> //绝对URL地址是http://localhost:8080/myaction //路径错误
服务器端地址(tomcat解析)
服务器端的绝对地址指的是相对于你的web应用的地址(http://localhost:8080/yourwebapp/),是由tomcat解析。在jsp和servlet中路径前的"/"代表webapp的根目录。
其用到的地方有:forward、url-pattern
servlet中request.getRequestDispatcher(address);假设你要forward到项目根目录下的user目录下a.jsp应该这么写:
request.getRequestDispatcher("/user/a.jsp").forward(request, response);
这个"/"当前的web应用yourwebapp根目录,其绝对URL地址就是:
http://localhost:8080/yourwebapp/user/a.jsp。
然而sendRedirect中redirect是客户端的行为,所以应该是以浏览器解析的方式来书写url;
/yourwebapp/user/a.jsp
JSP页面中的basePath
新建一个JSP页面自动生成如下代码:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head>
<base href="<%=basePath%>">
</head>
说明:
path="/yourwebapp";//项目名
basePath="http://localhost:8080/yourwebapp/";//host+项目名
base标签的href属性规定页面中所有相对链接的基准URL。解决了前面叙述的前后台路径不统一的问题。
eg:
<a href="<%=path %>/counter/one.jsp">one.jsp</a>//注意path后面没有"/",得加上。
html页面输出为:
<a href="/yourwebapp/counter/one.jsp">one.jsp</a>
因为有<base>标签的存在,相对路径会失效,例如:
<img src="imgs/1.jpg">
无论图片所在的网页在哪个目录,在yourwebapp/目录下,还是在yourwebapp/news/目录也好。其浏览器解析出图片的URL为:
http://localhost:8080/yourwebapp/imgs/1.jpg
也就是说:所有前面不带"/"或者host的路径A,浏览器解析的URL为: basePath+A。
从而形成了前后台路径使用的统一。
JSP中的路径的更多相关文章
- 关于在jsp中的路径问题
前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不 ...
- jsp中超链接路径的写法
主题 超链接不就是一个地址字符串吗?这能有什么花头? LZSB! 曾经我也是这么想的.... 最近对apache的学习让我对网页中超链接,CSS,js的路径的写法有了一些新的认识. 所以这篇文章主要分 ...
- jsp中的路径与跳转
在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发: 先说重定向,它的调用方式是这样的 response.sendredirect("uri&q ...
- jsp中的路径问题
在学jsp的时候我每次都遇到路径的问题,每次都不能够说100%的把这搞定,这让我很烦恼,今天下午花了点时间来把路径问题整理了下. 一:首先我们在加载项目(我的项目名称是FinalExam)是的路径是h ...
- jsp中获取路径信息的方法
今天在看代码时,发现程序使用了 request.getScheme() .不明白是什么意思,查了一下.结果整理如下: 1.request.getScheme() 返回当前链接使用的协议:一般应用返回h ...
- java(JSP)中几种获取项目路径方式
在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...
- JSP中获取各种路径的方法
我们当中可能有很多人不知道如何获得jsp中的路径怎么获取 方法一: <a href ="test.jsp?p=fuck">跳转到test2</a> 方法二: ...
- 【04-10】java中的路径
java中的路径 System.getProperty("user.dir") 获取工程的绝对路径 Class.class.getClass().getResource(&quo ...
- JAVA中获取路径
内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...
随机推荐
- javaScript 的option触发事件
先说jquery的option触发事件,很方便 $("option:selected")//这样就能直接触发选择的option了 在JavaScript中就显得比较麻烦,其实< ...
- access_token的获取2
概述 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存. access_token的存储至少要保留512个字符空间.acces ...
- thinkphp 总结 转
用ThinkPHP做过几个项目后,感觉这个框架蛮不错的,很适合自己的逻辑习惯,开发起来也快捷,呵呵, 总结了一些项目中常用的东东,希望对初学TP的朋友有所帮助! 1. 模板中不能使用的标签 {$co ...
- MySql数据库3【优化3】缓存设置的优化
1.表缓存 相关参数: table_open_cache 指定表缓存的大小.每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容.通过检查峰值时间的状 ...
- 【转】javascript变量作用域、匿名函数及闭包
下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...
- Connect mysql on Linux from Windows
ON LINUX: 1 sudo apt-get install mysql-server 2 sudo apt-get install python-dev 3 sudo apt-get insta ...
- 转:2014 年 15 款新评定的最佳 PHP 框架
原文来自于:http://blog.jobbole.com/59999/ 原文出处: codegeekz 译文出处:oschina 欢迎分享原创到伯乐头条 通常,框架都会被认为是帮助开发者快速 ...
- BZOJ 1070 修车
Description 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这\(M\)位技术 ...
- 【Java】Java 序列化的高级认识
如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题.静 ...
- Oracle OCI-22053:溢出错误
Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换 为公共语言运行库数据类型时,小数点后边的位数可能过多,这会导致此错误. 查询29万笔数据,报此错误,分析应该 ...