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 带不带杠,都不行,写全了

  • 相关阅读:
    latex表格实现文本自动换行
    SQL like查询条件中的通配符处理
    火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题
    jquery.zclip.js复制到剪切板
    EF架构~过滤导航属性等,拼接SQL字符串
    日志记录类LogHelper
    VS插件开发
    C#预处理器指令
    c++Builder 下的文件及目录操作
    C#:在catch中return,会执行finally吗?
  • 原文地址:https://www.cnblogs.com/unflynaomi/p/4538883.html
Copyright © 2011-2022 走看看