1、login页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<style type="text/css">
.error{
color:red;
font-size: 14px;
}
</style>
<script type="text/javascript">
//窗体加载事件
window.onload = function () {
//判断在用户点击登录按钮是,文本框中的内容是否为空
//1.获取登录表单对象
var loginForm = document.getElementById("loginForm");
//2.添加提交事件: onblur失去焦点/onfocus获得焦点
loginForm.onsubmit = function(){
var inputName = document.getElementsByName("username")[0].value;
var inputPwd = document.getElementsByName("password")[0].value;
var flag = true;
if(inputName.trim()==""){
document.getElementsByClassName("error")[0].innerHTML = "用户名不能为空";
flag = false;
}else{
document.getElementsByClassName("error")[0].innerHTML = "";
}
if(inputPwd.trim()==""){
document.getElementsByClassName("error")[1].innerHTML = "密码不能为空";
flag = false;
}else{
document.getElementsByClassName("error")[1].innerHTML = "";
}
return flag;
}
}
</script>
</head>
<body>
<form id="loginForm" action="/day18/user" method="post">
<input type="hidden" name="action" value="login"/>
用户名:<input type="text" name="username"/><span class="error"></span><br/>
密码:<input type="password" name="password"/><span class="error"></span><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
2,register页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<style type="text/css">
.error{
color:red;
font-size: 14px;
}
</style>
<script type="text/javascript">
//窗体加载事件
window.onload = function () {
//判断在用户点击登录按钮是,文本框中的内容是否为空
}
</script>
</head>
<body>
<h1>用户注册</h1>
<hr/>
<form id="registerForm" action="/day18/user" method="post">
<input type="hidden" name="action" value="register"/>
用户名:<input type="text" name="username"/><span class="error"></span><br/>
密码:<input type="password" name="password"/><span class="error"></span><br/>
性别:<input type="radio" name="gender" value="男">男 <input type="radio" name="gender" value="女">女<br/>
生日:<input type="text" name="birthday"/><span class="error"></span><br/>
<input type="submit" value="用户注册">
</form>
</body>
</html>
3、utils包
package com.qf.user.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DbUtils {
private static DataSource dataSource;
private static Properties pt;
static {
pt = new Properties();
InputStream ins = DbUtils.class.getResourceAsStream("/db.properties");
try {
pt.load(ins);
dataSource = DruidDataSourceFactory.createDataSource(pt);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getDataSource() {
return dataSource;
}
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(ResultSet res, Statement stm, Connection conn) {
try {
if (res != null) {
res.close();
}
if (stm != null) {
stm.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4、entity包
package com.qf.user.entity;
import java.util.Date;
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private Date birthday;
private Boolean lock;
private Date lastLoginTime;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", birthday=" + birthday +
", lock=" + lock +
", lastLoginTime=" + lastLoginTime +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Boolean getLock() {
return lock;
}
public void setLock(Boolean lock) {
this.lock = lock;
}
public Date getLastLoginTime() {
return lastLoginTime;
}
public void setLastLoginTime(Date lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
public User(Integer id, String username, String password, String gender, Date birthday, Boolean lock, Date lastLoginTime) {
this.id = id;
this.username = username;
this.password = password;
this.gender = gender;
this.birthday = birthday;
this.lock = lock;
this.lastLoginTime = lastLoginTime;
}
public User() {
}
}
5、dao包(接口)
package com.qf.user.dao;
import com.qf.user.entity.User;
public interface UserDAO {
/**
* 根据用户名查询
* @param username
* @return
*/
public abstract User findByName(String username);
/**
* 添加用户
* @param user
* @return
*/
public abstract User add(User user);
}
6、dao包(实现类)
package com.qf.user.dao.impl;
import com.qf.user.dao.UserDAO;
import com.qf.user.entity.User;
import com.qf.user.utils.DbUtils;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
public class UserDAOImpl implements UserDAO{
private QueryRunner queryRunner = new QueryRunner(DbUtils.getDataSource());
private Map<String,String> map = new HashMap<>();
{
map.put("last_login_time","lastLoginTime");
}
@Override
public User findByName(String username) {
String sql = "select * from users where username=?";
try {
User user = queryRunner.query(sql,new BeanHandler<User>(User.class,new BasicRowProcessor(new BeanProcessor(map))),username);
return user;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public User add(User user) {
String sql = "insert into users values(null,?,?,?,?,1,null);";
Object[] param = {user.getUsername(),user.getPassword(),user.getGender(),user.getBirthday()};
try {
int rows = queryRunner.update(sql,param);
if(rows > 0){
sql = "select last_insert_id();";
BigInteger id = queryRunner.query(sql,new ScalarHandler<BigInteger>());
user.setId(id.intValue());
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
7、service(接口)
package com.qf.user.service;
import com.qf.user.entity.User;
public interface UserService {
/**
* 实现用户登录
* @param username
* @param password
* @return
*/
public abstract User login(String username,String password);
/**
* 实现用户注册
* @param user
* @return
*/
public abstract User register(User user);
}
8、service(实现类)
package com.qf.user.service.impl;
import com.qf.user.dao.UserDAO;
import com.qf.user.dao.impl.UserDAOImpl;
import com.qf.user.entity.User;
import com.qf.user.service.UserService;
public class UserServiceImpl implements UserService{
private UserDAO userDAO = new UserDAOImpl();
@Override
public User login(String username, String password) {
User user = userDAO.findByName(username);
if(user!=null) {
if (user.getPassword().equalsIgnoreCase(password)) {
return user;
}
}
return null;
}
@Override
public User register(User user) {
return userDAO.add(user);
}
}
9、servlet包
package com.qf.user.servlet;
import com.qf.user.entity.User;
import com.qf.user.service.UserService;
import com.qf.user.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet(urlPatterns = "/user")
public class UserServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//指定客户端传递给服务器的编码格式
resp.setContentType("text/html;charset=utf-8");//MIME注意,该行要写在第一行
String action = req.getParameter("action");//null
UserService userService = new UserServiceImpl();
PrintWriter printWriter = resp.getWriter();
if("login".equalsIgnoreCase(action)){
//1.获取表单数据
String username = req.getParameter("username");
String password = req.getParameter("password");
//2.用户验证
User login = userService.login(username, password);
//3.显示用户信息
if(login == null){
printWriter.println("登录失败!用户名密码错误!<a href='/day18/register.html'>请注册</a>");
}else{
printWriter.print("恭喜,登录成功!");
printWriter.println("用户信息如下:"+login);
}
}else if("register".equalsIgnoreCase(action)){
//注册
System.out.println("用户注册");
//1.获取用户数据
String username = req.getParameter("username");
String password = req.getParameter("password");
String gender = req.getParameter("gender");
//2.封装对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setGender(gender);
//将字符串转换成Date类型
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date birthday = null;
try {
birthday = dateFormat.parse(req.getParameter("birthday"));
} catch (ParseException e) {
e.printStackTrace();
}
user.setBirthday(birthday);
//3.用户注册
User retUser = userService.register(user);
//4.页面跳转
printWriter.println("<script>alert('注册成功!');location.href='/day18/login.html';</script>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}