javaweb之路径问题

2025-11-21 22:06:17

1、提出问题:

①创建Web应用Path,目录结构如图所示                                             

②在a.html中有超链接<a href="b.html">To b.html</a>

③如果先直接访问a.html,再通过超链接转到b.html没有问题。

④如果先通过TestServlet转发到a.html,则浏览器地址栏会变成:

http://localhost:8989/Path/TestServlet

此时再点击超链接<a href="b.html">To b.html</a>就会发生问题,找不到b.html。

⑤原因是超链接<a href="b.html">To b.html</a>使用的是相对路径,浏览器进行解析时,只能以当前浏览器地址栏里的路径为基准。例如,当前浏览器地址栏里的内容是:

http://localhost:8989/Path/TestServlet

那么经过浏览器解析后b.html的访问地址就成了:http://localhost:8989/Path/TestServlet b.html这显然无法访问到b.html。

javaweb之路径问题

2、完整的url构成

javaweb之路径问题

3、相对路径和绝对路径

4、对路径:

      虚拟路径如果不以“/”开始,就是相对路径,浏览器会以当前资源所在的虚拟路径为基准对相对路径进行解析,从而生成最终的访问路径。此时如果通过转发进入其他目录,再使用相对路径访问资源就会出错。

javaweb之路径问题

5、对路径:

      虚拟路径以“/”开始,就是绝对路径。

      1)在服务器端:虚拟路径最开始的“/”表示当前Web应用的根目录。

例如:服务器端虚拟路径“/TestServlet”使用浏览器访问时,地址为

http://localhost:8989/Path

所以由服务器解析的路径,以”/”开头的都是以当前web路径为基准的。

由服务器解析的路径

              web.xml 文件中 url-pattern 中配置的URL,以“/”开头的

              转发操作:request.getRequestDispatcher("/xxx").forward(request,response);

              Jsp动作标签:<jsp:forward page="/xxx">

这些最后的访问路径都是

http://localhost:8989/Path/xxx

javaweb之路径问题

6、在浏览器端:虚拟路径最开始的“/”表示当前主机地址。

例如:链接地址“/ Path/ dir/ b.html”经过浏览器解析后为:

相当于http://localhost:8989/ Path/ dir/ b.html

所以由浏览器解析的路径,以“/”开头的都是以当前的主机地址为基准的

由浏览器解析的路径

              重定向操作:response.sendRedirect("/xxx")

              所有HTML标签:<a href="/xxx">;<form action="/xxx"> ...

这些最后的访问路径都是

http://localhost:8989/xxx

所以我们可以看出,如果是浏览器解析的路径,我们必须加上项目名称才可以正确的指向资源。http://localhost:8989/Path/xxx

javaweb之路径问题

7、 jsp页面中获取项目名

在由浏览器解析的地址中动态添加当前web应用根目录路径

1)JSP表达式        <%= request.getContextPath() %> = /LessonPractice040

例:<a href="<%= request.getContextPath() %>/target.jsp">Target Page</a>

2)EL表达式 ${pageContext.request.contextPath } = /LessonPractice040

例: <a href="${pageContext.request.contextPath }/target.jsp">Target Page</a>

javaweb之路径问题

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢