深入浅出Java 重定向和请求转发的区别

来源:互联网 发布:淘宝专柜代购是真的吗 编辑:程序博客网 时间:2024/05/27 00:44

  接上文深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)

  ,聪明的你肯定会发现上篇文章的这个内容,见Servlet控制层代码:

  [java] view plaincopyprint?

在CODE上查看代码片
派生到我的代码片
import java.text.*;

  import java.util.*;

  import java.io.*;

  import javax.servlet.http.*;

  import javax.servlet.*;

  import com.bjpowernode.exam.model.*;

  import com.bjpowernode.exam.manager.*;

  public class SearchStudentServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  doPost(request, response);

  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  String sBeginDate = request.getParameter("beginDate");

  String sEndDate = request.getParameter("endDate");

  Date beginDate = new Date();

  Date endDate = new Date();

  try {

  beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);

  endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);

  }catch(Exception e) {

  e.printStackTrace();

  }

  StudentManager studentManager = new StudentManagerImpl();

  List studentList = studentManager.findStudentList(beginDate, endDate);

  //将学生列表设置到requet范围中

  //request.setAttribute("student_list", studentList);

  //转发,转发是在服务器端转发的,客户端是不知道的

  //request.getRequestDispatcher("/student_list.jsp").forward(request, response);

  //将studentList放到session中

  HttpSession session = request.getSession();

  session.setAttribute("student_list", studentList);

  //重定向,不会共享request

  //以下写法错误,该 "/"代表了8080端口

  //response.sendRedirect("/student_list.jsp");

  response.sendRedirect(request.getContextPath() + "/student_list.jsp");

  }

  }

  这个里面尝试了两种调到后面的Jsp方法,在servlet中调用转发、重定向的语句如下:

  实现转发:

  [html] view plaincopyprint?

在CODE上查看代码片
派生到我的代码片
//转发,转发是在服务器端转发的,客户端是不知道的

  request.getRequestDispatcher("/student_list.jsp").forward(request, response);

  分析:请求转发是服务器内部把对一个request/response的处理权,移交给另外一个对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

0 0