请求转发:一种在服务器内部的资源跳转方式
步骤:
1 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2 使用RequestDispatcher对象来进行转发:forward(ServletRequest requst,ServletResponse response)
特点:
1 浏览器地址栏路径不发生变化
测试如下
上面就请求转发 ,可以看到浏览器的地址没有发生变化,也能访问RequestDemo9的类.
测试 能不能访问外部资源
它自己能被访问 ,但是转发后的资源访问不了.
特点2 只能转发服务器内部资源.
特点3 转发是一次请求.
只请求一次,2个资源同时被访问.
共享数据 request 域
重定向
代码实现
第一种方式
第二种方式 : 也是我们常用的
转发请求和重定向的特点对比 *****它们正好是相反的.
代码上面已经截过图了 输入ResponseDemo01 的地址
地址跳转了ResponseDemo02 而且是两次请求 第二次状态是200
演示 跳转外部资源
代码如下
输入地址ResponseDemo01
跳转了重定向后的地址ResponseDemo01
路径的写法.
一 路径的分类.
1 相对路径 : 通过相对路径不可以确定唯一资源
如 : ./index.html
不以/开头,以.开头的路径
规则:确定访问当前资源和目标资源直接的相对位置关系.
比如下面 就是相对路径访问到的responseDemo2资源.
./ 代表 当前目录
…/ 代表后退一级目录
2 绝对路径 : 通过绝对路径可以确定唯一的资源
如: http://localhost/day15/responseDemo02
以/开头
规则: 判断定义的路径是给谁用的? 判断请求将来从哪发出
:给客服端浏览器使用:需要加虚拟目录(项目的访问路径) 一般是指 超链接 表单 重定向
点击后跳转正常 如下图
给服务器使用:不需要加虚拟目录.
转发的时候不用加虚拟目录/day15 因为转发是给服务器使用的.(内部使用)
一个小细节 重定向 需要写虚拟目录.
虚拟目录不能写死了
要写成动态的