我的原则

所有路径一律使用绝对路径,就是以"/"开头的或者带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中的路径的更多相关文章

  1. 关于在jsp中的路径问题

    前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不 ...

  2. jsp中超链接路径的写法

    主题 超链接不就是一个地址字符串吗?这能有什么花头? LZSB! 曾经我也是这么想的.... 最近对apache的学习让我对网页中超链接,CSS,js的路径的写法有了一些新的认识. 所以这篇文章主要分 ...

  3. jsp中的路径与跳转

    在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发: 先说重定向,它的调用方式是这样的 response.sendredirect("uri&q ...

  4. jsp中的路径问题

    在学jsp的时候我每次都遇到路径的问题,每次都不能够说100%的把这搞定,这让我很烦恼,今天下午花了点时间来把路径问题整理了下. 一:首先我们在加载项目(我的项目名称是FinalExam)是的路径是h ...

  5. jsp中获取路径信息的方法

    今天在看代码时,发现程序使用了 request.getScheme() .不明白是什么意思,查了一下.结果整理如下: 1.request.getScheme() 返回当前链接使用的协议:一般应用返回h ...

  6. java(JSP)中几种获取项目路径方式

    在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...

  7. JSP中获取各种路径的方法

    我们当中可能有很多人不知道如何获得jsp中的路径怎么获取 方法一: <a href ="test.jsp?p=fuck">跳转到test2</a> 方法二: ...

  8. 【04-10】java中的路径

    java中的路径 System.getProperty("user.dir")  获取工程的绝对路径 Class.class.getClass().getResource(&quo ...

  9. JAVA中获取路径

    内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...

随机推荐

  1. Servlet(一)

    BS架构的优势 1.数据库之负责数据库的管理 2.Web服务器负责业务逻辑的处理 3.浏览器提供操作界面 4.不需要单独安装客户端 5.开发相对于CS简单,客户端和服务器的通信模块都是使用标准的HTT ...

  2. 【BZOJ2038】【莫队】小z的袜子

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  3. 自己制作精美的App Store 软件截屏

    当用户搜索到App的时候,一般都会先看截图,如果截图效果不好,可能用户就不会下载. 不想自己辛苦写的认为还不错的软件,因为截图的原因,而降低了很多下载量吧. 轻轻松松做出这样高大上的截屏效果来. Sc ...

  4. apache-php安装mysql简单方法

    1.启用mysql功能,在php.ini中 extension=php_mysql.dll extension=php_mysqli.dll 2. 修改extension_dir = "ex ...

  5. 通过命令修改wampserver的mysql密码

    WAMP安装好后,mysql教程密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按 ...

  6. ACM竞赛常用STL(一)

    全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...

  7. SQL语句の集锦

    6.删除数据后根据主键从备份表中恢复 insert  sameTable_1 (name,dz) select name,dz from sameTable_1_bak where not exist ...

  8. 【Java】Java Socket编程(1)基本的术语和概念

    计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.Java语言从一开始就是为了互联网而设计的,它为实 ...

  9. RMQ with Shifts

    uva12299:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...

  10. codeforces Unusual Product

    题意:给你n*n的矩阵,里面是1或0,然后q次询问,如果操作数为1,那么就把x行的数0变成1,1变成0:如果操作数为2,那么在x列上的数0变成1,1变成0:如果是3,输出: 思路:在求的时候,对角线上 ...