Day60 综合案例

1.思维导图

2.代码部分

监听器的注解开发

  • @WebListener
@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);
    }
}

综合案例:删除用户

  • UserDao
 @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);
    }
}

综合案例:批量删除

  • UserDao
    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>");

综合案例:添加用户

  • UserDao
 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);
    }
}

综合案例:修改用户

  • UserDao
@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);
    }
}

BaseServlet应用

@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");
    }
}

BaseServlet优化

@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);
    }
}

 

posted @ 2020-04-24 20:29  Her4c  阅读(146)  评论(0编辑  收藏  举报