学科分类
目录
Java Web

请求转发

在Servlet中,如果当前Web资源不想处理它的访问请求,可以通过forward()方法将当前请求传递给其它的Web资源进行处理,这种方式称为请求转发。为了使大家更好地了解如何使用forward()方法实现请求转发,接下来通过一张图来描述forward()方法的工作原理,如图1所示。

图1 forward()方法的工作原理

从图5-30中可以看出,当客户端访问Servlet1时,可以通过forward()方法将请求转发给其它Web资源,其它Web资源处理完请求后,直接将响应结果返回到了客户端。

了解了forward()方法的工作原理,接下来,通过一个案例来学习forward()方法的使用,如例1所示。

例1 RequestForwardServlet.java

 1    package cn.itcast.chapter05.request;
 2    import java.io.IOException;
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    public class RequestForwardServlet extends HttpServlet {
 6        public void doGet(HttpServletRequest request, HttpServletResponse response)
 7                throws ServletException, IOException {
 8            response.setContentType("text/html;charset=utf-8");
 9    // 将数据存储到request对象中
 10            request.setAttribute("company", "北京传智播客教育有限公司");        
 11    RequestDispatcher dispatcher = request
 12                    .getRequestDispatcher("/ResultServlet");
 13            dispatcher.forward(request, response);
 14        }
 15        public void doPost(HttpServletRequest request, HttpServletResponse response)
 16                throws ServletException, IOException {
 17            doGet(request, response);
 18        }
 19    }

在例1中,通过使用forward()方法,将当前Servlet的请求转发到ResultServlet页面,ResultServlet的具体实现如例2所示。

例2 ResultServlet.java

 1    package cn.itcast.chapter05.request; 
 2    import java.io.*;
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    public class ResultServlet extends HttpServlet {
 6        public void doGet(HttpServletRequest request, HttpServletResponse response)
 7                throws ServletException, IOException {
 8            response.setContentType("text/html;charset=utf-8");
 9            PrintWriter out = response.getWriter();// 获取PrintWriter对象用于输出信息
 10             // 获取request请求对象中保存的数据
 11            String company = (String) request.getAttribute("company");
 12            if (company != null) {
 13                out.println("公司名称:" + company + "<br>");
 14            }
 15        }
 16        public void doPost(HttpServletRequest request, HttpServletResponse response)
 17                throws ServletException, IOException {
 18            doGet(request, response);
 19        }
 20    }

启动Tomcat服务器,在浏览器中输入URL地址http://localhost:8080/chapter05/RequestForwardServlet访问RequestForwardServlet,浏览器显示的结果如图2所示。

图2 运行结果

从图2中可以看出,浏览器显示出了ResultServlet中要输出的内容。由此可见,forward()方法不仅可以实现请求转发,还可以使转发页面和转发到的页面共享数据。需要注意的是,存储在request对象中的数据只对当前请求有效,而对其它请求无效。

点击此处
隐藏目录