基于jsp+servlet图书管理系统之后台用户信息修改操作
2017-01-09 15:40
1056 查看
上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库!
此次修改操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732691
为了方便理解和说明,先写一下执行的流程和步奏,详细代码可以下载连接。
1:修改操作的执行流程:
1.1:修改操作需要先获取到用户信息的编号,然后才可以进行修改,脑子里一定有这个思路。故获取用户编号的操作即为查询操作。这里使用了一个小工具进行分页操作,感兴趣的可以下载源码查看,当作练手使用也是灰常不错的选择。
<d:column href="system/userinfoupdate" value="修改" title="修改"
paramId="userId" paramProperty="userId">
</d:column>
<!-- 这里提交到的是相对应的servlet的doSet方法里面 -->
1.2:点击修改提交到[b]system/userinfoupdate这个路径的servlet层。然后到了后台调用service业务逻辑层的getUser方法。
[/b]
UserInfoService service=new UserInfoServiceImpl();
//调用service业务逻辑层的getUser方法
UserInfo userInfo=service.getUser(user);
1.3:然后业务逻辑层调用dao层(数据处理=层),return dao.getUser(user.getUserId());
1.4:dao层(数据处理层)执行和数据库的连接等等操作之后执行 return user;//返回用户的信息
1.5:service层执行return dao.getUser(user.getUserId());[b]返回到servlet层 [/b]
1.6:servlet层转发到 [b]userinfo_update.jsp更新操作的jsp页面[/b]
request.getRequestDispatcher("/view/system/userinfo/userinfo_update.jsp").forward(request, response);
1.7:在更新页面没修改好之后就可以提交到[b]system/userinfoupdate这个执行更新操作的servlet层的doPost方法。需要注意的是隐藏文本框是为了获取用户编号,一定要写,不然获取不到用户的编号,无法进行修改。[/b]
<form action="system/userinfoupdate" class="form-horizontal" method="post">
<input type="hidden" name="userId" value="${user.userId }"/>
</form>
1.8:执行到这个修改的[b]servlet层之后调用业务逻辑层的修改方法。[/b]
UserInfoService service=new UserInfoServiceImpl();
boolean mark=service.updateUser(user);
1.9:service业务逻辑层(修改,插入,伪删除都是使用提出来的工具类的方法),所以调用工具类里面的方法。
//添加和修改(伪删除)都可以调用工具类里面公共的方法。
int count=DbUtils.addAndUpdate(sql, list.toArray());
2.0:工具类里面的方法执行之后返回执行的结果。return ps.executeUpdate();
2.1:又返回到了service层,将执行的true或者false结果返回到servlet层。
//添加和修改(伪删除)都可以调用工具类里面公共的方法。
int count=DbUtils.addAndUpdate(sql, list.toArray());
if(count>0){
return true;
}else{
return false;
}
2.2:最后返回到了修改的servlet层
boolean mark=service.updateUser(user);
//判断最后返回值是否为true,如果为true,提示修改成功,否则提示修改失败
if(mark){
request.setAttribute("info", "用户信息修改成功");
}else{
request.setAttribute("info", "用户信息修改失败");
}
request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
2.3:判断上面的true或者false之后转发到[b]user_info.jsp这个页面,这个页面用来提示信息[/b]
2.4:提示信息之后又由js的window跳转到[b]system/userinfoselect这个路径的servlet层。[/b]
window.location="system/userinfoselect";
2.5: 跳转到这个servlet层之后转发到userinfo_list.jsp这个页面。显示出修改之后的结果。完成修改操作
request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);
至此修改操作基本完成;
下面将执行流程的重要代码写一下,希望对学习基于java开发的web方法的小伙伴有所帮助,也方便以后自行脑补。详细的代码可以去链接地址下载。 1
1:按照页面点击修改的流程进行写代码,方便理解。第一是找到页面点击修改。
2:点击修改之后就到了修改的servlet层的doSet方法
3:执行了上面的servlet层之后又到了service层(业务逻辑层)页面。
4:由于是查询操作,所以还需要写dao层(数据处理层),所以又执行到了dao层
5:执行到了dao层之后返回到service层(业务逻辑层),返回到service层之后servlet层,返回到servlet层之后又返回到userinfo_update.jsp页面。返回到这个页面开始修改,修改之后又提交到修改的servlet的doPost的这个方法。提交到servlet的方法之后又调用service层的修改的方法,修改的方法有调用工具类,由于代码都贴过了,这里介绍了一下执行流程,大家有个思路,这种小项目下去练练手就行了。
最后到了user_info.jsp提示信息的页面,又由js的window转到了userinfo_list.jsp页面。最后修改完成。
由于代码过多,这里强调的是执行流程,详细的代码设计可以下载源码和数据库自行脑补。
下面简单看看执行的效果。(想想一个修改,执行起来。还TMD搞真复杂,哎,码农不容易啊!)
用户管理界面的信息:
点击修改之后的页面:[b]需要注意的是账号设置为可读不可写,即不可修改。[/b]
保存用户之后对比显示用户信息已经修改完成了。
至此修改演示基本完毕,感兴趣的的可以下载源码看看。
此次修改操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732691
为了方便理解和说明,先写一下执行的流程和步奏,详细代码可以下载连接。
1:修改操作的执行流程:
1.1:修改操作需要先获取到用户信息的编号,然后才可以进行修改,脑子里一定有这个思路。故获取用户编号的操作即为查询操作。这里使用了一个小工具进行分页操作,感兴趣的可以下载源码查看,当作练手使用也是灰常不错的选择。
<d:column href="system/userinfoupdate" value="修改" title="修改"
paramId="userId" paramProperty="userId">
</d:column>
<!-- 这里提交到的是相对应的servlet的doSet方法里面 -->
1.2:点击修改提交到[b]system/userinfoupdate这个路径的servlet层。然后到了后台调用service业务逻辑层的getUser方法。
[/b]
UserInfoService service=new UserInfoServiceImpl();
//调用service业务逻辑层的getUser方法
UserInfo userInfo=service.getUser(user);
1.3:然后业务逻辑层调用dao层(数据处理=层),return dao.getUser(user.getUserId());
1.4:dao层(数据处理层)执行和数据库的连接等等操作之后执行 return user;//返回用户的信息
1.5:service层执行return dao.getUser(user.getUserId());[b]返回到servlet层 [/b]
1.6:servlet层转发到 [b]userinfo_update.jsp更新操作的jsp页面[/b]
request.getRequestDispatcher("/view/system/userinfo/userinfo_update.jsp").forward(request, response);
1.7:在更新页面没修改好之后就可以提交到[b]system/userinfoupdate这个执行更新操作的servlet层的doPost方法。需要注意的是隐藏文本框是为了获取用户编号,一定要写,不然获取不到用户的编号,无法进行修改。[/b]
<form action="system/userinfoupdate" class="form-horizontal" method="post">
<input type="hidden" name="userId" value="${user.userId }"/>
</form>
1.8:执行到这个修改的[b]servlet层之后调用业务逻辑层的修改方法。[/b]
UserInfoService service=new UserInfoServiceImpl();
boolean mark=service.updateUser(user);
1.9:service业务逻辑层(修改,插入,伪删除都是使用提出来的工具类的方法),所以调用工具类里面的方法。
//添加和修改(伪删除)都可以调用工具类里面公共的方法。
int count=DbUtils.addAndUpdate(sql, list.toArray());
2.0:工具类里面的方法执行之后返回执行的结果。return ps.executeUpdate();
2.1:又返回到了service层,将执行的true或者false结果返回到servlet层。
//添加和修改(伪删除)都可以调用工具类里面公共的方法。
int count=DbUtils.addAndUpdate(sql, list.toArray());
if(count>0){
return true;
}else{
return false;
}
2.2:最后返回到了修改的servlet层
boolean mark=service.updateUser(user);
//判断最后返回值是否为true,如果为true,提示修改成功,否则提示修改失败
if(mark){
request.setAttribute("info", "用户信息修改成功");
}else{
request.setAttribute("info", "用户信息修改失败");
}
request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
2.3:判断上面的true或者false之后转发到[b]user_info.jsp这个页面,这个页面用来提示信息[/b]
2.4:提示信息之后又由js的window跳转到[b]system/userinfoselect这个路径的servlet层。[/b]
window.location="system/userinfoselect";
2.5: 跳转到这个servlet层之后转发到userinfo_list.jsp这个页面。显示出修改之后的结果。完成修改操作
request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);
至此修改操作基本完成;
下面将执行流程的重要代码写一下,希望对学习基于java开发的web方法的小伙伴有所帮助,也方便以后自行脑补。详细的代码可以去链接地址下载。 1
1:按照页面点击修改的流程进行写代码,方便理解。第一是找到页面点击修改。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //获取绝对路径路径 String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="d" uri="http://displaytag.sf.net"%> <!DOCTYPE html> <html> <head> <base href="<%=basePath %>" /> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>用户管理-用户查询</title> <link href="resource/css/bootstrap.min.css" rel="stylesheet" /> <script type="text/javascript" src="resource/js/jquery.min.js"></script> <script type="text/javascript" src="resource/js/bootstrap.min.js"></script> </head> <body> <div> <ul class="breadcrumb" style="margin: 0px;"> <li>系统管理</li> <li>用户管理</li> <li>用户查询</li> </ul> </div> <form action="system/userinfoselect" class="form-inline" method="post"> <div class="row alert alert-info" style="margin: 0px; padding: 5px;"> <div class="form-group"> <label>账号:</label> <input type="text" name="userAccount" value="${user.userAccount }" class="form-control" placeholder="请输入查询账号" /> <label>姓名:</label> <input type="text" name="userName" value="${user.userName }" class="form-control" placeholder="请输入查询姓名" /> <select class="form-control" name="userMark"> <option value="">全部</option> <option value="0" ${user.userMark=='0'?'selected':'' }>普通会员</option> <option value="1" ${user.userMark=='1'?'selected':'' }>管理员</option> </select> </div> <input type="submit" class="btn btn-danger" value="查询"> <a href="view/system/userinfo/userinfo_add.jsp" class="btn btn-success">添加用户</a> </div> <div class="row" style="padding: 15px;"> <d:table name="list" pagesize="5" requestURI="system/userinfoselect" class="table table-hover table-condensed"> <d:column property="userId" title="用户编号"></d:column> <d:column property="userAccount" title="用户账号"></d:column> <d:column property="userPw" title="用户密码"></d:column> <d:column property="userNumber" title="用户学号"></d:column> <d:column property="userName" title="用户姓名"></d:column> <d:column property="userAge" title="用户年龄"></d:column> <d:column property="userSex" title="用户性别"></d:column> <d:column property="userMark" title="用户标识"></d:column> <d:column href="system/userinfoupdate" value="修改" title="修改" paramId="userId" paramProperty="userId"></d:column> <!-- 这里提交到的是相对应的servlet的doSet方法里面 --> </d:table> </div> </form> </body> </html>
2:点击修改之后就到了修改的servlet层的doSet方法
package com.bie.system.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.bie.po.UserInfo; import com.bie.system.service.UserInfoService; import com.bie.system.service.impl.UserInfoServiceImpl; import com.my.web.servlet.RequestBeanUtils; @WebServlet("/system/userinfoupdate") public class UserInfoUpdateServlety extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将从表单中获取的数据封装到javabean的用户信息实体类中 UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class); UserInfoService service=new UserInfoServiceImpl(); //调用service业务逻辑层的getUser方法 UserInfo userInfo=service.getUser(user); //将返回的用户信息设置域中 request.setAttribute("user", userInfo); //转发到更新用户信息的页面 request.getRequestDispatcher("/view/system/userinfo/userinfo_update.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将表单提交的数据封装到javabean中的实体类中 UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class); //调用业务逻辑层的更新的方法 UserInfoService service=new UserInfoServiceImpl(); boolean mark=service.updateUser(user); //判断最后返回值是否为true,如果为true,提示修改成功,否则提示修改失败 if(mark){ request.setAttribute("info", "用户信息修改成功"); }else{ request.setAttribute("info", "用户信息修改失败"); } request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response); } }
3:执行了上面的servlet层之后又到了service层(业务逻辑层)页面。
package com.bie.system.service.impl; import java.util.ArrayList; import java.util.List; import com.bie.po.UserInfo; import com.bie.system.dao.UserInfoDao; import com.bie.system.dao.impl.UserInfoDaoImpl; import com.bie.system.service.UserInfoService; import com.bie.utils.DbUtils; import com.bie.utils.MarkUtils; /*** * 1.4:这是业务逻辑层的实现类,实现用户信息的接口 * * 切忌新手写好service业务逻辑层需要test测试(junit) * @author biehongli * */ public class UserInfoServiceImpl implements UserInfoService{ private UserInfoDao dao=new UserInfoDaoImpl(); @Override public boolean insertUser(UserInfo user) { try{ //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息 if(user!=null && user.getUserAccount()!=null){ String sql="INSERT INTO user_info(user_account,user_pw," + "user_number,user_name,user_age,user_sex,user_mark)" + " VALUES(?,?,?,?,?,?,?)"; List<Object> list=new ArrayList<Object>(); //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中 list.add(user.getUserPw());//将设置好的账号信息保存到集合中 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中 list.add(user.getUserName());//将设置好的姓名信息保存到集合中 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中 list.add(user.getUserSex());//将设置好的性别信息保存到集合中 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中 //后台只可以添加管理员 user.setUserMark(MarkUtils.USER_MARK_MANAGER); //将设置为默认的管理员添加到数据库 list.add(user.getUserMark()); //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中 //这里sql转化位String语句,list转化位数组类型 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray()); //System.out.println(count);//测试返回值是0还是1 if(count>0){ return true;//成功返回true }else{ return false;//失败返回false } } }catch(Exception e){ e.printStackTrace(); } return false; } @Override public List<UserInfo> selectUser(UserInfo user) { //使用StringBuffer进行字符串的拼接,不使用String //StringBuffer sql=new StringBuffer("select * from user_info where 1=1 "); StringBuffer sql=new StringBuffer("select * from user_info where 1=1 "); //设置集合,用户存放用户信息设置值的时候使用 List<Object> list=null; //判断用户的信息不为空的时候 if(user!=null){ list=new ArrayList<Object>(); //按照账号查询,如果账号不为null且不为空 if(user.getUserAccount()!=null && !user.getUserAccount().equals("")){ sql.append(" and user_account=?"); list.add(user.getUserAccount()); } //按照姓名查询,如果姓名不为null且不为空 if(user.getUserName()!=null && !user.getUserName().equals("")){ sql.append(" and user_name like ?"); //模糊查询这样拼接字符串 list.add("%"+user.getUserName()+"%"); } //按照标识查询,如果标识不为null且不为空 if(user.getUserMark()!=null && !user.getUserMark().equals("")){ sql.append(" and user_mark=?"); list.add(user.getUserMark()); } } sql.append(" order by user_id desc"); //返回的参数,sql语句是字符类型,集合转化为数组类型 return dao.selectUser(sql.toString(), list.toArray()); } @Override public boolean updateUser(UserInfo user) { try{ if(user!=null && user.getUserId()!=null){ //更新的sql语句 String sql="UPDATE user_info SET user_account=?," + "user_pw=?,user_number=?,user_name=?," + "user_age=?,user_sex=? WHERE user_id=?"; List<Object> list=new ArrayList<Object>(); //添加到集合中的顺序必须和上面些的字段一致,不然报错 list.add(user.getUserAccount()); list.add(user.getUserPw()); list.add(user.getUserNumber()); list.add(user.getUserName()); list.add(user.getUserAge()); list.add(user.getUserSex()); list.add(user.getUserId()); //添加和修改(伪删除)都可以调用工具类里面公共的方法。 int count=DbUtils.addAndUpdate(sql, list.toArray()); if(count>0){ return true; }else{ return false; } } }catch(Exception e){ e.printStackTrace(); } return false; } @Override public UserInfo getUser(UserInfo user) { //判断用户信息和id编号是否为空 if(user!=null && user.getUserId()!=null){ return dao.getUser(user.getUserId()); } return null; } }
4:由于是查询操作,所以还需要写dao层(数据处理层),所以又执行到了dao层
package com.bie.system.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.bie.po.UserInfo; import com.bie.system.dao.UserInfoDao; import com.bie.utils.DbUtils; /*** * 2.2:实现查询的接口 * @author biehongli * */ public class UserInfoDaoImpl implements UserInfoDao{ @Override public List<UserInfo> selectUser(String sql, Object[] arr) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; List<UserInfo> list=null; try{ con=DbUtils.getCon();//连接数据库 ps=con.prepareStatement(sql);//预编译 //为查询条件设置值,如为第一个设置为什么,为第二个设置为什么 if(arr!=null && arr.length>0){ for(int i=0;i<arr.length;i++){ ps.setObject(i+1, arr[i]); } } //执行sql语句 rs=ps.executeQuery(); list=new ArrayList<UserInfo>(); //根据查询条件,从数据库匹配适合的条件,然后设置这个条件的全部信息 while(rs.next()){ UserInfo user=new UserInfo(); user.setUserId(rs.getInt("user_id")); user.setUserAccount(rs.getString("user_account")); user.setUserPw(rs.getString("user_pw")); user.setUserNumber(rs.getString("user_number")); user.setUserName(rs.getString("user_name")); user.setUserAge(rs.getInt("user_age")); user.setUserSex(rs.getString("user_sex")); //user.setUserMark(rs.getString("user_mark")); //根据判断看是否是管理员或者普通会员 if("0".equals(rs.getString("user_mark"))){ user.setUserMark("普通会员"); } if("1".equals(rs.getString("user_mark"))){ user.setUserMark("管理员"); } //将user对象封装到集合中 list.add(user); } //将封装到集合中的查询条件返回 return list; }catch(Exception e){ e.printStackTrace(); }finally{ //关闭资源,避免出现问题 DbUtils.getClose(con, ps, rs); } return null; } @Override public UserInfo getUser(Integer userId) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; try{ String sql="select * from user_info where user_id=?"; con=DbUtils.getCon();//连接数据库 ps=con.prepareStatement(sql);//预编译 ps.setInt(1, userId);//给参数设置值 rs=ps.executeQuery();//执行sql语句 while(rs.next()){ UserInfo user=new UserInfo(); user.setUserId(rs.getInt("user_id")); user.setUserAccount(rs.getString("user_account")); user.setUserPw(rs.getString("user_pw")); user.setUserNumber(rs.getString("user_number")); user.setUserName(rs.getString("user_name")); user.setUserAge(rs.getInt("user_age")); user.setUserSex(rs.getString("user_sex")); if("0".equals(rs.getString("user_mark"))){ user.setUserMark("普通会员"); } if("1".equals(rs.getString("user_mark"))){ user.setUserMark("管理员"); } return user;//返回用户的信息 } }catch(Exception e){ e.printStackTrace(); }finally{ //关闭资源,避免出现异常 DbUtils.getClose(con, ps, rs); } return null; } }
5:执行到了dao层之后返回到service层(业务逻辑层),返回到service层之后servlet层,返回到servlet层之后又返回到userinfo_update.jsp页面。返回到这个页面开始修改,修改之后又提交到修改的servlet的doPost的这个方法。提交到servlet的方法之后又调用service层的修改的方法,修改的方法有调用工具类,由于代码都贴过了,这里介绍了一下执行流程,大家有个思路,这种小项目下去练练手就行了。
最后到了user_info.jsp提示信息的页面,又由js的window转到了userinfo_list.jsp页面。最后修改完成。
由于代码过多,这里强调的是执行流程,详细的代码设计可以下载源码和数据库自行脑补。
下面简单看看执行的效果。(想想一个修改,执行起来。还TMD搞真复杂,哎,码农不容易啊!)
用户管理界面的信息:
点击修改之后的页面:[b]需要注意的是账号设置为可读不可写,即不可修改。[/b]
保存用户之后对比显示用户信息已经修改完成了。
至此修改演示基本完毕,感兴趣的的可以下载源码看看。
相关文章推荐
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
- 基于jsp+servlet图书管理系统之后台用户信息插入操作
- 基于jsp+servlet图书管理系统之后台用户信息查询操作
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
- JSP+Servlet培训班作业管理系统[4]-记录登录用户信息
- JSP+Servlet培训班作业管理系统[13] -使用基于Action的后端(用户登录为例)
- 分析基于Jsp+Servlet+JavaBean的个人信息管理系统的运行流程
- 图书管理系统之用户信息--用户信息修改,查看订单详情等功能
- 基于MVC,实现简单的书籍信息管理,其中,模型 (M) 采用一般的JavaBean、视图 (V)采用JSP、控制 (C) 采用Servlet实现。另外,对于视图部分的JSP中,需要提供两种版本,即一般
- java web学生信息管理系统的实现及源码(jsp servlet)
- 图书管理系统基于servlet+mysql+jdbc+html
- 基于VC++6.0系统设计一个小型的信息管理应用程序。如航空订票系统、学生管理系统、图书管理系统,学生自选的项目等。
- 图书管理系统之过滤器--处理用户信息的过滤和订单数据的处理
- 基于JSP的教师论文信息管理系统(2)
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- 基于JAVA的图书管理系统(jsp+mysql+tomcat)
- JSP+Servlet培训班作业管理系统[2]-后台管理页面
- java web学生信息管理系统的实现及源码(jsp servlet)
- 简易图书管理系统(主要是jsp+servlet的练习)
- 基于JSP的教师论文信息管理系统(1)