?思考 : 需要創建實體類嗎? 需要創建表嗎
|----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 {@Overridepublic User login(String username, String password) {try {Connection con = JdbcUtil.getConnection();// 通過con 鏈接創建一個執行SQL語句的對象StatementStatement 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();}}@Overridepublic 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();@Overridepublic User userLogin(String username, String password) {//dao代表的是UserDao 這個接口
// .login 用這個接口中的用戶登錄功能 并且傳了兩個參數給你return dao.login(username, password);}@Overridepublic 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或是nullif(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>