基于jsp+servlet图书管理系统之后台用户信息查询操作
Posted --->别先生<---
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于jsp+servlet图书管理系统之后台用户信息查询操作相关的知识,希望对你有一定的参考价值。
简易图书管理系统(主要是jsp+servlet的练习):https://blog.csdn.net/Biexiansheng/article/details/70240413
免费提供源码,有偿提供服务,支持项目定制。
为了方便理解和说明,这里简单介绍一些执行的流程,方便理解。插入操作的执行流程和说明:
1:插入操作的执行流程如下
1.1:首先登录页面,设置默认的打开页面是login.jsp。
<!-- 默认模仿的是登录界面login.jsp页面 -->
<welcome-file>login.jsp</welcome-file>
1.2:点击后台登录,根据action到index.jsp页面。
<form action="view/system/main/index.jsp" method="post" onsubmit="return check()"></form>
1.3:点击用户管理,这里href的地址已经由到.jsp修改为servlet3.0的注解url。因为点击用户管理之后就需要从数据库查询出来用户信息
<a href="system/userinfoselect" target="mainframe">
<i class="icon-double-angle-right"></i> 用户管理
</a>
1.4:点击添加用户,就到了userinfo_add.jsp这个页面。这里全部使用绝对路径,避免出错。
<a href="view/system/userinfo/userinfo_add.jsp" class="btn btn-success">添加用户</a>
1.5:当填好页面的信息的时候,提交到这个路径system/userinfoinsert的servlet3.0的后台处理。
<form action="system/userinfoinsert" class="form-horizontal" method="post"></form>
1.6:RequestBeanUtils这个是使用了这个工具,可以省去写很多request.getParameter()的代码,需要注意的是表单name属性和实体类必须一致,且需要导包,上面的连接有代码和详细注释说明,然后就是调用service层的业务逻辑层。调用insertUser方法。
UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
UserInfoService service=new UserInfoServiceImpl();
boolean mark=service.insertUser(user);
1.7:因为添加和修改可以提出公共的方法,作为工具类,所以这里直接调用工具类,省去了dao层()数据处理层。
int count=DbUtils.addAndUpdate(sql.toString(), list.toArray());
1.8:公共类DbUtils类addAndUpdate()返回返回整形执行的条数。
return ps.executeUpdate();
1.9:service业务逻辑层UserInfoServiceImpl类的 insertUser()方法返回布尔类型true或者false;
2.0: servlet层返回的用户插入成功或者失败, 转发到user_info.jsp这个页面。
boolean mark=service.insertUser(user);
//返回提示信息到页面
if(mark){
request.setAttribute("info", "用户信息添加成功!!!");
}else{
request.setAttribute("info", "用户信息添加失败!!!");
}
//转发到页面(重定向)user_info.jsp提示信息,成功或者失败
request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
2.1:最后转发到user_info.jsp这个页面之后又由js的window转到userinfo_list.jsp这个显示用户信息的页面。
window.location="view/system/userinfo/userinfo_list.jsp";
至此插入操作执行完毕
上面的插入操作的执行流程对应上一篇博客的插入操作。
由于代码的不断增加和修改,这里只写改变的页面和重要的代码,但是详细的代码和注释在上面的连接,里面都包含了,所需的jar包里面也有。
1:查询操作的执行流程如下:
1.1:查询页面,选择好查询条件点击查询。跳转到system/userinfoselect这个路径的servlet3.0页面
<form action="system/userinfoselect" class="form-inline" method="post"></form>
1.2:这里是post提交,但是需要注意的是要写doSet()方法,然后this.doPost(request, response);到doPost页面
//将表单提交的数据封装到javabean的实体类中
UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
//调用service业务逻辑层的代码
UserInfoService service=new UserInfoServiceImpl();
//调用业务逻辑层的查询方法selectUser,将返回的集合接受
List<UserInfo> list=service.selectUser(user);
1.3:servlet3.0调用了service业务逻辑层的selectUser查询方法,之后service业务逻辑层的查询方法,返回到dao层
return dao.selectUser(sql.toString(), list.toArray());
1.4:dao层返回集合return list;返回到service业务逻辑层。
1.5:然后service业务逻辑层将集合返回到servlet层。然后servlet层
1.6:servlet3.0层转发到 userinfo_list.jsp这个页面,就将查询的结果显示在这个页面。
request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);
至此查询就查询成功了,当然这只是简答把流程介绍了一下,详细的可以看上面连接的完整代码。有时间将使用的一些小技术介绍一下。
查询操作由于提取公共的方法不是很方便,所以先从dao层开始写数据访问层:
1:查询操作的数据访问层dao层,需要注意的是这里dao层和service层都是先写接口,后写实现接口,由于接口就几个方法,所以这里省去。
1 package com.bie.system.dao.impl; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import com.bie.po.UserInfo; 10 import com.bie.system.dao.UserInfoDao; 11 import com.bie.utils.DbUtils; 12 13 /*** 14 * 2.2:实现查询的接口 15 * @author biehongli 16 * 17 */ 18 public class UserInfoDaoImpl implements UserInfoDao{ 19 20 @Override 21 public List<UserInfo> selectUser(String sql, Object[] arr) { 22 Connection con=null; 23 PreparedStatement ps=null; 24 ResultSet rs=null; 25 List<UserInfo> list=null; 26 try{ 27 con=DbUtils.getCon();//连接数据库 28 ps=con.prepareStatement(sql);//预编译 29 //为查询条件设置值,如为第一个设置为什么,为第二个设置为什么 30 if(arr!=null && arr.length>0){ 31 for(int i=0;i<arr.length;i++){ 32 ps.setObject(i+1, arr[i]); 33 } 34 } 35 //执行sql语句 36 rs=ps.executeQuery(); 37 list=new ArrayList<UserInfo>(); 38 //根据查询条件,从数据库匹配适合的条件,然后设置这个条件的全部信息 39 while(rs.next()){ 40 UserInfo user=new UserInfo(); 41 user.setUserId(rs.getInt("user_id")); 42 user.setUserAccount(rs.getString("user_account")); 43 user.setUserPw(rs.getString("user_pw")); 44 user.setUserNumber(rs.getString("user_number")); 45 user.setUserName(rs.getString("user_name")); 46 user.setUserAge(rs.getInt("user_age")); 47 user.setUserSex(rs.getString("user_sex")); 48 //user.setUserMark(rs.getString("user_mark")); 49 //根据判断看是否是管理员或者普通会员 50 if("0".equals(rs.getString("user_mark"))){ 51 user.setUserMark("普通会员"); 52 } 53 if("1".equals(rs.getString("user_mark"))){ 54 user.setUserMark("管理员"); 55 } 56 //将user对象封装到集合中 57 list.add(user); 58 } 59 //将封装到集合中的查询条件返回 60 return list; 61 }catch(Exception e){ 62 e.printStackTrace(); 63 }finally{ 64 //关闭资源,避免出现问题 65 DbUtils.getClose(con, ps, rs); 66 } 67 return null; 68 } 69 70 71 }
2:查询操作的service业务逻辑层,这个是在插入操作的基础上加了一个查询方法。
1 package com.bie.system.service.impl; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.bie.po.UserInfo; 7 import com.bie.system.dao.UserInfoDao; 8 import com.bie.system.dao.impl.UserInfoDaoImpl; 9 import com.bie.system.service.UserInfoService; 10 import com.bie.utils.DbUtils; 11 import com.bie.utils.MarkUtils; 12 /*** 13 * 1.4:这是业务逻辑层的实现类,实现用户信息的接口 14 * 15 * 切忌新手写好service业务逻辑层需要test测试(junit) 16 * @author biehongli 17 * 18 */ 19 public class UserInfoServiceImpl implements UserInfoService{ 20 21 private UserInfoDao dao=new UserInfoDaoImpl(); 22 @Override 23 public boolean insertUser(UserInfo user) { 24 try{ 25 //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息 26 if(user!=null && user.getUserAccount()!=null){ 27 String sql="INSERT INTO user_info(user_account,user_pw," 28 + "user_number,user_name,user_age,user_sex,user_mark)" 29 + " VALUES(?,?,?,?,?,?,?)"; 30 List<Object> list=new ArrayList<Object>(); 31 //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中 32 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中 33 list.add(user.getUserPw());//将设置好的账号信息保存到集合中 34 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中 35 list.add(user.getUserName());//将设置好的姓名信息保存到集合中 36 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中 37 list.add(user.getUserSex());//将设置好的性别信息保存到集合中 38 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中 39 //后台只可以添加管理员 40 user.setUserMark(MarkUtils.USER_MARK_MANAGER); 41 //将设置为默认的管理员添加到数据库 42 list.add(user.getUserMark()); 43 44 //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中 45 //这里sql转化位String语句,list转化位数组类型 46 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray()); 47 //System.out.println(count);//测试返回值是0还是1 48 if(count>0){ 49 return true;//成功返回true 50 }else{ 51 return false;//失败返回false 52 } 53 } 54 }catch(Exception e){ 55 e.printStackTrace(); 56 } 57 return false; 58 } 59 60 @Override 61 public List<UserInfo> selectUser(UserInfo user) { 62 //使用StringBuffer进行字符串的拼接,不使用String 63 //StringBuffer sql=new StringBuffer("select * from user_info where 1=1 "); 64 StringBuffer sql=new StringBuffer("select * from user_info where 1=1 "); 65 //设置集合,用户存放用户信息设置值的时候使用 66 List<Object> list=null; 67 //判断用户的信息不为空的时候 68 if(user!=null){ 69 list=new ArrayList<Object>(); 70 //按照账号查询,如果账号不为null且不为空 71 if(user.getUserAccount()!=null && !user.getUserAccount().equals("")){ 72 sql.append(" and user_account=?"); 73 list.add(user.getUserAccount()); 74 } 75 //按照姓名查询,如果姓名不为null且不为空 76 if(user.getUserName()!=null && !user.getUserName().equals("")){ 77 sql.append(" and user_name like ?"); 78 //模糊查询这样拼接字符串 79 list.add("%"+user.getUserName()+"%"); 80 } 81 //按照标识查询,如果标识不为null且不为空 82 if(user.getUserMark()!=null && !user.getUserMark().equals("")){ 83 sql.append(" and user_mark=?"); 84 list.add(user.getUserMark()); 85 } 86 } 87 88 sql.append(" order by user_id desc"); 89 //返回的参数,sql语句是字符类型,集合转化为数组类型 90 return dao.selectUser(sql.toString(), list.toArray()); 91 } 92 93 94 }
3:查询操作的servlet层
1 package com.bie.system.servlet; 2 3 import java.io.IOException; 4 import java.util.List; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import com.bie.po.UserInfo; 13 import com.bie.system.service.UserInfoService; 14 import com.bie.system.service.impl.UserInfoServiceImpl; 15 import com.my.web.servlet.RequestBeanUtils; 16 /*** 17 * 2.3:点击用户管理,先调转到这个servlet,查询出数据库的信息,并且显示在页面上面 18 * @author biehongli 19 * 20 */ 21 @WebServlet("/system/userinfoselect") 22 public class UserInfoSelectServlet extends HttpServlet{ 23 24 private static final long serialVersionUID = 1L; 25 26 @Override 27 protected void doGet(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 this.doPost(request, response); 30 } 31 32 @Override 33 protected void doPost(HttpServletRequest request, HttpServletResponse response) 34 throws ServletException, IOException { 35 //将表单提交的数据封装到javabean的实体类中 36 UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class); 37 //调用service业务逻辑层的代码 38 UserInfoService service=new UserInfoServiceImpl(); 39 //调用业务逻辑层的查询方法selectUser,将返回的集合接受 40 List<UserInfo> list=service.selectUser(user); 41 //将上面的集合和user对象设置在域中,方便userinfo_list.jsp调用 42 request.setAttribute("list", list); 43 request.setAttribute("user", user); 44 //将转发到userinfo_list.jsp这个页面 45 request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response); 46 } 47 48 49 }
4:开始写了后台处理,现在写前台页面的代码和详细实现。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 //获取绝对路径路径 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" 7 + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <%@ taglib prefix="d" uri="http://displaytag.sf.net"%> 11 <!DOCTYPE html> 12 <html> 13 <head> 14 <base href="<%=basePath %>" /> 15 <meta charset="UTF-8"> 16 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 17 <title>用户管理-用户查询</title> 18 <link href="resource/css/bootstrap.min.css" rel="stylesheet" /> 19 <script type="text/javascript" src="resource/js/jquery.min.js"></script> 20 <script type="text/javascript" 21 src="resource/js/bootstrap.min.js"></script> 22 </head> 23 <body> 24 <div> 25 <ul class="breadcrumb" style="margin: 0px;"> 26 <li>系统管理</li> 27 <li>用户管理</li> 28 <li>用户查询</li> 29 </ul> 30 </div> 31 <form action="system/userinfoselect" class="form-inline" method="post"> 32 <div class="row alert alert-info" style="margin: 0px; padding: 5px;"> 33 <div class="form-group"> 34 <label>账号:</label> 35 <input type="text" name="userAccount" value="${user.userAccount }" class="form-control" placeholder="请输入查询账号" /> 36 <label>姓名:</label> 37 <input type="text" name="userName" value="${user.userName }" class="form-control" placeholder="请输入查询姓名" /> 38 <select class="form-control" name="userMark"> 39 <option value="">全部</option> 40 <option value="0" ${user.userMark==\'0\'?\'selected\':\'\' }>普通会员</option> 41 <option value="1" ${user.userMark==\'1\'?\'selected\':\'\' }>管理员</option> 42 </select> 43 </div> 44 <input type="submit" class="btn btn-danger" value="查询"> <a 45 href="view/system/userinfo/userinfo_add.jsp" class="btn btn-success">添加用户</a> 46 </div> 47 <div class="row" style="padding: 15px;"> 48 <d:table name="list" pagesize="5" requestURI="system/userinfoselect" class="table table-hover table-condensed"> 49 <d:column property="userId" title="用户编号"></d:column> 50 <d:column property="userAccount" title="用户账号"></d:column> 51 <d:column property="userPw" title="用户密码"></d:column> 52 <d:column property="userNumber" title="用户学号"></d:column> 53 <d:column property="userName" title="用户姓名"></d:column> 54 <d:column property="userAge" title="用户年龄"></d:column> 55 <d:column property="userSex" title="用户性别"></d:column> 56 <d:column property="userMark" title="用户标识"></d:column> 57 58 </d:table> 59 <!-- <table class="table table-hover table-condensed"> 60 <tr> 61 <th>用户编号</th> 62 <th>用户账号</th> 63 <th>用户密码</th> 64 <th>用户姓名</th> 65 <th>用户性别</th> 66 <th>用户年龄</th> 67 <td>操作</td> 68 </tr> 69 <tr> 70 <td>1001</td> 71 <td>admin123</td> 72 <td>123456</td> 73 <td>高富帅</td> 74 <td>男</td> 75 <td>20</td> 76 <td><a href="view/system/userinfo/userinfo_update.jsp">修改</a> 删除</td> 77 </tr> 78 </table> --> 79 </div> 80 </form> 81 </body> 82 </html>
5:点击添加用户操作就可以看到下面这个页面了;
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 //获取绝对路径路径 5 String path = request.getContextPath(); 6 String basePath = request.getScheme() + "://" 7 + request.getServerName() + ":" + request.getServerPort() 8 + path + "/"; 9 %> 10 <!DOCTYPE html> 11 <html> 12 <head> 13 <base href="<%=basePath %>" /> 14 <meta charset="UTF-8"> 15 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 16 <title>用户管理-用户添加</title> 17 <link href="resource/css/bootstrap.min.css" rel="stylesheet" /> 18 <script type="text/javascript" src="resource/js/jquery.min.js"></script> 19 <script type="text/javascript" 20 src="resource/js/bootstrap.min.js"></script> 21 </head> 22 <body> 23 <div> 24 <ul class="breadcrumb" style="margin: 0px;"> 25 <li>系统管理</li> 26 <li>用户管理</li> 27 <li>用户添加</li> 28 </ul> 29 </div> 30 <form action="system/userinfoinsert" class="form-horizontal" method="post"> 31 <h5 class="page-header alert-info" 基于jsp+servlet图书管理系统之后台用户信息修改操作⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台论坛管理demo
⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台论坛管理demo
⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台用户退出过程和过滤器管理后台的权限验证实现