前日回顾:
jdbc 连接数据库:
导入 MySQL jar 包;
建立 jdbc.properties 资源配置文件;
静态代码块封装连接mysql数据库的驱动管理实例;
po 包中新建实体类;Dao 包中建立数据库操作类;测试;
今日内容:
Servlet + jsp 实现登陆,增删改查;
1 . 新建 web 项目(po 包;dao 包;servlet 包;test 包;);2 . User 实体类;package com.beiruan.web.po; public class User { private int userId; private String username; private int sex; private String password; private int flag; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getFlag() { return flag; } public void setFlag(int flag) { this.flag = flag; } }
DBConnectionUtil 工具类:private static String jdbcDriver = ""; private static String jdbcUrl = ""; private static String jdbcUser = ""; private static String jdbcPassword = ""; //静态代码块 static{ InputStream is = DBConnectionUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties p = new Properties(); try { p.load(is); jdbcDriver=p.getProperty("jdbcDriver"); jdbcUrl=p.getProperty("jdbcUrl"); jdbcUser=p.getProperty("jdbcUser"); jdbcPassword=p.getProperty("jdbcPassword"); } catch (IOException e) { e.printStackTrace(); } } public static Connection getConnection(){ Connection conn = null; try { Class.forName(jdbcDriver); //注册驱动 conn=DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword); //获取连接 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void closeSelect(PreparedStatement ps ,ResultSet rs,Connection conn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } } }
UserDao 数据操作类;![]()
创建 login.jsp 页面:创建 UseServlet.java :<form action="userServlet" method="post"> <div id="warp"> <div id="yx"> <div id="yx_h"> <span class="span1">快速登录</span> <span class="span2">账号密码登录</span> </div> <div id="yx_b"> <span><input name="username" type="text" placeholder="支持QQ号/邮箱/手机号登录" id="username" /> </span> <span><input name="password" type="password" placeholder="QQ密码" /> </span> <span><input type="checkbox" class="chbox"><span class="fot">下次自动登录</span> </span> <span><input type="submit" class="sub" value="登 录" /> </span> </div> <div id="yx_t"> <span> <a href="javascript:;">忘记密码?</a> | <a href="javascript:;">注册新账号</a> | <a href="javascript:;">意见反馈</a> </span> </div> </div> </div> </form>
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username");//input 的 name String password = request.getParameter("password"); UserDao userdao = new UserDao(); User user = userdao.getUserByUserNameAndPassword(username, password); if (user != null) { List<User> lists = userdao.getUsers(); request.setAttribute("lists",lists); request.getRequestDispatcher("/success.jsp").forward(request, response); return; } else{ request.getRequestDispatcher("/fail.jsp") .forward(request, response); // 请求转发 return; } }
新建 UserList.jsp 来显示数据:测试显示:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <table class="bo" border="1"> <tr> <th>用户ID</th> <th>用户名字</th> <th>用户性别</th> <th>用户密码</th> <th>用户状态</th> <th colspan="2">操作</th> </tr> <c:forEach var="lists" items="${lists }"> <tr> <td>${lists.userId }</td> <td>${lists.username }</td> <td>${lists.sex == 1 ? "男" : "女" }</td> <td>${lists.password }</td> <td>${lists.flag == 1 ? "在线" : "离线" }</td> </tr> </c:forEach> </table>
添加操作项:导入 Jquery 包,使用 Ajax 异步刷新删除:<th colspan="2">操作</th> <td><a href="">修改</a></td> <td><a href="">删除</a></td> <h3 id="add"><a style="color: cadetblue;" href="">添加用户</a></h3>
改写servlet:script :PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password =request.getParameter("password"); int flag = Integer.parseInt(request.getParameter("flag")); switch (flag) { case 1: User user = new User(); UserDao userDao = new UserDao(); userDao.getUserByUserNameAndPassword(username, password); if (user!=null) { List<User> lists = userDao.getUsers(); request.setAttribute("lists", lists); request.getRequestDispatcher("/success.jsp").forward(request, response); return; }else { request.getRequestDispatcher("/fail.jsp").forward(request, response); } break; case 2: int userId = Integer.parseInt(request.getParameter("userId")); int rows = userDao.deleteUserByuserId(userId); if (rows > 0) { out.print("success"); }else { out.print("success"); } default: break; }
<script type="text/javascript"> function deleteUserByUserId(userId,obj){ $.post("userDelServlet",{userId: userId},function(data){ if(data== "success"){ alert(data); $(obj).parent().parent().remove(); } else{ alert("fail"); } }); } </script>
效果:<a href="javascript:void(0);" οnclick="deleteUserByUserId(${lists.userId },this);" class="delete">删除</a>
![]()
![]()
同样的,另外建立 update ,delete , insert ,select 的servlet ;
request.getRequestDispatcher("/*.jsp").forward(request, response); // 请求转发
response.sendRedirect("/*.jsp"); // 请求重定向,可以跳到其它项目;请求转发的前面会带有项目名
为何在页面中接收不了? 因为request 只是一次请求有效,response.sendRedirect 时已经跳转,所以接收不到
session 一次会话有效,有作用时间(浏览器,时间,换个浏览器,tomcat关闭)
ps : 模糊查询的 sql 语句:String sql = "SELECT * FROM user WHERE username LIKE CONCAT('%',?,'%')";