我们在使用转发跳转页面时,地址栏不变,如果使用使用相对路径,以自身为基准,会导致浏览器URL地址解析错误,显然相对路径(…/)就不可靠,可能会出现“HTTP Statu 404”错误,所以使用绝对路径来解决此问题。
了解URL地址的构成
(1)首先根据主机地址找到一个具体的服务器(如Tomcat、JBoss等);
(2)其实根据Web应用虚拟路径(形式:“/项目名”)找到Web应用;
(3)最后根据Web应用下资源的虚拟路径访问具体资源(xxx.java 、xxx.html、xxx.jsp等文件);
如果资源是静态(HTML\CSS\JS\图片等文件)的,那么Tomcat会返回资源本身。
如果资源是动态的,例如Servlet,那么Tomcat会先执行Servlet程序,返回Servlet程序的运行结果。
注意:无论访问的目标资源是不是静态的,浏览器最终得到的都是静态数据:图片或字符串。
1.什么是是绝对路径?
以“/”开头的路径,称之为绝对路径。
2.“/”(正斜杠)代表什么意思?
codingling_project:是我自定义的项目工程名!
(1)“/”由服务器解析,代表当前项目路径:'http://localhost:8080/codingling_project
注意:两种情况由服务器解析:
①web.xml和url
②转发request.getRequestDispatcher("路径下转发的页面").forward(request, response);
说明:转发需要先获取转发器,再执行转发!
(2)“/”由浏览器去解析,代表当前项目路径:http://localhost:8080
注意:两种情况由浏览器解析:
①书写在.html中的路径,例如:img、script:src,link、a:href、form:action
②重定向response.sendRedirect("路径下重定向的页面");
3.如何获取自定义项目的虚拟路径?
一行代码解决:request.getContextPath();
表示“/codingling_project”,一般与重定向的路径拼接作为绝对路径!
4.怎么定义绝对路径?
场景:在用户登录页面,信息正确匹配登录成功则转发(登录成功后的页面)、失败则重定向(登录页面)。
(1)转发(请求一次)
request.getRequestDispatcher("/pages/login_success.html").forward(request, response);
(2)重定向(请求两次)
response.sendRedirect(request.getContextPath()+"/pages/login.html");
(3)HTML页面
<base>
标签为页面上的所有链接规定默认地址或默认目标。通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。使用
<base>
标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括<a>
、<img>
、<link>
、<form>
标签中的 URL。
①第一步:在HTML页面加入 <base href="/codingling_project/">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<base href="/codingling_project/">
</head>
②第一步:修改<a>
、 <img>
、 <link>
、 <form>
标签中的 URL(绝对路径),例如
<h2>登录页面跳转LoginServlet页面</h2>
<form action="LoginServlet" method="get">
<h2>绝对路径测试</h2>
<a href="pages/login.html">我要登录</a><br>
<a href="pages/regist.html">我要注册</a><br>
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!