思考 : 需要創建實體類嗎? 需要創建表嗎
|----User 存在、不需要創建了!表同理、也不需要了
1.設計dao接口
package cn.javabs.usermanager.dao; import cn.javabs.usermanager.entity.User; /** * 用戶的dao接口的設計 * @author Mryang * */ public interface UserDao { /** * 用戶登錄功能 * @param username 參數 為用戶名 * @param password 參數 為密碼 * @return user */ User login(String username , String password); /** * 用戶注冊 * @param user 參數是 用戶對象!!!!!!! * @return 記錄條數 受影響的行數 */ int register(User user); }
2.UserDaoImpl 實現類
package cn.javabs.usermanager.dao.impl; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import cn.javabs.usermanager.dao.UserDao; import cn.javabs.usermanager.entity.User; import cn.javabs.usermanager.exception.UserLoginException; import cn.javabs.usermanager.exception.UserRegisterException; import cn.javabs.usermanager.util.JdbcUtil; /** * userdao的實現類 * @author Mryang * 調用 jdbc * *靜態方法優於構造方法先執行 * */ public class UserDaoImpl implements UserDao { @Override public User login(String username, String password) { try { Connection con = JdbcUtil.getConnection(); // 通過con 鏈接創建一個執行SQL語句的對象Statement Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from user where username = '"+username+"' and password = '"+password+"';"); if(rs.next()){// 有數據才執行以下 // 類型 對象 = 。。。 User user = new User(); // rs.getString();//columnIndex 數據庫中表的列號 從0計數 // rs.getString(columnLabel)//columnLabel 數據庫中表的列名 // String name = rs.getString("username");//name admin // String pwd = rs.getString("password");//name admin // System.out.println("name:"+name); // System.out.println("pwd:"+pwd); // user.setUsername(name); // 封裝。注入 user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); System.out.println("userDao中的user的內容是"+ user); return user;// 已經有了 username和password }else{//沒數據才執行以下 return null; } } catch (SQLException e) { throw new UserLoginException(); } } @Override public int register(User user) { try { // 獲取鏈接 Connection conn = JdbcUtil.getConnection(); // 創建執行SQL語句的對象 Statement st = conn.createStatement(); int row = st.executeUpdate("insert into user(username,password,sex) values ('"+user.getUsername()+"','"+user.getPassword()+"','"+user.getSex()+"')"); return row; } catch (SQLException e) { throw new UserRegisterException(); } } }
3.service接口設計
package cn.javabs.usermanager.service; import cn.javabs.usermanager.entity.User; public interface UserService { /** * 用戶登錄功能 * @param username 參數 為用戶名 * @param password 參數 為密碼 * @return user */ User userLogin(String username , String password); /** * 用戶注冊 * @param user * @return */ int userRegist(User user); }
serviceImpl
package cn.javabs.usermanager.service.impl; import cn.javabs.usermanager.dao.UserDao; import cn.javabs.usermanager.dao.impl.UserDaoImpl; import cn.javabs.usermanager.entity.User; import cn.javabs.usermanager.service.UserService; public class UserServiceImpl implements UserService { // 采用多態的形式進行實例化dao UserDao dao = new UserDaoImpl(); @Override public User userLogin(String username, String password) { //dao代表的是UserDao 這個接口 // .login 用這個接口中的用戶登錄功能 並且傳了兩個參數給你 return dao.login(username, password); } @Override public int userRegist(User user) { return dao.register(user); } }
UserServlet
package cn.javabs.usermanager.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.javabs.usermanager.entity.User; import cn.javabs.usermanager.service.UserService; import cn.javabs.usermanager.service.impl.UserServiceImpl; public class UserLoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1 set encoding */ response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); /* * 2. get 前台 的 參數 */ String username = request.getParameter("username"); String password = request.getParameter("password"); /* * 3. 將獲取到的用戶名和密碼傳遞給 userService! * 所以 得有 userService 沒有 怎么 辦? 實例化 就有了 */ UserService userService = new UserServiceImpl(); User u = userService.userLogin(username, password);//u可能為前面傳遞過來的user或是null if(u == null){ response.getWriter().write("您的用戶名或密碼有誤,請檢查!"); response.setHeader("Refresh", "5;Url="+ request.getContextPath()); }else{ request.setAttribute("mark", "用戶登錄成功!"); request.getRequestDispatcher("/message.jsp").forward(request, response); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet( request, response); } }
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>注冊</title> </head> <body> <center> <form action="<%=basePath%>servlet/UserRegistServlet" method="post" > <table border="1px" width="438px" > <tr align="center"> <td colspan="2"> <a href="<%=basePath%>login.jsp">如已有用戶,點擊去登錄</a> </td> </tr> <tr align="center"> <td>用戶名</td> <td> <input type="text" name="username" > </td> </tr> <tr align="center"> <td>密碼</td> <td> <input type="password" name="password" > </td> </tr> <tr align="center"> <td>性別</td> <td> 男<input type="radio" name="sex" value="男" checked="checked" > 女<input type="radio" name="sex" value="女" > </td> </tr> <tr align="center"> <td colspan="2" > <input type="submit" value="免費注冊" > <input type="reset" value="重置內容" > </td> </tr> </table> </form> </center> </body> </html>