请求的重定向与请求转发
RequestDispatcher接口
RequestDispatcher接口的理论知识
- RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如Servlet,HTML文件,JSP文件),并可以通过其中的方法将客户端的请求转发给所包装的资源
- RequestDispatcher接口中定义了两个方法:forward方法和include方法
- forward方法和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象。
- 获取RequestDispatcher的方法
– ServletContext.getRequestDispatcher(参数只能是以“/”开头的路径)
– ServletRequest.getRequestDispatcher(参数可以是不以“/”开头的路径)
– ServletContext.getNamedDispacher
用forward方法实现请求转发
测试forward方法
首先建立一个html,其中有一个超链接跳转到forwardServlet。
在ForwardServlet中写下响应,并用forward方法跳转至TestServlet处
tsetServlet的service方法打印接受的请求
运行结果
用sendRedirect方法实现请求重定向
运行结果
forward()方法和sendRedirect方法的区别
-
forward()方法执行以后,网址不变,只向服务器发送了一次请求,sendRedirect()方法执行以后,网址改变,向服务器发送了两次请求
在谷歌浏览器中运行可以知道,forward()只有一次请求
redirect有两次请求
- 请求转发:在最终的Servlet中,request对象和中转的那个request是同一个对象;请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象
-
请求转发:只能转发给当前WEB应用的资源;重定向:可以重定向到任何资源。
例子:
点击之后发现
如果用gerResquestDispatcher()的话,那么会是
- ==请求的转发:/ 代表的是当前WEB应用的根目录,加上了工程名即http://localhost:8080/test7/;请求的重定向,/代表web站点的根目录,即http://localhost:8080
附上源工程!!!!!
CSDN下载:https://download.csdn.net/download/xd15010130025/10992312
百度网盘链接:https://pan.baidu.com/s/1lDhZuOChw9yvI-6DXo-ZYw
提取码:8rgl