JavaWeb数据库应用MVC开发模式(二)
前文介绍了学生用户模块的查询功能,通过创建一个JavaBean类Stu,一个数据库访问类StuDao及其成员函数find All(),实现从数据库查询所有注册用户信息,并以Stu列表对象的方式返回结果,最后由servlet发送给manage.jsp页面进行展示,详细代码见前一篇文章。
学生用户模块-用户注册
1.总体思路
(1)要完成学生用户注册模块,首先,需要参考前文在StuDao类中增加一个成员函数:
public ArrayList findByUsername(String username)
该函数根据用户名查询用户信息,并且可以用来在添加记录前验证是否有重名用户。具体代码可以参考上一篇文章的查询全部用户来实现。
(2)接下来,在StuDao类内在增加一个成员函数add(),完成向数据库添加Stu对象的操作。当servlet接收到注册页面register.jsp提交的用户注册请求时,将提取出用户名、口令等注册信息,并首先调用findByusername()方法查询数据库是否有同名用户,若没有则调用add()函数添加记录。
2.模型层
在StuDao类内在增加成员函数add(),返回值为整型,0为添加失败,大于0为成功。
public int add(Stu stu){
int rows=0;
java.sql.Connection conn=null;
java.sql.PreparedStatement pre=null;
try{
conn=DBUtil.getConnection();
String sql="insert into stu(username,password,regip,regtime) values(?,?,?,NOW())";
pre=conn.prepareStatement(sql);
pre.setString(1, stu.getUsername());
pre.setString(2, stu.getPassword());
pre.setString(3, stu.getRegip());
rows=pre.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(pre!=null)
pre.close();
if(conn!=null)
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
return rows;
}
3.控制层
控制层采用servlet来实现,首先接收用户注册请求,并且封装成JavaBean对象stu,然后调用findByUsername(),查询是否有同名用户,若返回结果列表为空,则可以调用add()方法添加记录,成功后跳转到登录页,否则跳转回注册页。doget()方法主要代码如下:
String webroot=request.getContextPath();
StuDao studao=new StuDao();
Stu stu=new Stu();
String username=request.getParameter("username");
String password=request.getParameter("password");
stu.setUsername(username);
stu.setPassword(password);
stu.setRegip("127.0.0.1");
ArrayList<Stu> stuold=studao.findByUsername(username);
if(stuold.isEmpty()){
int rows=studao.add(stu);
if(rows!=0)
response.sendRedirect(webroot+"/index.jsp");
else
response.sendRedirect(webroot+"/register.jsp");
}else
response.sendRedirect(webroot+"/register.jsp");
4.视图层
视图层register.jsp页面,采用HTML注册表单,包含两个文本输入元素,name分别为username和password(与servlet中获取的参数名一致)。