MENU

Servlet下的转发和重定向相关问题

November 2, 2020 • Read: 123 • 教程学习

转发

①客户浏览器发送http请求

②web服务器接受此请求

③调用内部的一个方法在容器内部完成请求处理和转发动作

request.getRequestDispatcher("login.jsp").forward(request, response);

④将目标资源发送给客户。

在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。

Servlet转发,以/开始,代表的是项目根开始,一般是项目的WebContent目录

重定向

①客户浏览器发送http请求

②web服务器接受后发送302状态码响应及对应新的location给客户浏览器

③客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址

服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。

Servlet重定向,以/开始,代表的是从服务器根开始,http://localhost:8080


为什么使用重定向不能访问WEB-INF目录下的内容?

先来说下WEB-INF目录

WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如jsp,html

原因:
既然WEB-INF是安全目录,客户端无法访问,而重定向就相当于用户直接从客户端访问了的路径,自然就不可以啦,只有程序内部转发的时候才能转发到WEB-INF下的JSP。

路径问题

在Javaweb中经常使用转发和重定向两种方式来实现跳转页面的效果,所以会经常存在路径的问题,稍不留神就会出现404资源无法访问的问题,一般这种情况是由于转发或者重定向的路径写错误!

在JavaWeb中经常会使用路径来引入资源,所以一般会使用两种方式来引入:

  • 相对路径:以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对。
  • 绝对路径:以Web 站点根目录为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同。由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之为绝对路径。

JavaWeb中通常使用request.getContextPath()获取项目的绝对路径

特殊符号

"." -- 代表目前所在的目录,相对路径。 如:<a href="./abc">文本</a> 或 <img src="./abc" />
".." -- 代表上一层目录,相对路径。 如:<a href="../abc">文本</a> 或 <img src="../abc" />
"../../" -- 代表的是上一层目录的上一层目录,相对路径。 如:<img src="../../abc" />
"/" -- 代表根目录,绝对路径。 如:<a href="/abc">文本</a> 或 <img src="/abc" />
"D:/abc/" -- 代表根目录,绝对路径。
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

3 Comments
  1. 涨知识了@(哈哈)

    1. @叶小明的博客见笑了哈哈哈哈

  2. 又发现一个好站,收藏了~以后会经常光顾的 (。•ˇ‸ˇ•。)