JSP相对路径与绝对路径探秘
2015-05-29 16:42
543 查看
浏览器端
带杠的
一开始浏览器的地址http://localhost:8080/example/index.jsp如果写成
<a href="/servlet/TestDBSvl">点击进入servlet</a>
带杠的,就是绝对路径,从http://localhost:8080/
开始记录也就是
http://localhost:8080/servlet/TestDBSvl
点击链接发生客户端跳转,url变化
所以这样的要从应用名开始写
<img src="/images/back.png" alt="" />
找不到
不带杠的
一开始浏览器的地址 http://localhost:8080/example/index.jsp但是如果不带杠的话
<a href="MyJsp.jsp">点击进入新页面</a>
就是相对工程名开始找了
点击链接发生客户端跳转,url变化
<img src="/images/back.png" alt="" />
能找到
http://localhost:8080/example/images/back.png
服务器端 servlet
RequestDispatcher
带杠的request.getRequestDispatcher("/MyJsp.jsp").forward(request,response);
很明显,url没有变
不带杠的相对路径
request.getRequestDispatcher("MyJsp.jsp").forward(request,response);
没有去掉servlet
Servlet跳转到页面能不能找到图片?
request.getRequestDispatcher("/index.jsp").forward(request,response);index.jsp
<img src="images/back.png" alt="" />
能找到图片
http://localhost:8080/example/images/back.png
Redirect
浏览器在" http://localhost:8080/example//servlet/TestDBSvl带杠的
//request.getRequestDispatcher("/index.jsp").forward(request,response);
能找到页面http://localhost:8080/example/index.jsp
//response.sendRedirect("/MyJsp.jsp");
http://localhost:8080/MyJsp.jsp找不到页面!
当然在浏览器端一样找不到页面
http://localhost:8080/MyJsp.jsp
不带杠的
response.sendRedirect("MyJsp.jsp");
//http://localhost:8080/example/servlet/MyJsp.jsp 找不到页面
//没办法只能写全了
当然在浏览器端能找到页面,因为是相对于
http://localhost:8080/example/index.jsp来说的
Jsp:forward
<jsp:forward page="/MyJsp.jsp"/>服务器跳转,能找到页面
总结
带杠的 为绝对地址
寻址方式=偏移+地址偏移
客户端跳转 http://localhost:8080
服务器端跳转 http://localhost:8080/example
这个偏移和你在浏览器端还是servlet没有关系
不带杠 为相对地址
寻址方式就是划掉上一个地址的最后一个\后的内容,加上你写的相对新地址那么如果我写两个会怎样呢?
浏览器地址http://localhost:8080/example/index.jsp
<%response.sendRedirect("example/MyJsp.jsp"); %>
寻址结果为 http://localhost:8080/example/example/MyJsp.jsp
所以不管你有几个,都是划掉上一个地址的最后一个\后的内容,加上新地址
注意并不一定是浏览器上地址栏显示的地址
比如
Index.jsp进入servlet,地址栏为
http://localhost:8080/example/servlet/TestDBSvl
这时又通过dispatcher,回到了index.jsp
地址栏仍未servlet,这时点击相对路径
<a href="MyJsp.jsp">点击进入新页面</a>
还能找到吗?
能的!
http://localhost:8080/example/MyJsp.jsp
那我究竟写什么?
对于搞开发来说,一个统一的标准,最重要了,不然还要想上半天,写带杠的吧,你得判断服务器跳转还是浏览器跳转
写不带杠的吧,相对路径玄乎乎的
所以,全部用
全部写全了,省得烦
<base href="<%=basePath%>">
抛弃以前在什么之前都加 <%=basePath%>servlet/StoreDishSvl 的方式,而是在页面头部加上这个
<html>
<head>
<!-- base需要放到head中 -->
<base href="<%=basePath%>">
</head>
// 这里我们就可以直接使用相对路径(即: 相对于base标签)
<a href="jsp/login.jsp">Login</a>
</html>
对于servlet dispatcher写带杠的
对于servlet redirect 带不带杠,都不行,写全了
相关文章推荐
- ExtJS 4.2 02 ExtJs 基础
- JavaScript closure
- JSON对象和字符串之间的相互转换
- js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
- js学习-函数
- js获取鼠标移动位置
- js发送邮件确定email地址
- Jsoup中select方法详解
- jsoup中文API
- Jsoup解析HTML实例及文档方法详解
- query或者JavaScript实现在textarea光标处插入文本
- json使用时需要导入的包
- JS、HTML 单双引号转义
- Java基础——JavaScript概述、DOM
- JS如何判断滚动条是否滚到底部
- js原生Ajax的封装与使用
- Java、javascript、JS和JScript区别
- Jackson 框架,轻易转换JSON
- JavaScript-函数
- JavaScript 数据类型 、JS 变量 、JS 对象