JSP, Servlet, HTML中路径小结

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开发中容易混淆的路径的一些总结。

时间: 2024-12-17 05:17:00

JSP, Servlet, HTML中路径小结的相关文章

我能不能理解成 ssh中service就相当于与jsp+servlet+dao中的servlet???

转文 首先解释面上意思,service是业务层,dao是数据访问层.(Data Access Objects) 数据访问对象 1.Dao其实一般没有这个类,这一般是指java中MVC架构中的model的概念,主要是访问数据库的一些方法. 2.一般的javaMVC架构中最外层是view也就是页面,control是一些控制后台和页面访问的类,model其实是dao层,但大部分人,会再增加一层service层来提供更为方便的应用 3.DAO层一般有接口和该接口的实现类! 接口用于规范实现类! 实现类一

JSP/Servlet 中的汉字编码问题

1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用.字符编码集按 长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统), 为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念.但是由于各个本地字符集代码范围重叠,相互间信息交换困难:软件

JSP/ Servlet常见的中文乱码原因

在开发中,我们经常遇到中文乱码的问题,比方: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?' ?  &浏览器中看到的 Servlet 页面中的汉字都成了乱码  &Jsp/Servlet 页面无法显示 GBK 汉字. &Jsp/Servlet 不能接收 form 提交的汉字. &JSP/Servlet 数据库读写无法获得正确的内容. 隐藏在这些问题后面的是各种错误的字符转换和处理.解决类似的字符encoding问题,须要了解 Jsp/Servlet

Java Web 开发中路径相关问题小结

Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http://localhost:8080/ 2. web应用程序的的根目录:http://localhost:8080/test/ 3.同级目录:http://localhost:8080/test/articles/article1.jsp和http://

Servlet中路径问题:调度

Servlet中路径问题:调度 (1)调用后台方法 (2)根据结果完成跳转 重定向 response.sendRedirect(url); 转发 request.getRequestDispatcher(url).forward(request,response);MyServlet: http://localhost/news/myServlet31 重定向 response.sendRedirect(url);相对路径: response.sendRedirect("a/b.jsp"

Java Web开发中路径问题小结

看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http://localhost:8080/ 2. web应用程序的的根目录:http://localhost:8080/test/ 3.同

JSP在项目中的路径问题

一.JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径 : request.getRequestURI() 文件的绝对路径 : application.getRealPath(request.getRequestURI()); 当前web应用的绝对路径 : application.getRealPath("/"); 取得请求文件的上层目录 : new File(application.getRealPath(request.getRequestURI())).getPar

JSP+Servlet中使用jspsmartupload.jar进行图片上传下载

JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="text" name="cmt&q

JSP/Servlet Web应用中.properties文件的放置与读取

本地项目在本地类库中,我经常使用当前目录来放置.properties文件,这时调用方只要引用我的jar,并且将我的.properties放在他的classpath里面即可,比如:p.load(new FileInputStream("HanLP.properties"));这样类似下图的项目结构就可以跑起来:JSP/Servlet Web项目但是到了Web项目时,情况大不相同.在Tomcat下,classpath里只含apache-tomcat-8.0.14\bin目录下有限的...