background image

“http://java.sun.com/j2ee/dtds/web-app_2_2.dtd”>
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>
其 中 定 义 了 两 个

Servlet , 名 字 分 别 为 FirstServlet 和 SecondServlet , 对 应 的 类 分 别 为

org.javaresearch. redirecttest.ServletOne 和 org. javaresearch.redirecttest.ServletTwo。可以在浏览
器中通过类似于下面的链接访问:
http://localhost:8080/servlet/firstservlet/
使用

1 中方法,例如在 firstservlet 可以写入下面的代码:

RequestDispatcher rd = request.getRequestDispatcher(“secondservlet”);
rd.forward(request, response);
此时控制权将转向到第二个

Servlet 了。

使用

2 中的方法,可以从 Servlet Context 中得到 RequestDispatcher 代码如下:

RequestDispatcher rd = getServletContext().getRequest
Dispatcher(“/servlet/secondservlet”);
rd.forward(request, response);
使用

3 中的方法,从上面的 web. xml 配置文件可以看到定义了两个 Servlet,名字分别为

FirstServlet 和 SecondServlet,所以可以得到命名的 Dispatcher:
RequestDispatcher rd = getServletContext().getNamedDispatcher(“SecondServlet”);
rd.forward(request, response);
这样也可以重定向到

SecondServlet 了。

JSP 页面中的重定向
JSP 在解析后编译为一个 Servlet 运行,所以在 JSP 中也可以使用上面的重定向代码,并且,
JSP 还提供了更便利的操作,如下:
<jsp:forward page= “nextpage.jsp”/>
JSP 页面执行到这儿,将终止当前的处理,将控制权交由 nextpage.jsp。
如何选择
RequestDispatcher.forward()方法和 HttpServletResponse.sendRedirect()方法的区别是:前者仅
是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完