当当当当~~~~欢迎大家阅读,今天我们总结用户信息管理系统的流程
该系统主要分为两部分,一部分是简单功能(增删改查)的基础实现;
一部分是复杂功能删除选中,分页查询,复杂条件查询的实现;
首先我们来看一下登录界面
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">管理员登录</h3>
- <form action="login" method="post">
- <div class="form-group">
- <label for="user">用户名:</label>
- <input type="text" name="user" class="form-control" id="user" placeholder="请输入用户名"/>
- </div>
-
- <div class="form-group">
- <label for="password">密码:</label>
- <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
- </div>
-
- <div class="form-inline">
- <label for="vcode">验证码:</label>
- <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
- <a href="javascript:refreshCode()"><img src="vcode" title="看不清点击刷新" id="vcode"/></a>
- </div>
- <hr/>
- <div class="form-group" style="text-align: center;">
- <input class="btn btn btn-primary" type="submit" value="登录">
- </div>
- </form>
-
- <!-- 出错显示的信息框 -->
- <div class="alert alert-warning alert-dismissible" role="alert">
- <button type="button" class="close" data-dismiss="alert" >
- <span>×</span>
- </button>
- <strong>登录失败!</strong>
- </div>
- </div>
- </body>
在html基础上添加了servlet与后端交互,并且在登录时插入了验证码的校验
- <form action="${pageContext.request.contextPath}/loginServlet" method="post">
- <div class="form-inline">
- <label for="vcode">验证码:</label>
- <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
- <a href="javascript:refreshCode();">
- <img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/>
- </a>
- </div>
- //1.设置编码
- request.setCharacterEncoding("utf-8");
-
- //2.获取数据
- //2.1获取用户填写验证码
- String verifycode = request.getParameter("verifycode");
-
- //3.验证码校验
- HttpSession session = request.getSession();
- String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
- session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性
- if(!checkcode_server.equalsIgnoreCase(verifycode)){
- //验证码不正确
- //提示信息
- request.setAttribute("login_msg","验证码错误!");
- //跳转登录页面
- request.getRequestDispatcher("/login.jsp").forward(request,response);
-
- return;
- }
-
- Map<String, String[]> map = request.getParameterMap();
- //4.封装User对象
- User user = new User();
- try {
- BeanUtils.populate(user,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
-
-
- //5.调用Service查询
- UserService service = new UserServiceImpl();
- User loginUser = service.login(user);
- //6.判断是否登录成功
- if(loginUser != null){
- //登录成功
- //将用户存入session
- session.setAttribute("user",loginUser);
- //跳转页面
- response.sendRedirect(request.getContextPath()+"/index.jsp");
- }else{
- //登录失败
- //提示信息
- request.setAttribute("login_msg","用户名或密码错误!");
- //跳转登录页面
- request.getRequestDispatcher("/login.jsp").forward(request,response);
-
- }
- @Override
- public User login(User user) {
-
- return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword());
- }
- @Override
- public User findUserByUsernameAndPassword(String username, String password) {
- try {
- String sql = "select * from user where username = ? and password = ?";
- User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
- return user;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
-
- }
登录界面完成并且登录成功后,接下来我们开始进行用户信息的列表查询!
- <div align="center">
- <a
- href="${pageContext.request.contextPath}/findUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
- </a>
- </div>
- <table border="1" class="table table-bordered table-hover">
- <tr class="success">
- <th><input type="checkbox" id="firstCb"></th>
- <th>编号</th>
- <th>姓名</th>
- <th>性别</th>
- <th>年龄</th>
- <th>籍贯</th>
- <th>QQ</th>
- <th>邮箱</th>
- <th>操作</th>
- </tr>
-
- <c:forEach items="${pb.list}" var="user" varStatus="s">
- <tr>
- <td><input type="checkbox" name="uid" value="${user.id}"></td>
- <td>${s.count}</td>
- <td>${user.name}</td>
- <td>${user.gender}</td>
- <td>${user.age}</td>
- <td>${user.address}</td>
- <td>${user.qq}</td>
- <td>${user.email}</td>
- <td><a class="btn btn-default btn-sm"
-
- </c:forEach>
- </table>
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.调用UserService完成查询
- UserService service = new UserServiceImpl();
- List<User> users = service.findAll();
- //2.将list存入request域
- request.setAttribute("users",users);
- //3.转发到list.jsp
- request.getRequestDispatcher("/list.jsp").forward(request,response);
- }
- @Override
- public List<User> findAll() {
- //调用Dao完成查询
- return dao.findAll();
- }
- @Override
- public List<User> findAll() {
- //使用JDBC操作数据库...
- //1.定义sql
- String sql = "select * from user";
- List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
-
- return users;
- }
- <div style="float: right;margin: 5px;">
-
- <a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
-
- </div>
- <body>
- <div class="container">
- <center><h3>添加联系人页面</h3></center>
- <form action="${pageContext.request.contextPath}/addUserServlet" method="post">
- <div class="form-group">
- <label for="name">姓名:</label>
- <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
- </div>
-
- <div class="form-group">
- <label>性别:</label>
- <input type="radio" name="gender" value="男" checked="checked"/>男
- <input type="radio" name="gender" value="女"/>女
- </div>
-
- <div class="form-group">
- <label for="age">年龄:</label>
- <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
- </div>
-
- <div class="form-group">
- <label for="address">籍贯:</label>
- <select name="address" class="form-control" id="address">
- <option value="陕西">陕西</option>
- <option value="北京">北京</option>
- <option value="上海">上海</option>
- </select>
- </div>
-
- <div class="form-group">
- <label for="qq">QQ:</label>
- <input type="text" class="form-control" id="qq" name="qq" placeholder="请输入QQ号码"/>
- </div>
-
- <div class="form-group">
- <label for="email">Email:</label>
- <input type="text" class="form-control" id="email" name="email" placeholder="请输入邮箱地址"/>
- </div>
-
- <div class="form-group" style="text-align: center">
- <input class="btn btn-primary" type="submit" value="提交" />
- <input class="btn btn-default" type="reset" value="重置" />
- <input class="btn btn-default" type="button" value="返回" />
- </div>
- </form>
- </div>
- </body>
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.设置编码
- request.setCharacterEncoding("utf-8");
- //2.获取参数
- Map<String, String[]> map = request.getParameterMap();
- //3.封装对象
- User user = new User();
- try {
- BeanUtils.populate(user,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
-
- //4.调用Service保存
- UserService service = new UserServiceImpl();
- service.addUser(user);
-
- //5.跳转到userListServlet
- response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
- }
- @Override
- public void addUser(User user) {
- dao.add(user);
- }
- @Override
- public void add(User user) {
- //1.定义sql
- String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";
- //2.执行sql
- template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
- }
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除</a></td>
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.获取id
- String id = request.getParameter("id");
- //2.调用service删除
- UserService service = new UserServiceImpl();
- service.deleteUser(id);
-
- //3.跳转到查询所有Servlet
- response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
- }
-
- @Override
- public void deleteUser(String id) {
- dao.delete(Integer.parseInt(id));
- }
- @Override
- public void delete(int id) {
- //1.定义sql
- String sql = "delete from user where id = ?";
- //2.执行sql
- template.update(sql, id);
- }
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">修改联系人</h3>
- <form action="" method="post">
- <div class="form-group">
- <label for="name">姓名:</label>
- <input type="text" class="form-control" id="name" name="name" readonly="readonly" placeholder="请输入姓名" />
- </div>
-
- <div class="form-group">
- <label>性别:</label>
- <input type="radio" name="sex" value="男" />男
- <input type="radio" name="sex" value="女" />女
- </div>
-
- <div class="form-group">
- <label for="age">年龄:</label>
- <input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄" />
- </div>
-
- <div class="form-group">
- <label for="address">籍贯:</label>
- <select name="address" id="address" class="form-control" >
- <option value="陕西">陕西</option>
- <option value="北京">北京</option>
- <option value="上海">上海</option>
- </select>
- </div>
-
- <div class="form-group">
- <label for="qq">QQ:</label>
- <input type="text" id="qq" class="form-control" name="qq" placeholder="请输入QQ号码"/>
- </div>
-
- <div class="form-group">
- <label for="email">Email:</label>
- <input type="text" id="email" class="form-control" name="email" placeholder="请输入邮箱地址"/>
- </div>
-
- <div class="form-group" style="text-align: center">
- <input class="btn btn-primary" type="submit" value="提交" />
- <input class="btn btn-default" type="reset" value="重置" />
- <input class="btn btn-default" type="button" value="返回"/>
- </div>
- </form>
- </div>
- </body>
添加可以自由选择性别和籍贯的判断
- <body>
- <div class="container" style="width: 400px;">
- <h3 style="text-align: center;">修改联系人</h3>
- <form action="${pageContext.request.contextPath}/updateUserServlet" method="post">
- <!-- 隐藏域提交id-->
- <input type="hidden" name="id" value="${user.id}">
-
- <div class="form-group">
- <label for="name">姓名:</label>
- <input type="text" class="form-control" id="name" name="name" value="${user.name}" readonly="readonly" placeholder="请输入姓名" />
- </div>
-
- <div class="form-group">
- <label>性别:</label>
- <c:if test="${user.gender == '男'}">
- <input type="radio" name="gender" value="男" checked />男
- <input type="radio" name="gender" value="女" />女
- </c:if>
-
- <c:if test="${user.gender == '女'}">
- <input type="radio" name="gender" value="男" />男
- <input type="radio" name="gender" value="女" checked />女
- </c:if>
-
-
- </div>
-
- <div class="form-group">
- <label for="age">年龄:</label>
- <input type="text" class="form-control" value="${user.age}" id="age" name="age" placeholder="请输入年龄" />
- </div>
-
- <div class="form-group">
- <label for="address">籍贯:</label>
- <select name="address" id="address" class="form-control" >
- <c:if test="${user.address == '陕西'}">
- <option value="陕西" selected>陕西</option>
- <option value="北京">北京</option>
- <option value="上海">上海</option>
- </c:if>
-
- <c:if test="${user.address == '北京'}">
- <option value="陕西" >陕西</option>
- <option value="北京" selected>北京</option>
- <option value="上海">上海</option>
- </c:if>
-
- <c:if test="${user.address == '上海'}">
- <option value="陕西" >陕西</option>
- <option value="北京">北京</option>
- <option value="上海" selected>上海</option>
- </c:if>
- </select>
- </div>
- </form>
- </div>
- </body>
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.获取id
- String id = request.getParameter("id");
- //2.调用Service查询
- UserService service = new UserServiceImpl();
- User user = service.findUserById(id);
-
- //3.将user存入request
- request.setAttribute("user",user);
- //4.转发到update.jsp
- request.getRequestDispatcher("/update.jsp").forward(request,response);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.设置编码
- request.setCharacterEncoding("utf-8");
- //2.获取map
- Map<String, String[]> map = request.getParameterMap();
- //3.封装对象
- User user = new User();
- try {
- BeanUtils.populate(user,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
-
- //4.调用Service修改
- UserService service = new UserServiceImpl();
- service.updateUser(user);
-
- //5.跳转到查询所有Servlet
- response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
- }
- @Override
- public void updateUser(User user) {
- dao.update(user);
- }
- @Override
- public void update(User user) {
- String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?";
- template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());
- }
- <div style="float: right;margin: 5px;">
- <a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中
- </a>
-
- </div>
- window.onload = function(){
- //给删除选中按钮添加单击事件
- document.getElementById("delSelected").onclick = function(){
- if(confirm("您确定要删除选中条目吗?")){
- var flag = false;
- //判断是否有选中条目
- var cbs = document.getElementsByName("uid");
- for (var i = 0; i < cbs.length; i++) {
- if(cbs[i].checked){
- //有一个条目选中了
- flag = true;
- break;
- }
- }
- if(flag){//有条目被选中
- //表单提交
- document.getElementById("form").submit();
- }
- }
- }
- }
- //1.获取第一个cb
- document.getElementById("firstCb").onclick = function(){
- //2.获取下边列表中所有的cb
- var cbs = document.getElementsByName("uid");
- //3.遍历
- for (var i = 0; i < cbs.length; i++) {
- //4.设置这些cbs[i]的checked状态 = firstCb.checked
- cbs[i].checked = this.checked;
- }
- }
- public class DelSelectedServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.获取所有id
- String[] ids = request.getParameterValues("uid");
- //2.调用service删除
- UserService service = new UserServiceImpl();
- service.delSelectedUser(ids);
-
- //3.跳转查询所有Servlet
- response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
- }
- //删除选中用户
- @Override
- public void delSelectedUser(String[] ids) {
- if(ids != null && ids.length > 0){
- //1.遍历数组
- for (String id : ids) {
- //2.调用dao删除
- dao.delete(Integer.parseInt(id));
- }
- }
- }
- <div>
- <nav aria-label="Page navigation">
- <ul class="pagination">
- <c:if test="${pb.currentPage == 1}">
- <li class="disabled">
- </c:if>
- <c:if test="${pb.currentPage != 1}">
- <li>
- </c:if>
- <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage - 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous">
- <span aria-hidden="true">«</span>
- </a>
- </li>
- <c:forEach begin="1" end="${pb.totalPage}" var="i" >
- <c:if test="${pb.currentPage == i}">
- <li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li>
- </c:if>
- <c:if test="${pb.currentPage != i}">
- <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li>
- </c:if>
- </c:forEach>
- <li>
- <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage + 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Next">
- <span aria-hidden="true">»</span>
- </a>
- </li>
- <span style="font-size: 25px;margin-left: 5px;">
- 共${pb.totalCount}条记录,共${pb.totalPage}页
- </span>
-
- </ul>
- </nav>
- </div>
1:添加一个分页查询相关的类
- public class PageBean<T> {
- private int totalCount; // 总记录数
- private int totalPage ; // 总页码
- private List<T> list ; // 每页的数据
- private int currentPage ; //当前页码
- private int rows;//每页显示的记录数
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("utf-8");
- //1.获取参数
- String currentPage = request.getParameter("currentPage");//当前页码
- String rows = request.getParameter("rows");//每页显示条数
-
- if(currentPage == null || "".equals(currentPage)){
-
- currentPage = "1";
- }
- if(rows == null || "".equals(rows)){
- rows = "5";
- }
- //获取条件查询参数
- Map<String, String[]> condition = request.getParameterMap();
- //2.调用service查询
- UserService service = new UserServiceImpl();
- PageBean<User> pb = service.findUserByPage(currentPage,rows,condition);
- System.out.println(pb);
- //3.将PageBean存入request
- request.setAttribute("pb",pb);
- request.setAttribute("condition",condition);//将查询条件存入request
- //4.转发到list.jsp
- request.getRequestDispatcher("/list.jsp").forward(request,response);
- }
- //分页条件查询
- @Override
- public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
-
- int currentPage = Integer.parseInt(_currentPage);
- int rows = Integer.parseInt(_rows);
-
- //第1页的上一页永远返回1
- if(currentPage <=0) {
- currentPage = 1;
- }
-
- //1.创建空的PageBean对象
- PageBean<User> pb = new PageBean<User>();
- //2.设置参数
- pb.setCurrentPage(currentPage);
- pb.setRows(rows);
-
- //3.调用dao查询总记录数
- int totalCount = dao.findTotalCount(condition);
- pb.setTotalCount(totalCount);
- //4.调用dao查询List集合
- //计算开始的记录索引
- int start = (currentPage - 1) * rows;
- List<User> list = dao.findByPage(start,rows,condition);
- pb.setList(list);
-
- //5.计算总页码
- int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1;
- pb.setTotalPage(totalPage);
-
-
- return pb;
- }
- //查询总记录数
- @Override
- public int findTotalCount() {
- //1.定义模板初始化sql
- String sql = "select count(*) from user";
-
- return template.queryForObject(sql,Integer.class);
- }
- //分页条件查询
- @Override
- public List<User> findByPage(int start, int rows) {
- String sql = "select * from user limit?,? ;
- return template.query(sql,new BeanPropertyRowMapper<User>,start,rows);
- }
- <div style="float: left;">
-
- <form class="form-inline" action="${pageContext.request.contextPath}/findUserByPageServlet" method="post">
- <div class="form-group">
- <label for="exampleInputName2">姓名</label>
- <input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2" >
- </div>
- <div class="form-group">
- <label for="exampleInputName3">籍贯</label>
- <input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3" >
- </div>
-
- <div class="form-group">
- <label for="exampleInputEmail2">邮箱</label>
- <input type="text" name="email" value="${condition.email[0]}" class="form-control" id="exampleInputEmail2" >
- </div>
- <button type="submit" class="btn btn-default">查询</button>
- </form>
-
- </div>
- //获取条件查询参数
- Map<String, String[]> condition = request.getParameterMap();
- //2.调用service查询
- UserService service = new UserServiceImpl();
- PageBean<User> pb = service.findUserByPage(currentPage,rows,condition);
- System.out.println(pb);
- //3.调用dao查询总记录数
- int totalCount = dao.findTotalCount(condition);
- pb.setTotalCount(totalCount);
- //4.调用dao查询List集合
- //计算开始的记录索引
- int start = (currentPage - 1) * rows;
- List<User> list = dao.findByPage(start,rows,condition);
- pb.setList(list);
- //查询总记录数
- @Override
- public int findTotalCount(Map<String, String[]> condition) {
- //1.定义模板初始化sql
- String sql = "select count(*) from user where 1 = 1 ";
- StringBuilder sb = new StringBuilder(sql);
- //2.遍历map
- Set<String> keySet = condition.keySet();
- //定义参数的集合
- List<Object> params = new ArrayList<Object>();
- for (String key : keySet) {
-
- //排除分页条件参数
- if("currentPage".equals(key) || "rows".equals(key)){
- continue;
- }
-
- //获取value
- String value = condition.get(key)[0];
- //判断value是否有值
- if(value != null && !"".equals(value)){
- //有值
- sb.append(" and "+key+" like ? ");
- params.add("%"+value+"%");//?条件的值
- }
- }
- System.out.println(sb.toString());
- System.out.println(params);
-
- return template.queryForObject(sb.toString(),Integer.class,params.toArray());
- }
- //分页条件查询
- @Override
- public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
- String sql = "select * from user where 1 = 1 ";
-
- StringBuilder sb = new StringBuilder(sql);
- //2.遍历map
- Set<String> keySet = condition.keySet();
- //定义参数的集合
- List<Object> params = new ArrayList<Object>();
- for (String key : keySet) {
-
- //排除分页条件参数
- if("currentPage".equals(key) || "rows".equals(key)){
- continue;
- }
-
- //获取value
- String value = condition.get(key)[0];
- //判断value是否有值
- if(value != null && !"".equals(value)){
- //有值
- sb.append(" and "+key+" like ? ");
- params.add("%"+value+"%");//?条件的值//模糊查询
- }
- }
-
- //添加分页查询
- sb.append(" limit ?,? ");
- //添加分页查询参数值
- params.add(start);
- params.add(rows);
- sql = sb.toString();
- System.out.println(sql);
- System.out.println(params);
-
- return template.query(sql,new BeanPropertyRowMapper<User>(User.class),params.toArray());
- }
以上就是用户信息管理系统的内容啦,希望我的文章对你有所帮助,如果有错误的地方还望大家批评指正,谢谢大家阅读!