请求转发概述
客户端对一个”Servlet“提交请求,Servlet计算处理后,可利用RequestDispatcher对象,可以把请求转发给其他的Servlet或JSP页面。通常这出现在Servlet进行了验证处理得出结果,需要到另外一个结果页面显示的情形。
页面重定向和请求转发的区别
页面重定向向客户浏览器发送页面重定向指令,浏览器接收后将向Web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的URL。
请求转发是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在URL中显示的是跳转前的页面
ServletContext
Servlet的运行环境称为Servlet上下文,每一个Web应用程序都有一个与之相关的Servlet上下文。JAVA Servlet API提供了一个ServletContext接口用来表示上下文。
HttpServlet类继承了getServletContext方法,该方法的原型为:
public ServletContext getServletContext()
该方法能够返回当前Servlet对象所属的ServletContext对象的引用。
RequestDispatcher
提供的forward方法可以重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变。
截取应用代码:
ServletContext context=getServletContext();
RequestDispatcher rd=context.
getRequestDispatcher ("/Payroll/ShowCalResult.jsp?employeeName="
+name+"&wage="+wage);
rd.forward(request,response);
请求转发完整示例
jsp页面:
<form action="OutputWelcome">
对我说Hello:<input name="word" type="text"><br>
<input type="submit" value="确定">
<input type="reset" value="取消">
</form>
Servlet接收到前一页面的参数后,将“携带参数”的request对象一同转发给另一目标页面(JSP页面)。
OutputWelcome.JAVA源码:
public class OutputWelcome extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = getServletContext();//找出总管
RequestDispatcher rd = context.getRequestDispatcher("/welcome.jsp");//由总管调出服务员,设置服务员工作,将给你的菜改变成另一道
rd.forward(request,response);//服务员给菜:你要的菜虽然变了,但是你要的料还是给你,变化的菜也给你。
}
}
此例中的目标页面是welcome.jsp.
修改后的welcome.jsp:
<body>
<%>
String word= request.getParameter("word");
%>
<%=word%>
</body>
注意:地址栏中地址未发生变化。
rd.forward(request,response);该语句传递了request对象,所以name值被显示在最终JSP页面中。
视频
通过案例演示对比,可快速掌握页面重定向和请求转发的区别。

