JSP相对路径与绝对路径探秘

浏览器端

带杠的

一开始浏览器的地址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 带不带杠,都不行,写全了

原文地址:https://www.cnblogs.com/unflynaomi/p/4538883.html