Servlet--超链接,表单提交,重定向,转发4种情况的路径

原创 2015年07月09日 15:32:29
实际编码中我们经常写路径,写路径既可以写相对路径,也可以写绝对路径。我2年以前我就养成了习惯,只要是写路径我从来都是写绝对路径,因为万一将来我们的项目的目录发生变化,原来要是写相对路径的话就会有路径依赖关系,改的地方太多了。而且相对路径在某些情况下还有点特殊,有的是相对于原来的请求的目录,有的是相对于整个web应用,所以我强烈建议大家以后写路径统一用绝对路径(以“/”开头)来写,“/”表示站点的根路径。

写路径的情况无非下面4种情况,这里做一个整理。

  • 1,超链接

假设使用下面的目录结构:

           

当前的请求路径:http://localhost:8080/linkin/Linkin.html或者http://localhost:8080/linkin/Linkin.jsp

相对路径:

1,我们来看看在linkin.html中引入linkin.js和linkin.html文件相对路径应该怎么写?

<span style="white-space:pre">	</span><script type="text/javascript" src="../scripts/linkin.js"></script>
	<link rel="stylesheet" type="text/css" href="../styles/linkin.css">

2,如果在linkin.jsp中引入linkin.js和linkin.html文件相对路径应该怎么写?

<span style="white-space:pre">	</span><script type="text/javascript" src="scripts/linkin.js"></script>
	<link rel="stylesheet" type="text/css" href="styles/linkin.css">

注意:上面的html文件和jsp文件引入静态资源相对路径还不一样,记住下面的一句话,如果是在服务器上直接运行的静态资源比如html文件引入别的静态资源这里的“相对”就是物理意义上的相对,如果是在服务器上要跳转的这种视图资源比如jsp文件引入别的静态资源这里的“相对”是相对于上整个web工程的相对,2者不同的。


绝对路径:以“/”开头,“/”表示根目录,之后从项目名依次开始写。
<script type="text/javascript" src="/linkin/scripts/linkin.js"></script>
<link rel="stylesheet" type="text/css" href="/linkin/styles/linkin.css">

  • 2,表单提交
当前的请求路径:http://localhost:8080/linkin/Linkin.jsp
相对路径:<form action="LinkinServlet" method="POST">
绝对路径:<form action="/linkin/LinkinServlet" method="POST">

  • 3,重定向
当前请求路径:http://localhost:8080/linkin/LinkinServlet
相对路径:resp.sendRedirect("jsp/Linkin1.jsp");
绝对路径:resp.sendRedirect("/linkin/jsp/Linkin1.jsp");

  • 4,转发
当前请求路径:http://localhost:8080/linkin/LinkinServlet
相对路径:req.getRequestDispatcher("jsp/Linkin1.jsp").forward(req, resp);

绝对路径:req.getRequestDispatcher("/jsp/Linkin1.jsp").forward(req, resp);


总结:
1,尽管我们不怎么写相对路径,但是难免会维护别人的代码,所以还是要了解一下的。如果在超链接中使用了到了相对路径,如果要是没有服务器跳转,比如html这些文件,则相对就是文件所在的目录,要是经过了服务器跳转,比如jsp这些文件或者通过XXX.do跳转到的页面上的话,这里的相对是相对于整个web应用,不一样的。


2,绝对路径比较好,以后我们写路径都直接写绝对路径就好。除了转发,绝对路径的开头“/”代表域名之后的东西,也就是说相当于省去了整个url上面的主机IP和端口号而已,项目名称还是要写的。转发是唯一一个比较特殊的,因为转发本身就是在web应用内部跳转的,所以不能写项目名称,直接从项目名称后面开始写。

  • 如果还不理解,请好好理解下面这句话:
传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher 对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。


3,如果有代码洁癖的人在写绝对路径的时候,不想在jsp出现项目名称这种硬码,怎么办呢?用<%=request.getContextPath()%>来代替,比如:

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/common.css" />
<script type="text/javascript" src="<%=request.getContextPath()%>/jquery/base/jquery-1.8.0.js"></script>


  • 最后统一来整理下请求路径:

请求路径是把请求导向到一个 servlet 来响应服务。它是由几个重要的部分来组成的。  通过 HttpRequest 对象,暴露了如下信息(对照应用的目录结构):
1)上下文路径(Context Path) 
该路径的前缀是和 ServletContext 相关的。如果 Context 就是 Web 服务器的 URL 命名空间的缺省的根上下文时,那么上下文路径将会是一个空的字符串。    如果上下文并不是服务器的命名空间的根,则上下文路径就以“/”开始,但不能以“/”结束。
2)Servlet 路径(Servlet Path) 
该路径就是直接与激活该请求的相应映射,它也是以“/”开头。但要注意的是,如果指定的请求是与“/*”模式相匹配,则此时 Servlet 路径就是一个空字符串。
3)路径信息(PathInfo) 
请求路径中除了上下文路径和 Servlet 路径以外的部分。当没有额外的路径时路径信息就是空的(null),或者它会以“/”开始的字符串。  在 HttpServletRequest 接口中定义如下的方法来访问请求路径的相应信息:getContextPath(); getServletPath(); getPathInfo();    值得注意的是,请求 URI 和路径的各部分之间的 URL 编码的不同之外,下面的等式恒成立:    requestURI = contextPath + servletPath + pathInfo


版权声明:本文为博主原创文章,欢迎大家转载。如有错误请多多指教。

Servlet中转发和重定向的路径问题以及表单提交路径问题

转自:http://blog.sina.com.cn/s/blog_7ffb8dd501013tbg.html 一、请求转发与响应重定向的种类    有两种方式获得Servlet转发对象(Re...
  • u011943172
  • u011943172
  • 2016年07月01日 16:27
  • 2315

JSP表单提交给Servlet处理后,转到重定向的页面时,布局混乱

那是因为你的css样式文件路径出错了, 样式文件路径用/source/bookshop.css" rel="stylesheet" type="text/css">   这样无论如何都不会有问题 ...
  • yuese123456
  • yuese123456
  • 2014年07月26日 10:37
  • 676

J2EE学习笔记(三)之重定向、转发、超链接及表单提交的区别和路径

一、重定向、转发、超链接及表单提交的区别1.案例这里借用一个新人问我的栗子~ ...
  • Yolanda_NuoNuo
  • Yolanda_NuoNuo
  • 2017年08月10日 18:22
  • 1175

Servlet--超链接,表单提交,重定向,转发4种情况的路径

实际编码中我们经常写路径,写路径既可以写相对路径,也可以写绝对路径。我2年以前我就养成了习惯,只要是写路径我从来都是写绝对路径,因为万一将来我们的项目的目录发生变化,原来要是写相对路径的话就会有路径依...
  • u011794238
  • u011794238
  • 2015年07月09日 15:32
  • 1798

Servlet中转发和重定向的路径问题以及表单提交路径问题

一、请求转发与响应重定向的种类     有两种方式获得Servlet 转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDisp...
  • enen199202
  • enen199202
  • 2016年03月24日 10:14
  • 194

Servlet--表单、超链接、转发、重定向4种情况的路径

Servlet中相对路径总结         假设使用如下目录结构: 2、表单提交         表单提交到其他的jsp可用相对地址和绝对地址,相对地址定位到该页面的当前目录,如果使用绝对路径,...
  • LNhome
  • LNhome
  • 2015年10月12日 20:17
  • 2573

Jsp&Servlet 重定向、请求转发与绝对路径的问题

一、重定向:通知浏览器重新发送至xxx的请求。 1、发生场景: (1)response.sendRedirect("xxx"); (2)JSP页面的 src 属性; (3)JSP表单的 act...
  • zzz1192993261
  • zzz1192993261
  • 2017年03月26日 19:32
  • 1478

请求转发与重定向

在servlet中可能会牵扯到传值或者跳转的问题,可以能是servlet之间互相跳转,也可能是两个web应用程序之间互相跳转。这就出现了请求转发和重定向。 请求转发的特点: 1.请求转...
  • mawming
  • mawming
  • 2016年09月01日 16:14
  • 826

关于请求转发和重定向(一)--- 请求转发

在servlet中可能会牵扯到传值或者跳转的问题,
  • u011832252
  • u011832252
  • 2014年05月17日 22:16
  • 994

转发,重定向中的路径问题以及两者的区别,用法

url:http://localhost:8080/newlib "/"代表根目录,也就是这里的http://localhost:8080 "./"代表当前目录 "../"代表上一级目录 ...
  • hscch
  • hscch
  • 2017年09月19日 08:58
  • 294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Servlet--超链接,表单提交,重定向,转发4种情况的路径
举报原因:
原因补充:

(最多只允许输入30个字)