碾压【路径问题】这条小臭虫!

绝对路径:根据给出的请求可以准确定位到资源的路径。Web 应用的绝对路径,则是指带请求协议的路径。

绝对路径:带访问协议的路径是绝对路径     http://127.0.0.1/requestPath/hello.do

                                               请求路径  = |----------- 访问路径 ----------|-资源名称-|  

                     绝对路径 = 参照路径 + 相对路径                       

相对路径:仅根据请求路径无法准确定位资源的路径。相对路径必须要结合其参照路径才可组成可以准确定位资源的绝对路径。

                    根据相对路径是否以斜杠开头,且出现的文件位置的不同,其默认的参照路径是不同的。

  Web路径    

      * 不带"/"的相对路径  其参照路径为当前的访问路径,而不是被访问资源的所在路径

     * 带"/"的相对路径   

           前台路径:在JSP、html中的路径,由浏览器解析。其参照路径为:web服务器根   http://127.0.0.1/

           后台路径:Java代码、xml文件中的路径,是服务器解析。其参照路径为:当前Web应用的根    http://127.0.0.1/06-requestPath/

后台路径特例:

         对于后台路径的参照路径有一个特例:当代码中使用 response 的 sendRedirect () 方法进行重定向时,其参照路径不是 web 应用的根路径,而是 web 服务器的根路径。

         执行 response.sendRedirect("/hello.jsp"); 将会报 404 错误。因为其参照路径是 Tomcat 的根,而非当前项目的根。所以若要使用重定向,要么写无斜杠的相对路径:

                  response.sendRedirect("hello.jsp");

         要么在路径上添加上项目名称:

                  response.sendRedirect(request.getContextPath + "/hello.jsp");

JSP 的 <base/> 标签:(jsp页面中路径跳转第一次正确,反复跳转出现 404 错误)

        若不使用斜杠开头的请求,则需要使用 JSP 的 <base/>  标签。页面中的 <base/> 标签,会在当前页面的资源请求路径前自动加上 <base/> 标签所代表的路径,将相对路径变为带访问协议的绝对路径。

        该方式实际上是修改了不带斜杠的相对路径的参照路径,将由原来的当前访问路径作为参照路径,改为了以 basePath 为参照路径。

        所以这种方式要求页面中的请求不能以斜杠开头。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  <body>
    <a href="test/hello.do">我是一个演示表</a>
  </body>
</html>

希望对你有帮助,祝你有一个好心情,加油!

转载请注明出处,谢谢。



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值