码迷,mamicode.com
首页 > Web开发 > 详细

JSP, Servlet, HTML中路径小结

时间:2015-11-23 16:41:40      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

JSP,Servlet和HTML中的路径基本上都是相对路径,只是相对路径的根路径有所区别而已。

以下是例子所使用到的servelt及jsp路径: 
servlet路径为:http://localhost:8080/testProject/hello/test 
jsp路径为:http://localhost:8080/testProject/test/test.jsp 
假设转发的目标是jsp(当然servlet也一样),完整的请求路径为: 
http://localhost:8080/testProject/target/target.jsp

1. JSP和Servlet中的转发路径

1.1 转发路径若以"/"开头,则是相对于工程的路径,也就是"http://localhost:8080/testProject/",例如:

  1. request.getRequestDispatcher("/target/target.jsp").forward(request, response);

  1. <jsp:forward page="/target/target.jsp"/>

则请求的完整路径就是: 
http://localhost:8080/testProject/target/target.jsp 
是正确的

1.2 转发路径若不以"/"开头,则是相对于当前servlet或者jsp所在的路径,也就是"http://localhost:8080/testProject/hello/"或"http://localhost:8080/testProject/test/",例如:

  1. request.getRequestDispatcher("target/target.jsp").forward(request, response);

  1. <jsp:forward page="target/target.jsp"/>

则请求的完整路径就是: 
http://localhost:8080/testProject/hello/target/target.jsp 
或 
http://localhost:8080/testProject/test/target/target.jsp 
是错误的

1.3 小结

因此在jsp或者servlet中执行请求转发时相对路径最好以"/"开头,写为相对于工程的路径,这样不易出错。

2. JSP和Servlet中的重定向

2.1 若路径以"/"开头,则是相对于站点根目录,也就是http://localhost:8080/,例如:

  1. response.sendRedirect("/target/target.jsp");

则重定向后完整的请求路径就是: 
http://localhost:8080/target/target.jsp 
是错误的

2.2 若路径不以"/"开头,则是相对于当前servlet或者jsp所在的路径,也就是"http://localhost:8080/testProject/hello/"或"http://localhost:8080/testProject/test/",跟转发时一样,例如:

  1. response.sendRedirect("target/target.jsp");

则重定向后完整的请求路径就是: 
http://localhost:8080/testProject/hello/target/target.jsp 
或 
http://localhost:8080/testProject/test/target/target.jsp 
也同样是错误的

2.3 正确写法

由于重定向时不论相对路径是否以"/"开头都不能正确定位,因此需要在重定向的路径前加上工程路径,也就是request.getContextPath(),在本例中这段代码的执行结果就是"/testProject",再加上目标相对路径就是完整的请求路径,正确的写法应该是:

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

此时重定向后的完整请求路径为: 
http://localhost:8080/testProject/target/target.jsp 
是正确的

2.4 小结

在jsp或者servlet中重定向时必须在目标路径前加上工程路径,并且目标路径必须以"/"开头。

3. HTML中的路径

在jsp页面中的html代码中的某些标签中的路径以‘/‘开头则是相对于站点根目录,不以‘/‘开头则是相对于当前页面的路径,为了书写统一,我一般会使用<base>标签来控制当前页面中链接的基本路径。

<base>标签的作用如下:

<base> 标签为页面上的所有链接规定默认地址或默认目标。 
通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。 
使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。 
摘自 W3School

当定义了<base>中基本路径之后,页面中html标签中的路径不能以‘/‘开头,否则就失去了<base>的作用。

通常情况下我会这么定义:

  1. <%
  2. String basePath = request.getScheme()
  3. + "://"
  4. + request.getServerName()
  5. + ":"
  6. + request.getServerPort()
  7. + request.getContextPath();
  8. %>
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12. <title></title>
  13. </head>

之后标签中的路径都只要写相对于工程的路径即可。

还有一点需要注意,就是<script>不受<base>控制,引用外部js文件时需要写完整路径或者正确的相对路径。

以上就是我对于JavaWeb开发中容易混淆的路径的一些总结。

JSP, Servlet, HTML中路径小结

标签:

原文地址:http://www.cnblogs.com/java-linux/p/4988698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!