思考 : 需要創建實體類嗎? 需要創建表嗎
|----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>
