1、1.重定向 在Servlet中的接口HttpServletRequest提供了sendRedirect()方法用于生成302相应码和Location响应头,从而通知客户端去重新访问Location响应头指定的URL,其定义如下: public void sendRedirect(String location ) throws IOException; 对于sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,也可重定向到一个容器中的其他应用程序中的资源。 eg: //Servlet1.java package
2、com.lkh.redrect; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet1 extends Htt
3、pServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub this.doPost(request, response); } @Override protected void doPost(HttpServletRequest request, Http
4、ServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.sendRedirect("Servlet2"); //重定向到指定路径的资源 // RequestDispatcher dis=request.getRequestDispatcher("Servlet2"); // dis.forward(request, response); } } //Servlet2.java package
5、com.lkh.redrect; 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 Servlet2 extends HttpServlet {
6、 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub this.doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletRes
7、ponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(""); out.println("
8、
out.println("从Servlet2中获取请求参数name的值:");
out.println(request.getParameter("name"));
out.println(" ");
out.println("");
}
}
同时要在项目中的web.xml对Servlet进行声明:
9、
10、let2
11、 response) throws ServletException,IOException; 对于forward()方法用于将请求转发到RequestDispatcher实例封装的资源,include()方法用于将RequestDispatcher实例封装的资源作为当前响应的一部分包含进来。 获取RequestDispatcher实例的方式有两种: (1)调用ServletContext接口提供的getRequestDispatcher(String url) 方法 (2)调用ServletRequest接口提供的getRequestD
12、ispatcher(String url) 方法 ServletContext接口提供的getRequestDispatcher(String url) 方法中的路径参数必须以”/"开头 ServletRequest接口提供的getRequestDispatcher(String url) 方法中的路径参数可以是相对路径也可为绝对路径。 eg: 只要将上面中的Servlet1.java 中的doPost()代码改为 RequestDispatcher dis=request.getRequestDispatcher("Ser
13、vlet2"); dis.forward(request, response); 3.重定向也和请求分派的比较: <1>请求分派只能将请求转发给同一个web应用中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可重定向到其他站点的资源上 <2>重定向的访问过程结束后,浏览器的地址栏显示的URL会发生改变,变成重定向的目标URL,而请求分派的浏览器地址栏保持初始的URL <3>请求分派的发起者和被调者之间共享相同的request实例和response实例,属于同一个“请求/响应”而重定向的发起者和被调用者使用各自的request实例和response实例,各自属于独立的“请求/响应”过程。






