jsp的相对路径问题
test2.js 与index.jsp 放在同一文件夹下,比如: web应用/home/下面.
要把test2.js 引入到 index.jsp中, 针对三种情况,分析如下:
----------------------------------------------------------
第一种情况
一般在学习时, 一个tomcat上都跑多个工程, 用工程名来区分
因为我的的URL是 :http://localhost/工程名 /home/index.jsp
多了一个工程名,所以要加 <%=request.getContextPath() %>
如下:
<script src="<%=request.getContextPath() %> /home/test.js"></script>
---------------------------------------------------------------------------------
第二, 访问JSP文件时, 用相对路径引入JS,CSS文件是OK的
真实项目中, 一个tomcat上要是也跑了多个工程, 并用IP来区分
url 是这样的: http://localhost/home/index.jsp 注意这里,是直接访问JSP文件,不是servlet,不是struts .
test2.js 与index.jsp 放在同一文件夹下
下面用相对路径来引入 JS文件 是OK 的:
<script src=test2.js></script>
index.jsp可以找到test2.js文件
------------------------------------------------------------------------------
第三种情况:
在第二情况的基础上, 我们访问的是 servlet 或是struts的action , 再转发到 index.jsp
url 是: http://localhost/***.do 这里不是访问JSP文件了
下面是OK 的.
<script src=home/test2.js></script>
test2.js 前面一定要有home/
实际项目中, 访问 servlet或是struts的action最多, 所以这里要注意 了.
下面是错误的, index.jsp找不到test2.js文件
<script src=test2.js></script>
本来在 "第二种情况"中, 上面是OK的, 但现在情况有点不同了,不是访问JSP文件了,访问的是 servlet或是struts的action了.
-------------------------------------------------------------------------------
对上面现象的分析: (源自网络)
一. 我们平常 说的 "相对路径 ": 适用于"第二种情况"
有个html文件:a.html,其中有<link href="one.css" rel="stylesheet" type="text/css">,其中href属性表示引用的css文件的路径。
one.css:表示one.css和a.hmtl处于同一个目录
user/one.css:表示one.css处于a.html所在目录的子目录user中。
../one.css:表示one.css位于a.hmtl上一级目录下,
http://www.cnblogs.com/one.css:表示one.css位于a.hmtl上一级目录的上一级目录下,
./:表示和a.hmtl同一目录
我们称上述相对路径为html相对路径
二. 服务器端的相对路径 , 适用 于"第三种情况"
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端 浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1 /webapp/的。
假设Web应用road中,应用的根路径下有一个dir1文件夹和dir2文件夹。c.jsp在dir1中,a.jsp和b.jsp在dir2中。Web应用的结构如图所示。
+ root
-dir1
c.jsp
-dir2
a.jsp
b.jsp
- JSP页面中正确的路径表示 假设在a.jsp页面中有两个链接,分别链接到b.jsp和c.jsp页面。
- 直接写路径表示和页面在同一个文件夹下面,如<a href="b.jsp">b.jsp</a>
- "../"表示当前文件夹的上一级文件夹(相对路径),如: <a href="../dir2/b.jsp">b.jsp</a>,
- <a href="../dir1/c.jsp">c.jsp</a>
- "/"表示 http://机器IP:8080(绝对路径),如: <a href="/road/dir2/b.jsp">b.jsp</a>
- <a href="/road/dir1/c.jsp">c.jsp</a>
- Servlet中正确的路径表示
- 转发请求时:"/"表示“http://服务器IP:8080/Web应用名”,例如: String forward = "/dir1/c.jsp";
- RequestDispatcher rd = request.getQRequestDispatcher(forward);
- 重定向时:“/” 表示“http://机器IP:8080”,而通过request.getContextPath()得到的是:“http://机器IP:8080/Web应用名”,例如: String str = request.getContextPath();
- response.sendRedirect(str + "/dir1/c.jsp");
- 配置文件web.xml中 url-mapping中,"/"表示“http://IP地址:8080/Web应用名”
××总结××
- 在浏览器端:“/”表示的是一台WEB服务器,“http://机器IP:8080”
- 在服务器端(请求转发):“/”表示的是一个WEB服务器端的应用,“http://机器IP:8080/Web应用”
- 在服务器端(重定向):“/”表示的是一个WEB服务器,“http://机器IP:8080”
要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对路径?
目录结构:
------------------------------------------------------------------------------
第一种情况 :直接访问JSP文件
URL是 http://localhost/Context path/jsp/index.jsp
要在index.jsp引用go.gif文件:
1、使用决对路径
<img src='<%=request.getContextPath() %>/images/go.gif'/>
浏览器寻找方式: 域名+/Context path/images/go.gif ,可找到。
2、使用相对路径
<img src='../images/go.gif'/>
浏览器寻找方式:通过地址栏分析,index.jsp所在目录(jsp)的上一层目录(WebRoot)下的images/go.gif文件 。
3、使用base href
写<%=request.getContextPath() %>太麻烦,可以在每一个jsp文件顶部加入以下代码
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>">
<img src='images/go.gif'/>
浏览器寻找方式: basePath的值http://localhost/Context path/再加上images/go.gif,可找到。
------------------------------------------------------------------------------
第二种情况: servlet转发到jsp
1、使用相对路径
URL是http://localhost/Context path/servlet_2 (转发到/jsp/index.jsp)
错误:
根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>
正确:
<img src='images/go.gif'/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Context path/servlet_2 ,相对于servlet_2所在目录(/)下面找到images/go.gif文件
2、使用相对路径
URL是http://localhost/Context path/servlet/ser/ser/servlet_1 (转发到/jsp/index.jsp)
“/servlet/ser/ser/servlet_1 是在web.xml文件配置的
错误:
根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>
正确:
<img src='../../../images/go.gif'/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Context path/servlet/ser/ser/servlet_1,相对于servlet_1所在目录(ser)的上一层目录的上一层目录的上一层目录(/)下的images/go.gif文件
3、使用决对路径
<img src='<%=request.getContextPath() %>/images/go.gif'/>
------------------------------------------------------------------------------
总结:相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp , 但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准。原创地址:http://elf8848.iteye.com/
struts2中可以使用命名空间,来保证浏览器地址栏中的目录层次与服务器端目录层次的一致性,这样程序员通过服务器端的目录层次计算相对路径,在浏览器中也是正常的。
转载于:https://www.cnblogs.com/aijindi/p/4671004.html
jsp的相对路径问题相关推荐
- html怎么样取jsp中的路径,jsp中获得路径的两种方法和获得url路径的方法(推荐)
是解决相对路径的问题,可返回站点的根路径. //这样获得的是绝对路径 //这样获得的是相对路径 能够更有效的防治连接的失效. request.getContextPath()得到的是项目的名字,如果项 ...
- jsp 获取项目路径,java获取项目路径
1. 获取web服务器项目的真实物理路径 request.getSession().getServletContext().getRealPath("/"); 2. 相对路径的 ...
- JSP取得绝对路径的方法
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 例如: <scr ...
- jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
当前位置:我的异常网» Java Web开发 » 请教JSP中怎么向MySql中存入和取出图片 请教JSP中怎么向MySql中存入和取出图片 www.myexceptions.net 网友分享于:2 ...
- jsp:include page= /路径
填写绝对路径:page="/WEB-INF/folder1/folder2/.../fileName.jsp" 转载于:https://www.cnblogs.com/shaor/ ...
- jsp 跳到servlet路径_直接访问Jsp和从Servlet跳转到Jsp时的路径问题
项目名:pager 项目目录结构 和 jdbcSqlStudent.jsp文件下的几个引用 第一种情况: 直接访问jdbcSqlStudent.jsp文件报错 http://localhost ...
- JSP中URL路径获取问题
项目需求是内网也就是ip+端口号可以访问资源,但是后来要上外网可以访问,资源类似的服务,外网是前置机Nginx+tomcat,为了解决同一个登录页面适应内网和外网,就想在登录jsp中添加java判断, ...
- jsp显示服务器路径下的图片,jsp 从服务器获取图片路径
jsp 从服务器获取图片路径 内容精选 换一换 批量获取智能图片下载路径POST /v1/{user_id}/intelligence-data/pictures状态码: 200状态码: 400获取图 ...
- JSP通过虚拟路径设置背景图片
#最近做Web大作业时发现了很多问题. 在设置JSP页面的背景图片时,发现只能在Eclipse内置浏览器里才会显示背景图片,但谷歌浏览器.IE等均不显示,查了下资料,原来浏览器没法识别绝对地址. 大多 ...
最新文章
- PowerDesigner生成数据库
- 因为看见,所以发现:QBotVariant谢绝落幕
- pytorch使用horovod多gpu训练
- MySQL数据库性能优化的八种方式
- MySQL常用数据类型小结
- 从0搭建一个Springboot+vue前后端分离项目(五)创建后台Springboot工程
- primer premier 5 64位_王者荣耀:必出破军的3位英雄,玩他们不出破军?说明你是个菜鸟!...
- Java开源诊断工具 Arthas 发布v3.1.0
- python实现链表的删除_Python垃圾回收机制
- 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketExceptionsocket closed
- linux 权限加号是,请教:drwxrwxr-x 什么权限后面有个加号,代表什么意思
- linux 使cpu使用率升高_linux性能优化
- 使用GPUpassthrough方法发布带有GPU显卡的虚拟桌面
- html的表格使用函数,表格函数column是什么意思
- 【数字基带传输】误码率的分析方法(BER Performance)
- 相似图像识别算法是什么,机器图像识别常用算法
- 练习:身高出现的频次
- 大一作业HTML期末网页作业(化妆品网站制作) html+css+js 雅诗兰黛美妆网站制作
- 一年三 季 醋 泡 姜(养生)
- 校内代码 xiaonei代码 xiaonei黑色非主流代码