package com.thhh.dao.role; import com.thhh.pojo.Role; import java.sql.Connection; import java.sql.SQLException; import java.util.List; public interface RoleDao { /** * 1、获取角色列表 * @param conn:数据库连接对象 * @return:返回的结构集 * @throws SQLException */ public List<Role> getRoleList(Connection conn) throws SQLException; }
package com.thhh.dao.role; import com.thhh.dao.BaseDao; import com.thhh.pojo.Role; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class RoleDaoImpl implements RoleDao{ //1、获取角色列表 @Override public List<Role> getRoleList(Connection conn) throws SQLException { PreparedStatement pstmt = null; ResultSet rs = null; List<Role> list = null;//存储角色对象的集合 if (conn!=null){ list = new ArrayList<Role>(); String sql = "SELECT * FROM smbms_role";//直接写死,不用参数 Object[] params = {}; rs = BaseDao.executeQuery(sql,params,conn,pstmt,rs); while (rs.next()){ Role role = new Role(); role.setId(rs.getInt("id")); role.setRoleCode(rs.getString("roleCode")); role.setRoleName(rs.getString("roleName")); list.add(role); } BaseDao.close(null,pstmt,rs); } return list; } }
package com.thhh.service.role; import com.thhh.pojo.Role; import java.util.List; public interface RoleService { //1、获取角色列表 public List<Role> getRoleList(); }
package com.thhh.service.role; import com.thhh.dao.BaseDao; import com.thhh.dao.role.RoleDao; import com.thhh.dao.role.RoleDaoImpl; import com.thhh.pojo.Role; import org.junit.Test; import java.sql.Connection; import java.sql.SQLException; import java.util.List; public class RoleServiceImpl implements RoleService{ private RoleDao roleDao = null; public RoleServiceImpl() { this.roleDao = new RoleDaoImpl(); //servlet中一旦调用这个service,就会实例化该Dao对象 } @Override public List<Role> getRoleList() { Connection conn = null;//获取连接 List<Role> roleList = null; try { conn = BaseDao.getConnection(); roleList = roleDao.getRoleList(conn);//服务层调用Dao层方法 } catch (SQLException throwables) { throwables.printStackTrace(); }finally { BaseDao.close(conn,null,null);//关闭连接 } return roleList; } }
@Test public void test(){ RoleService roleService = new RoleServiceImpl(); List<Role> list = roleService.getRoleList(); for (Role role:list) { System.out.println(role.getId()+"\t"+role.getRoleName()+"\t"+role.getRoleCode()); } }
href="${pageContext.request.contextPath }/jsp/user.do?method=query" /jsp/user.do //这个URL映射的servlet我们在前面已经注册过了,所以区别就是它后面跟的参数 method=query 这个参数就是在传递指定servlet应该调用的方法
这一次编写的servlet比较的复杂,我们把它单独拎出来看
//3、按照用户名/职位名称查询用户列表或整表查询 //【重点&难点】 public void quary(HttpServletRequest req, HttpServletResponse resp){ //1、从前端获取数据 String queryname = req.getParameter("queryname"); String queryUserRole = req.getParameter("queryUserRole"); String pageIndex = req.getParameter("pageIndex");//通过隐藏域进行的提交,默认 = 1 int UserRole = 0;//我们先让UserRole = 0,因为从前端接收到的queryUserRole可能就是一个NULL,此时我们就需要将其指定为0 int pageSize = 5;//这个数字最好是写在配置文件中,这样以后想要修改一页上面显示的行数,我们就不用再从新编译代码和测试了 int currentPageNo = 1;//先给当前页设置一个默认的值 //2、通过判断参数决定哪些请求需要处理 if (queryname == null){ queryname = "";//如果前端没有按照用户名查询,我们就将用户名设置"" } if (queryUserRole!=null && queryUserRole!=""){ UserRole = Integer.parseInt(queryUserRole);//当前端传过来的queryUserRole有数据的时候我们才对其进行解析 } if (pageIndex!=null){ currentPageNo = Integer.parseInt(pageIndex); } //3、为了实现分页,需要使用工具类PageSupport并传入总用户数,计算出totalPageCount //参数totalCount由getUserCount得出;pageSize是固定死了的;currentPageNo默认设为1 UserService userService = new UserServiceImpl(); int totalCount = userService.getUserCount(queryname,UserRole); //使用最开始导入的工具类 PageSupport pageSupport = new PageSupport(); pageSupport.setPageSize(pageSize);//设置一页多少行数据 pageSupport.setTotalCount(totalCount);//设置总页数 pageSupport.setCurrentPageNo(currentPageNo);//设置当前页数 int totalPageCount = 0; totalPageCount = pageSupport.getTotalPageCount(); //4、控制翻页 if (currentPageNo<1){//在第一页的时候还想点击上一页 currentPageNo = 1; }else if(currentPageNo>pageSupport.getTotalPageCount()) {//在第最后一页的时候还想点击下一页 currentPageNo = totalPageCount; } //5、用户列表展示 List<User> userList = userService.getUserList(queryname,UserRole,currentPageNo,pageSize); //将集合返回给前端进行解析显示 req.setAttribute("userList",userList); //6、角色列表展示 List<Role> roleList = new RoleServiceImpl().getRoleList(); req.setAttribute("roleList",roleList); //7、将参数返回前端 req.setAttribute("queryUserName",queryname); req.setAttribute("queryUserRole",queryUserRole); req.setAttribute("totalPageCount",totalPageCount); req.setAttribute("totalCount",totalCount); req.setAttribute("currentPageNo",currentPageNo); //8、重定向刷新页面 try { System.out.println("=======================进入到servlet,且i调用method = query"); req.getRequestDispatcher("userlist.jsp").forward(req,resp); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
首先,这个servlet直接和前端的用户管理页面进行交互,且用户管理页面所有展示的数据都是由这个servlet的query()返回的,所以我们应该按照前端素材来编写servlet的query()
通过上面的分析我们可以发现:我们需要从前端页面获取3个参数,并给前端返回7个参数
//1、从前端获取数据 String queryname = req.getParameter("queryname"); String queryUserRole = req.getParameter("queryUserRole"); String pageIndex = req.getParameter("pageIndex");//通过隐藏域进行的提交,默认 = 1 int UserRole = 0;//我们先让UserRole = 0,因为从前端接收到的queryUserRole可能就是一个NULL,此时我们就需要将其指定为0 int pageSize = 5;//这个数字最好是写在配置文件中,这样以后想要修改一页上面显示的行数,我们就不用再从新编译代码和测试了 int currentPageNo = 1;//先给当前页设置一个默认的值
//2、通过判断参数决定哪些请求需要处理 if (queryname == null){ queryname = "";//如果前端没有按照用户名查询,我们就将用户名设置"" } if (queryUserRole!=null && queryUserRole!=""){ UserRole = Integer.parseInt(queryUserRole);//当前端传过来的queryUserRole有数据的时候我们才对其进行解析 } if (pageIndex!=null){ currentPageNo = Integer.parseInt(pageIndex); }
//3、为了实现分页,需要使用工具类PageSupport并传入总用户数,计算出totalPageCount //参数totalCount由getUserCount得出;pageSize是固定死了的;currentPageNo默认设为1 UserService userService = new UserServiceImpl(); int totalCount = userService.getUserCount(queryname,UserRole); //使用最开始导入的工具类 PageSupport pageSupport = new PageSupport(); pageSupport.setPageSize(pageSize);//设置一页多少行数据 pageSupport.setTotalCount(totalCount);//设置总页数 pageSupport.setCurrentPageNo(currentPageNo);//设置当前页数 int totalPageCount = 0; totalPageCount = pageSupport.getTotalPageCount();
//4、控制翻页 if (currentPageNo<1){//在第一页的时候还想点击上一页 currentPageNo = 1; }else if(currentPageNo>pageSupport.getTotalPageCount()) {//在第最后一页的时候还想点击下一页 currentPageNo = totalPageCount; }
//5、用户列表展示 List<User> userList = userService.getUserList(queryname,UserRole,currentPageNo,pageSize); //将集合返回给前端进行解析显示 req.setAttribute("userList",userList)
//6、角色列表展示 List<Role> roleList = new RoleServiceImpl().getRoleList(); req.setAttribute("roleList",roleList);
//7、将参数返回前端 req.setAttribute("queryUserName",queryname); req.setAttribute("queryUserRole",queryUserRole); req.setAttribute("totalPageCount",totalPageCount); req.setAttribute("totalCount",totalCount); req.setAttribute("currentPageNo",currentPageNo);
//8、重定向刷新页面 try { System.out.println("=======================进入到servlet,且i调用method = query"); req.getRequestDispatcher("userlist.jsp").forward(req,resp); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
测试完成!