1.重定向在Servlet中的接口HttpServletRequest提供了sendRedirect()方法用于生成302相应码和Location响应头,从而通知客户端去重新访问Location响应头指定的URL,其定义如下:publicvoidsendRedirect(Stringlocation)throwsIOException;对于sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,也可重定向到一个容器中的其他应用程序中的资源。eg://Servlet1.javapackagecom.lkh.redrect;importjava.io.IOException;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassServlet1extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//TODOAuto-generatedmethodstubthis.doPost(request,response);}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//TODOAuto-generatedmethodstubresponse.sendRedirect("Servlet2");//重定向到指定路径的资源//RequestDispatcherdis=request.getRequestDispatcher("Servlet2");//dis.forward(request,response);}}//Servlet2.javapackagecom.lkh.redrect;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassServlet2extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//TODOAuto-generatedmethodstubthis.doPost(request,response);}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//TODOAuto-generatedmethodstubresponse.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();out.println("");out.println("
servlet2");out.println("");out.println("从Servlet2中获取请求参数name的值:");out.println(request.getParameter("name"));out.println("");out.println("");}}同时要在项目中的web.xml对Servlet进行声明:Servlet1com.lkh.redrect.Servlet1Servlet1/Servlet1Servlet2com.lkh.redrect.Servlet2Servlet2/Servlet22.请求分派在Servlet中定义一个接口RequestDispatcher其方法如下:publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException;publicvoidinclude(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException;对于forward()方法用于将请求转发到RequestDispatcher实例封装的资源,include()方法用于将RequestDispatcher实例封装的资源作为当前响应的一部分包含进来。获取RequestDispatcher实例的方式有两种:(1)调用ServletContext接口提供的getRequestDispatcher(Stringurl)方法(2)调用ServletRequest接口提供的getRequestDispatcher(Stringurl)方法ServletContext接口提供的getRequestDispatcher(Stringurl)方法中的路径参数必须以”/"开头ServletRequest接口提供的getRequestDispatcher(Stringurl)方法中的路径参数可以是相对路径也可为绝对路径。eg:只要将上面中的Servlet1.java中的doPost()代码改为RequestDispatcherdis=request.getRequestDispatcher("Servlet2");dis.forward(request,response);3.重定向也和请求分派的比较:<1>请求分派只能将请求转发给同一个web应用中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可重定向到其他站点的资源上<2>重定向的访问过程结束后,浏览器的地址栏显示的URL会发生改变,变成重定向的目标URL,而请求分派的浏览器地址栏保持初始的URL<3>请求分派的发起者和被调者之间共享相同的request实例和response实例,属于同一个“请求/响应”而重定向的发起者和被调用者使用各自的request实例和response实例,各自属于独立的“请求/响应”过程。