Day60 综合案例
1.思维导图
2.代码部分
@WebListener public class MyServletContextLIstener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext创建"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext销毁"); } }
- UserDao
@Override public List<User> selectUserList() throws Exception { return new QueryRunner(JDBCUtil.getDataSource()) .query("select * from tb_user", new BeanListHandler<User>(User.class)); }
- ShowIndexSerlvet
@WebServlet(name = "ShowIndexServlet" ,urlPatterns = "/showIndex") public class ShowIndexServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User existUser = (User) request.getSession().getAttribute("existUser"); StringBuffer responseBody = new StringBuffer(); if (null != existUser) { //已经在登录状态 responseBody.append("欢迎回来~ " + existUser.getUsername()); responseBody.append(" <a href='/day60/logout'>注销</a><br>"); //获取用户列表 UserDao userDao = new UserDaoImpl(); try { List<User> userList = userDao.selectUserList(); System.out.println(userList); responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>"); responseBody.append("<tr>"); responseBody.append("<td>ID</td>"); responseBody.append("<td>账户</td>"); responseBody.append("<td>密码</td>"); responseBody.append("</tr>"); for (User user : userList) { //遍历一个User对象,对应就应该有一个tr responseBody.append("<tr>"); responseBody.append("<td>"+user.getId()+"</td>"); responseBody.append("<td>"+user.getUsername()+"</td>"); responseBody.append("<td>"+user.getPassword()+"</td>"); responseBody.append("</tr>"); } responseBody.append("</table>"); } catch (Exception e) { e.printStackTrace(); } } else { //不在登录状态 responseBody.append("您还没有登录,<a href='/day60/login.html'>请登录</a><br>"); } response.setContentType("text/html;charset=utf-8"); response.getWriter().write(responseBody.toString()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
@Override public void deleteUserById(Integer id) throws Exception { new QueryRunner(JDBCUtil.getDataSource()) .update("delete from tb_user where id = ?", id); }
- ShowIndexServlet
responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>"); responseBody.append("<tr>"); responseBody.append("<td>ID</td>"); responseBody.append("<td>账户</td>"); responseBody.append("<td>密码</td>"); responseBody.append("<td>操作</td>"); responseBody.append("</tr>"); for (User user : userList) { if ( user.getId() != existUser.getId()) { //遍历一个User对象,对应就应该有一个tr responseBody.append("<tr>"); responseBody.append("<td>"+user.getId()+"</td>"); responseBody.append("<td>"+user.getUsername()+"</td>"); responseBody.append("<td>"+user.getPassword()+"</td>"); responseBody.append("<td><a href='/day60/deleteUser?id="+user.getId()+"'>删除</a></td>"); responseBody.append("</tr>"); } } responseBody.append("</table>");
- DeleteUserServlet
@WebServlet(name = "DeleteUserServlet" ,urlPatterns = "/deleteUser") public class DeleteUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String idStr = request.getParameter("id"); Integer id = Integer.parseInt(idStr); UserDao userDao = new UserDaoImpl(); try { userDao.deleteUserById(id); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect("/day60/showIndex"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
public void deleteUsersByIds(List<Integer> idList) throws Exception { for (Integer id : idList) { deleteUserById(id); } }
- ShowIndexServlet
responseBody.append("<form action='/day60/deleteUsers' method='post'>"); responseBody.append("<table border='1px' cellspaceing='0px' cellpadding='10px' width='500px' height='200px'>"); responseBody.append("<tr>"); responseBody.append("<td></td>"); responseBody.append("<td>ID</td>"); responseBody.append("<td>账户</td>"); responseBody.append("<td>密码</td>"); responseBody.append("<td>操作</td>"); responseBody.append("</tr>"); for (User user : userList) { if ( user.getId() != existUser.getId()) { //遍历一个User对象,对应就应该有一个tr responseBody.append("<tr>"); responseBody.append("<td><input name='ids' type='checkbox' value='"+user.getId()+"'></td>"); ...... responseBody.append("</tr>"); } } responseBody.append("</table>"); responseBody.append("<button type='submit'>批量删除</button>"); responseBody.append("</form>");
public void addUser(User inputUser) throws Exception { new QueryRunner(JDBCUtil.getDataSource()) .update("insert into tb_user(username ,password) values(?,?)", inputUser.getUsername(), inputUser.getPassword()); }
- ShowIndexServlet
//已经在登录状态 responseBody.append("欢迎回来~ " + existUser.getUsername()); responseBody.append(" <a href='/day60/logout'>注销</a><br>"); responseBody.append("<a href='/day60/add.html'>添加用户</a><br>");
- AddUserServlet
@WebServlet(name = "AddUserServlet" ,urlPatterns = "/addUser") public class AddUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); User inputUser = new User(); inputUser.setUsername(username); inputUser.setPassword(password); //方式一:在添加之前,校验下用户名是否存在 //方式二:让username字段有唯一约束! UserDao userDao = new UserDaoImpl(); try { userDao.addUser(inputUser); //添加成功,跳转到首页 response.sendRedirect("/day60/showIndex"); } catch (Exception e) { e.printStackTrace(); //添加失败,跳转到添加用户页面 response.sendRedirect("/day60/add.html"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
@Override public void updateUser(User user) throws Exception { new QueryRunner(JDBCUtil.getDataSource()) .update("update tb_user set username = ? , password = ? where id = ?", user.getUsername(), user.getPassword(), user.getId()); }
- ShowIndexServlet
for (User user : userList) { if ( user.getId() != existUser.getId()) { //遍历一个User对象,对应就应该有一个tr responseBody.append("<tr>"); responseBody.append("<td><input name='ids' type='checkbox' value='"+user.getId()+"'></td>"); responseBody.append("<td>"+user.getId()+"</td>"); responseBody.append("<td>"+user.getUsername()+"</td>"); responseBody.append("<td>"+user.getPassword()+"</td>"); responseBody.append("<td>" + "<a href='/day60/deleteUser?id="+user.getId()+"'>删除</a> " + "<a href='/day60/showUpdateUser?id="+user.getId()+"'>修改</a>"+ "</td>"); responseBody.append("</tr>"); } }
- 显示修改用户页面
@WebServlet(name = "ShowUpdateUserServlet" , urlPatterns = "/showUpdateUser") public class ShowUpdateUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer id = Integer.parseInt(request.getParameter("id")); //根据id查询用户 UserDao userDao = new UserDaoImpl(); StringBuffer responseBody = new StringBuffer(); try { User user = userDao.selectUserById(id); System.out.println(user); responseBody.append("<form action='/day60/updateUser' method='post'>"); responseBody.append("<input type='hidden' name='id' value='"+user.getId()+"'/>"); responseBody.append("账户:<input type='text' name='username' value='"+user.getUsername()+"'/><br>"); responseBody.append("密码:<input type='text' name='password' value='"+user.getPassword()+"'/><br>"); responseBody.append("<button type='submit'>修改</button>"); responseBody.append("</form>"); } catch (Exception e) { e.printStackTrace(); } response.setContentType("text/html;charset=utf-8"); response.getWriter().write(responseBody.toString()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
- 修改用户
@WebServlet(name = "UpdateUserServlet" ,urlPatterns = "/updateUser") public class UpdateUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer id = Integer.parseInt(request.getParameter("id")); String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username : " + username + ", password : " + password); //要修改的内容:username、password User user = new User(id,username,password); UserDao userDao = new UserDaoImpl(); try { userDao.updateUser(user); //修改成功,跳转到首页 response.sendRedirect("/day60/showIndex"); } catch (Exception e) { e.printStackTrace(); //修改失败,跳转到修改页面 response.sendRedirect("/day60/showUpdateUser?id="+id); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
@WebServlet(name = "UserServlet",urlPatterns = "/user") public class UserServlet extends BaseServlet { public void login(HttpServletRequest request,HttpServletResponse response){ String username = request.getParameter("username"); String password = request.getParameter("password"); User inputUser = new User(); inputUser.setUsername(username); inputUser.setPassword(password); UserDao userDao = new UserDaoImpl(); try { User existUser = userDao.login(inputUser); if (null == existUser) { //登录失败 request.getRequestDispatcher("/login.html").forward(request,response); } else { //登录成功 request.getSession().setAttribute("existUser",existUser); response.sendRedirect("/day61/user?methodName=showIndex"); } } catch (Exception e) { e.printStackTrace(); } } public void showIndex(HttpServletRequest request , HttpServletResponse response) throws Exception { System.out.println("showIndex"); User existUser = (User) request.getSession().getAttribute("existUser"); StringBuffer responseBody = new StringBuffer(); if (null != existUser) { //在登录状态 responseBody.append("欢迎回来"+existUser.getUsername()); responseBody.append("<a href='/day61/user?methodName=logout'>注销登录</a>"); } else { //不在登录状态 responseBody.append("您还没有登录;"); responseBody.append("<a href='/day61/login.html'>请登录</a>"); } response.setContentType("text/html;charset=utf-8"); response.getWriter().write(responseBody.toString()); } public void logout(HttpServletRequest request , HttpServletResponse response) throws Exception { request.getSession().invalidate(); response.sendRedirect("/day61/login.html"); } }
@WebServlet(name = "BaseServlet",urlPatterns = "/base") public class BaseServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); String methodName = request.getParameter("methodName"); try { Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); if (null != method) { //处理返回值,为了资源跳转 String returnValue = (String) method.invoke(this,request,response); System.out.println(returnValue); //有的方法有返回值 //登录成功:重定向 redirect:/day61/user?methodName=showIndex //登录失败: 请求转发 forward:/login.html //有的方法没有返回值 //null,不用做任何处理 if (returnValue != null){ //有返回值,实现资源跳转,需要资源的路径 if (returnValue.lastIndexOf(":") != -1) { String path = returnValue.split(":")[1]; System.out.println("path : "+path); //有":" //实现资源跳转:重定向、请求转发 if (returnValue.startsWith("redirect")) { //重定向 response.sendRedirect(request.getContextPath()+path); } else if(returnValue.startsWith("forward")){ //请求转发 request.getRequestDispatcher(path).forward(request,response); } } else { //没有":",默认就是转发 /login.html request.getRequestDispatcher(returnValue).forward(request,response); } } else { //不做任何处理 } } } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }