更新时间:2023年01月10日12时03分 来源:传智教育 浏览次数:
在RequestDispatcher接口中,forward()方法可以实现请求转发,include()方法可以实现请求包含,本节将以请求转发为例,讲解forward()方法的使用。
在Servlet中,如果当前Web资源不想处理请求,则可以通过forward()方法将当前请求传递给其他的Web资源进行处理,这种方式称为请求转发。请求转发的工作原理如图10-8所示。
从图10-8中可以看出,当客户端访问Servlet1时,可以通过forward()方法将请求转发给其他Web资源,其他Web资源处理完请求后,直接将响应结果返回到客户端。
了解了forward()方法的工作原理后,下面通过案例演示forward()方法的使用。在chapter10项目的com.itheima.request包中创建一个名为RequestForwardServlet的Servlet类,该类使用forward()方法将请求转发到一个新的Servlet页面,如文件10-5所示。
图10-8 forward()方法的工作原理
文件10-5 RequestForwardServlet.java
package com.itheima.request; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public class RequestForwardServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setAttribute("username","张三"); //将数据存储到request对象中 RequestDispatcher dispatcher=request .getRequestDispatcher("/ResultServlet"); dispatcher.forward(request, response); } public void daPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doGet(request, response); } }
在文件10-5中,通过使用forward()方法,将当前Servlet的请求转发到ResultServlet页面,在com.itheima.request包中编写一个名为ResultServlet的Servlet类,该类用于获取RequestForwardServlet类中存储在request对象中的数据并输出,ResultServlet类的代码实现如文件10-6所示。