zoukankan      html  css  js  c++  java
  • 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 带不带杠,都不行,写全了

  • 相关阅读:
    二、静、动态代理(9~10)~~~~
    luogu P3572 [POI2014]PTA-Little Bird 单调队列优化dp
    luogu P6113 【模板】一般图最大匹配 带花树
    Codeforces Round #646 (Div. 2) C——Game On Leaves 思维
    Codeforces Round #646 (Div. 2) E——Tree Shuffling 思维
    luogu P2979 [USACO10JAN]Cheese Towers S 变形dp背包
    luogu P6577 【模板】二分图最大权完美匹配
    Educational Codeforces Round 88 (Rated for Div. 2) D
    Codeforces Round #645 (Div. 2) E
    Codeforces Round #645 (Div. 2) D
  • 原文地址:https://www.cnblogs.com/unflynaomi/p/4538883.html
Copyright © 2011-2022 走看看