Servlet 04: 什么是重定向

以RegisterServlet.java为例:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    int age = Integer.parseInt(request.getParameter("age"));
    String gender = request.getParameter("gender");

    gender = new String(gender.getBytes("iso-8859-1"), "utf-8");

    boolean isSuccess = DBUtil.addUser(username, password, age, gender);
    if(isSuccess){
      request.setAttribute("message","你注册成功了,请登录!");

      // 请求转发 (至login.jsp)
      // request.getRequestDispatcher("login.jsp").forward(request,response);

      // 重定向 (也可以跳转至login.jsp页面)

      response.sendRedirect("login.jsp");
    }else{
      request.setAttribute("message","很遗憾, 由于用户名重复, 注册失败了, 请你重新注册!");
      request.getRequestDispatcher("register.jsp").forward(request,response);
    }
}

 

效果:

 

 

 

 

重定向和转发的区别:

<1>  首先, 界面上没有提示信息 (注册成功,请登录!)

<2>  其次, URL发生了变化 (login.jsp vs. register_do)

图解

 

 在重定向中, 不能通过request对象来传递数据。

 

类比

  类似于打10086, 请求转发类似于转接服务

  而重定向相当于打了10086后, 又打了12315

 

posted @ 2020-08-13 20:20  Jasper2003  阅读(139)  评论(0编辑  收藏  举报