以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