逻辑很简单,用一个if语句判断,前面的register.jsp是可以转到的,但后面的registerSuccess.jsp看不到,浏览器里一片空白。insert语句可以执行,数据库中也有显示,但为什么看不到这个应该显示registerSuccess.jsp内容的Servlet呢试着把registerSuccess.jsp和register.jsp掉换了一下,现在能看到registerSuccess.jsp,又看不到register.jsp了,也就是说只能重定向到前一个页面,奇怪!查了很多资料也没弄明白。
if (rs.next()) {
// 如果记录集为非空,表明有相匹配的用户名,注册失败:
result = "已经存在相同的用户名,请更换一个新用户名";
request.setAttribute("result", result);
request.setAttribute("user", user);
try {
request.getRequestDispatcher("/register.jsp").forward(
request, response);
} catch (Throwable t) {
getServletContext().log(t.getMessage());
}
} else {
// 否则(记录集为空),表明不存在该用户:
// sql语句:
sql = "insert into userinfo(UserName,UserPwd,RealName,"
+ "gender,telnumber,email,homepage) values('"
+ strUserName + "','" + strPassword + "','"
+ strRealName + "','" + intGender + "','" + strTel
+ "','" + strEmail + "','" + strHomePage + "')";
// 执行sql语句:
stmt.executeUpdate(sql);
request.setAttribute("user",user);
try {
request.getRequestDispatcher("/registerSuccess.jsp").forward(
request, response);
} catch (Throwable t) {
getServletContext().log(t.getMessage());
}
}

解决方案 »

  1.   

    楼主试试Response.Redirect (URL)
      

  2.   

    我建议你这样写,定义一个全局变量target,这个变量就是你要转向的页面,然后在每个if..else..里修改这个target,最后用一句request.getRequestDispatcher(target).forward(
    request, response);就可以了,无必要在两个地方都写这个,如果你有N各地方需要判断,这句是不是要写N次呢?
      

  3.   

    可不可以使用session.setAttribute来代替request.setAttribute
    然后用response.sendRedirect代替request.getRequestDispatcher().forward()
    转到相应页面后,再从session中getAttribute()
      

  4.   

    试过了,不行。我把stmt.executeUpdate()下面的语句都注释掉,直接换上response.sendRedirect("/registerSuccess.jsp");还是不能重定向。
      

  5.   

    可以了,是往mysql传sql语句时转码出了问题,转码之后问题解决