黑马JavaWeb案例整理记录
实现页面跳转和用户信息的增删改查操作
Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat+BootStrap
SQL语句
create database heima; -- 创建数据库use heima; -- 使用数据库create table day17_user( -- 创建表id int primary key auto_increment,name varchar(20) not null,gender varchar(5),age int,address varchar(32),qq varchar(20),email varchar(50));
1. 环境搭建1. 创建数据库环境2. 创建项目,导入需要的jar包2. 编码3. 测试
4. 部署运维
本笔记(不包含测试和运维)

jar包下载地址(里边有很多调出合适的)
链接:https://pan.baidu.com/s/1V0X99u6U1zoDyFy2xm9Cyg
提取码:h8sz



导入druid.properties,导入JDBCUtils类。源码都在源码链接中
按钮位置
输入框
分页条
复选框
用到了checkCodeServlet,在我的其他博客写了,链接??
login.jsp点击切换验证码实现,如下图

@WebServlet(value = "/loginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//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 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.调用Srvice查询UserService service = new UserServiceImpl();User loginUser = service.login(user);//6.判断是否登录成功if(loginUser != null){//登录成功//将用户存入sessionsession.setAttribute("user",loginUser);//跳转页面response.sendRedirect(request.getContextPath()+"/index.jsp");}else{//登录失败//提示信息request.setAttribute("login_msg","用户名或密码错误!");//跳转登录页面request.getRequestDispatcher("/login.jsp").forward(request,response);}}
}
/*** 登录账号* @param username* @param password* @return*/@Overridepublic User findUserByUsernameAndPassword(String username, String password) {try {String sql = "select * from day17_user where username = ? and password= ?";User user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), username, password);return user;} catch (Exception e) {e.printStackTrace();return null;}}

源码在顶部链接
注意事项:提交路径

@WebServlet(value = "/addUserServlet")
public class AddUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取参数Map 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.跳转到userListServletresponse.sendRedirect(request.getContextPath()+"/userListServlet");}
}
/*** 添加user* @param user*/@Overridepublic void add(User user) {String sql = "insert into day17_user values(null,?,?,?,?,?,?,null,null)";
// template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());}


@WebServlet("/delUserServlet")
public class DelUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取idString id =request.getParameter("id");//2.调用service删除UserService service = new UserServiceImpl();service.deleteUser(id);//3.跳转到查询所有Servletresponse.sendRedirect(request.getContextPath()+"/userListServlet");}
}
/*** 根据id删除* @param id*/@Overridepublic void delete(int id) {String sql = "delete from day17_user where id = ?";template.update(sql,id);}

注意:隐藏域提交id。下面内容会提到

修改
@WebServlet(value = "/findUserServlet")
public class FindUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取idString id = request.getParameter("id");//2.调用Service查询UserService service = new UserServiceImpl();User user = service.findUserBuId(id);//3.将user存入requestrequest.setAttribute("user",user);//4.转发到update.jsprequest.getRequestDispatcher("/update.jsp").forward(request,response);}
}

id提交隐藏域如下

以下注意地点举例,具体请查看开篇源码链接。



@WebServlet(value = "/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码request.setCharacterEncoding("utf-8");//2.获取mapMap 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.跳转到查询所有Servletresponse.sendRedirect(request.getContextPath()+"/userListServlet");}
}





@WebServlet(value = "/delSelectServlet")
public class DelSelectServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取所有idString[] ids = request.getParameterValues("uid");//UserService service = new UserServiceImpl();service.delSelectUser(ids);//response.sendRedirect(request.getContextPath()+"/userListServlet");}
}
@Overridepublic void delSelectUser(String[] ids) {//判断有东西才删除,否则会空指针异常if (ids != null && ids.length>0){//1.遍历数组for (String id : ids){//2.2.调用dao删除dao.delete(Integer.parseInt(id));}}}
还是用之前写的,不过就是上一步的service将选中的id列表挨个遍历传进来,挨个删除,还是用以前的方法
/*** 根据id删除* @param id*/@Overridepublic void delete(int id) {String sql = "delete from day17_user where id = ?";template.update(sql,id);}

有选中条目才提交删除

同样Service中也要判断一下提交的里边有无内容,不判断的话有时候会空指针异常




