jsp Cannot forward after response has been committed问题,
String username = request.getParameter("username");
String password = request.getParameter("password");
String confirmPassword = request.getParameter("confirmPassword");
String sql = "select username,password from users ";
QueryRunner qr = DbHelper.getQueryRunner();//工具类,数据库肯定没问题
List list = null;
User user = null;//bean类
try {
list = (List) qr.query(sql,new BeanListHandler(User.class));
} catch (Exception e) {
e.printStackTrace();
}
if (password.equals(confirmPassword)) {
for (int i = 0; i < list.size(); i++) {
user = (User) list.get(i);
if (user.getUsername().equals(username)) {
request.setAttribute("message","用户名已经被注册!");
request.getRequestDispatcher("/admin/login.jsp").forward(
request,response);
}else {
sql = "insert into users(username,password) values(?,)";
String params[] = { username,password };
qr = DbHelper.getQueryRunner();
try {
qr.update(sql,params);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("message","注册成功!");
request.getRequestDispatcher("/admin/login.jsp").forward(request,
response);
}
}
}
else {
request.setAttribute("message","两次密码不一样,请重新输入");
request.getRequestDispatcher("/admin/reg.jsp").forward(request,
response);
}
人气:182 ℃ 时间:2019-12-29 15:15:30
解答
/**
1.对于转发,只能转发一次,否则抛出异常.
2.你的判断重名的逻辑有问题,你的逻辑是与list里面所有名字比较,只要不相同就入库并转发.
这将导致入库很多次,转发了很多次.而转发多次将抛出异常
正确的逻辑是应该先遍历完list,才能确定是否用户重名,最后转发一次.
3.判断逻辑有问题,应该先遍历完list,才能确定是否用户重名,一旦重名转发,并return结束
**/
//下面的代码是我修改的部分.
if (password.equals(confirmPassword)) {
for (int i = 0; i < list.size(); i++) {
user = (User) list.get(i);
if (user.getUsername().equals(username)) {
request.setAttribute("message","用户名已经被注册!");
request.getRequestDispatcher("/admin/login.jsp").forward(
request,response);
return;//必须判断完整个list列表才能确定是否重名.
}
}
sql = "insert into users(username,password) values(?,)";
String params[] = { username,password };
qr = DbHelper.getQueryRunner();
try {
qr.update(sql,params);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("message","注册成功!");
request.getRequestDispatcher("/admin/login.jsp").forward(request,
response);
}
else {
request.setAttribute("message","两次密码不一样,请重新输入");
request.getRequestDispatcher("/admin/reg.jsp").forward(request,
response);
}
}
推荐
- 1 APEC has a ___-layer organisational structure.
- -6倍根号7*三分之一倍根号21除以二倍根号3和(四倍根号6-三倍根号2)除以二倍根号2
- 已知等比数列1,X1,X2,···X2n,2,求X1×X2×···×X2n
- 线段a,b,c的长都是整数,且a≤b≤c,如果b=4,那么以a,b,c为边可组成几个不同形状的三角形?分别列出它们的边长,其中有几个等腰三角形?
- 工人全部走了,陈师傅在车间检修机器.修改病句
- 一个三角形公园变长分别是498米 612米 528米计划在公园边上每个若干米植一棵树并且两棵树之间的
- 已知角A=2角B,角A的补角等于角A与角B的和,则角A多少度?角B多少度?
- 在一个从里面量长.宽.高分别是5分米,3分米,4分米的长方体玻璃鱼缸内倒入45立方分米的水,水面距缸口还
猜你喜欢