用jsp+javabean+sevlet实现注册遇到问题
我在做注册页面时,如果不考虑客户端的判断,用sevlet来判断,但是不管用户密码和验证码正不正确都写入数据库,我那可能是我的servlet有问题,但我知道怎么改,最好不要把他们全部放在if……else语句里,那样看起来很不爽。
servlet源代码:
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import userInfo.User;
import userInfo.DB_User;
import md5.MD5_Encoding;
/*
* 注册处理页面
*/
public class RegProcessServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet{
/**
*
*/
private static final long serialVersionUID = 5415533408782200877L;
//构造函数
public RegProcessServlet(){
super();
}
//服务器端的验证,提交处理
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
response.setContentType( "text/html;cahrset=gb2312 ");
//String selectedScreen =request.getServletPath();
//创建MD5加密类
MD5_Encoding md5=new MD5_Encoding();
String errorMsg= " ";
//必须编写的项目
String username=request.getParameter( "username ");
String pwd=request.getParameter( "pwd ");
String enpwd=md5.getMD5ofStr(pwd);
String confpwd=request.getParameter( "confpwd ");
String email=request.getParameter( "email ");
//判断两次输入的密码是否一致
if(!pwd.equals(confpwd)){
errorMsg= "密码不一致 ";
request.setAttribute( "errorMsg ", errorMsg);
try{
//转发至注册错误页面
request.getRequestDispatcher( "./reg_failure.jsp ").forward(request, response);
}
catch(Throwable t){
//写异常日志
getServletContext().log(t.getMessage());
}
}
//验证验证码输入的正确性
String random=request.getParameter( "random ");
String realrand=request.getSession().getAttribute( "random ").toString();
if(!random.equals(realrand)){
errorMsg= "验证码不正确! ";
request.setAttribute( "errorMsg ", errorMsg);
try{
//转发至注册错误页面
request.getRequestDispatcher( "./reg_failure.jsp ").forward(request, response);
}
catch(Throwable t){
//写异常日志
getServletContext().log(t.getMessage());
}
}
//非必须填写的项目
String realname=request.getParameter( "realname ");
String gender=request.getParameter( "gender ");
String phone=request.getParameter( "phone ");
String question=request.getParameter( "question ");
String answer=request.getParameter( "answer ");
String page=request.getParameter( "mypage ");
String[] temp=request.getParameterValues( "hobbies ");
String hobby= " ";
//处理个人兴趣爱好
if(temp!=null){
for(int i=0;i <temp.length;i++){
hobby +=temp[i];
}
}
String selfintro =request.getParameter( "selfintro ");
try{
//创建一个用户表数据库读写类
DB_User userdb=new DB_User();
User user=userdb.get(username);
if(user != null){
//如果记录集为非空,表明有相匹配的用户名,注册失败
errorMsg= "已经存在相同的用户名,请更换一个新用户名 ";
request.setAttribute( "errorMsg ", errorMsg);
try{
//转发至注册错误页面
request.getSession(true).setAttribute( "username ", username);
request.getRequestDispatcher( "./reg_failure.jsp ").forward(request,response);
}
catch(Throwable t){
getServletContext().log(t.getMessage());
}
}
else{
user=new User();
user.setUsername(username);
user.setPassword(enpwd);
user.setEmail(email);
user.setRealname(realname);
user.setGender(Integer.parseInt(gender)); //test
user.setQuestion(question);
user.setAnswer(answer);
user.setPage(page);
user.setPhone(phone);
user.setHobbies(hobby);
user.setSelfintro(selfintro);
//写入用户信息到数据库
int i=userdb.add(user);
//注册成功
request.setAttribute( "user ",user);
//String screen=selectedScreen+ ".jsp ";
try{
//转发至注册成功页面
request.getSession(true).setAttribute( "username ", username);
request.getRequestDispatcher( "./reg_success.jsp ").forward(request, response);
}
catch(Throwable t){
//写异常日志
getServletContext().log(t.getMessage());
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
其他代码也不用发了,只是我就不明白怎么跳转了(request.getRequestDispatcher( "./reg_failure.jsp ").forward(request, response);),这个servlet程序代码还是要往下执行
[解决办法]
request.getSession(true).setAttribute( "username ", username);
request.getRequestDispatcher( "./reg_failure.jsp ").forward(request,response);
}
语句下面加个 return;
request.getSession(true).setAttribute( "username ", username);
request.getRequestDispatcher( "./reg_failure.jsp ").forward(request,response);
return;
}
[解决办法]
这样服务器负载太大了 建议用javascript先做必要判断在传到服务器
[解决办法]
在servlet里放过多业务逻辑看上去是很不爽,那就放到javabean里去啊!
[解决办法]
magus163(菜鸟怎么赚分?)
虽然看得很不爽,但也不能写在javabean里的,三层模式...
楼主这边没看出什么错误,你可以把从页面上得到的数据打印出来.看看是不是符合要求?