RequestDispatcher实现请求转发
当一个 Web 资源收到客户端的请求后,如果希望服务器通知另外一个资源处理请求,那么这时可以通过 RequestDispatcher 接口的实例对象实现。ServletRequest 接口中定义了一个获取 RequestDispatcher 对象的方法,如表 1 所示。
获取到 RequestDispatcher 对象后,最重要的工作就是通知其他 Web 资源处理当前的 Servlet 请求,为此,RequestDispatcher 接口定义了两个相关方法,如表 2 所示。
图 1 forward() 方法的工作原理
package com.mengma.servlet; 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 doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException { doGet(request,response); } }
package com.mengma.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResultServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = (String) request.getAttribute("username"); if (username != null) { out.println("用户名:" + username + "<br/>"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
启动 Tomcat 服务器,在浏览器的地址栏中输入地址 http://localhost:8080/servletDemo02/RequestForwardServlet 访问 RequestForwardServlet,浏览器的显示结果如图 2 所示。
图 2 运行结果
下一篇:
【Python】斐波那契数列之兔子问题