Javaweb Servlet基础学习记录(4)—重定向与请求转发(请求转发)
Javaweb Servlet基础学习记录(4)—重定向与请求转发(请求转发)
二、请求转发
请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。
请求转发过程图(演示由请求ServletA到ServletB的转发过程):
现实生活举例(图片转载自CSDN博主「阿顾同学」的原创文章,原文链接:https://blog.csdn.net/u010452388/article/details/80398929):
注释:
(1)请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。
(2)请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。
(3)RequestDispatcher接口有以下两个方法:
Forward()方法:将请求转发给其他资源。
Include()方法:将其他资源并入到当前请求中。
代码实现:
通过HttpServletRequest对象来实现,请求转发语法格式如下:
RequestDispatcher dispatcher = request.getRequestDispatcher(String path); dispatcher .forward(ServletRequest request, ServletRequest response);
其中,path参数用以指定转发的URL,只能是相对路径;request和response参数取值为当前请求所对应的HttpServletRequest和HttpServletResponse对象。
示例:
RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp").forward(request,response);
表示请求转发到当前项目站点的根目录下的index.jsp页面
演示:
创建ResultServlet
package com; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ResultServlet */ @WebServlet("/ResultServlet") public class ResultServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ResultServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 解决中文乱码问题 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("<p>请求ResultServlet</p>"); out.flush(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
创建ForwardServlet
package com; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ForwardServlet */ @WebServlet("/ForwardServlet") public class ForwardServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ForwardServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("请求转发之前"); RequestDispatcher dis = request.getRequestDispatcher("/ResultServlet"); dis.forward(request, response); System.out.println("请求转发之后"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
其中
RequestDispatcher dis = request.getRequestDispatcher("/ResultServlet"); dis.forward(request, response);两行一般写为
request.getRequestDispatcher("/ResultServlet").forward(request, response);前者更直观地表示了借助RequestDispatcher接口对象实现forward。
运行查看控制台,确认执行了ForwardServlet
前端输入地址http://localhost:8080/ClassDemo02/ForwardServlet回车
- 点赞
- 收藏
- 分享
- 文章举报
- Javaweb Servlet基础学习记录(5)—重定向与请求转发(请求转发与重定向对HttpServletRequest对象属性的存取)
- Javaweb学习之请求转发重定向
- JavaWeb之@WebServlet注解,重定向和请求转发。
- JavaWeb学习之请求转发和重定向
- servlet学习(四)请求转发和重定向
- 【JavaWeb学习笔记】重定向和请求转发的区别
- 传智播客Servlet学习,请求重定向与请求转发
- Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)
- Javaweb Servlet基础学习记录(6)—异步处理
- Servlet的请求处理,请求转发和重定向的区别
- servlet请求转发的三种方式,请求转发与重定向以及包含
- 2.1Head First Servlet & Jsp——请求转发和请求重定向
- servlet中请求转发(forword)与重定向(sendredirect)的区别
- Servlet 请求转发和重定向
- Servlet的请求转发和重定向转发
- servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别
- servlet中 请求转发和重定向的区别
- ServletConfig,ServletContext,Servlet作用域,多方法请求,请求转发与重定向,Servlet3.0特性
- servlet小结 请求转发和重定向的区别
- JavaWeb中的请求转发和重定向的相对路径