项目结构
controller:调用方法实现操作
dao:对数据库的相关操作
domain:实体类存放数据
service:业务逻辑
utils:工具
validate:用于数据验证
file:配置文件
lib:存放jar包(注意放入文件夹后需右键点击Add as Libray加入工作环境)
Dao层
新建数据库(MySQL)
使用可视化工具建表
新建1个User类用于存放数据(domain目录下)
package com.org.domain;
import java.util.Date;
/**
* 用户类
* */
public class User {
private String username;
private String password;
private String gender;
private String hobby;
private String address;
private String remark;
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 String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public User(String username, String password, String gender, String hobby, String address, String remark) {
this.username = username;
this.password = password;
this.gender = gender;
this.hobby = hobby;
this.address = address;
this.remark = remark;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", hobby='" + hobby + '\'' +
", address='" + address + '\'' +
", remark='" + remark + '\'' +
'}';
}
}
DBUser类:连接数据库(utils目录下)
package com.org.utils;
import java.sql.*;
import java.util.Properties;
/**
* 连接数据库
*/
public class DBUtils {
private static String driver;
private static String url;
private static String user;
private static String password;
//优化:只需连接一次数据库
static {
//获取配置信息
Properties properties = ReadFileDemo.readFilef("file/db.properties");
driver = (String) properties.get("driver");
url = (String) properties.get("url");
user = (String) properties.get("user");
password = (String) properties.get("password");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//连接数据库
public static Connection getConnection(){
//加载驱动
try {
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
}
catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭数据库连接资源
public static void closeDB(Connection conn, PreparedStatement ps, ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
UserDao类 :User对数据库的操作(dao目录下)
package com.org.dao;
import com.org.domain.User;
import com.org.utils.DBUtils;
import com.org.utils.ReadFileDemo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* 处理User的数据存放
*/
public class UserDao {
//根据用户名和密码查询用户
public boolean findUserByNamePassword(String username,String password){
Connection conn = null;
PreparedStatement ps = null;
String sql=null;
ResultSet rs = null;
boolean flag = false;
try {
conn = DBUtils.getConnection();
sql = "select id from user where username=? and password=?";
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs = ps.executeQuery();
while (rs.next()){
if (rs.getInt(1)>0){
flag = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
DBUtils.closeDB(conn,ps,rs);
return flag;
}
//根据用户名查询用户
public boolean findUserByName(String username){
Connection conn = null;
PreparedStatement ps = null;
String sql=null;
ResultSet rs = null;
boolean flag = false;
try {
conn = DBUtils.getConnection();
sql = "select id from user where username=?";
ps = conn.prepareStatement(sql);
ps.setString(1,username);
rs = ps.executeQuery();
while (rs.next()){
if (rs.getInt(1)>0){
flag = true;
return flag;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
DBUtils.closeDB(conn,ps,rs);
return flag;
}
//添加用户
public int addUser(User user){
Connection conn = null;
PreparedStatement ps = null;
String sql=null;
int flag = 0;
try {
conn = DBUtils.getConnection();
sql="insert into user(username,password,gender,hobby,address,remark)value(?,?,?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.setString(3, user.getGender());
ps.setString(4, user.getHobby());
ps.setString(5, user.getAddress());
ps.setString(6, user.getRemark());
flag = ps.executeUpdate();
return flag;
} catch (SQLException e) {
e.printStackTrace();
}
DBUtils.closeDB(conn,ps,null);
return 0;
}
}
Service层
UserService类:User的业务逻辑(Service目录下)
package com.org.service;
import com.org.dao.UserDao;
import com.org.domain.User;
import java.util.List;
/**
* 处理User的业务
*/
public class UserService {
/**
* 用户登录
*/
public boolean login(String username,String password){
UserDao userDao = new UserDao();
boolean flag = userDao.findUserByNamePassword(username, password);
return flag;
}
/**
* 注册用户
* (0代表注册失败,1代表注册成功,2代表用户已存在)
* @param user
* @return
*/
public int register(User user){
UserDao userDao = new UserDao();
boolean flag = userDao.findUserByName(user.getUsername());
int start = 0;
if (flag){
//用户存在
start = 2;
}else {
int i = userDao.addUser(user);
//注册成功
if (i>0){
start = 1;
}
//注册失败
else {
start = 0;
}
}
return start;
}
}
Controller层
UserController类:调用方法实现业务(controller目录下)
package com.org.controller;
import com.org.dao.UserDao;
import com.org.domain.User;
import com.org.service.UserService;
import com.org.utils.ArrayToString;
import com.org.validate.ValidateDemo;
import org.apache.commons.beanutils.BeanUtils;
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.lang.reflect.InvocationTargetException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* 用户操作
*/
@WebServlet("/UserController")
public class UserController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取隐藏域的值
String userAction = req.getParameter("userAction");
//登录
if ("login".equals(userAction)){
User user = new User();
try {
BeanUtils.populate(user,req.getParameterMap());
Map<String, String> error = ValidateDemo.validate(user);
if (error.isEmpty()){
UserService userService = new UserService();
boolean flag = userService.login(user.getUsername(), user.getPassword());
List userinfor = userService.showUser();
if (flag){
//登录成功
String username = URLEncoder.encode(user.getUsername(),"utf-8");
resp.sendRedirect("/formdemo/index.jsp?username="+username);
}else {
//登录失败
req.setAttribute("fail","登录失败!");
req.getRequestDispatcher("/login1.jsp").forward(req,resp);
}
}else {
req.setAttribute("error",error);
req.getRequestDispatcher("/login1.jsp").forward(req,resp);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
//注册
if ("register".equals(userAction)){
User user = new User();
try {
BeanUtils.populate(user,req.getParameterMap());
user.setHobby(ArrayToString.arrayToString(req.getParameterValues("hobby")));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//验证数据
Map<String, String> error = ValidateDemo.validate(user);
//如果没有数据跳转到注册成功页面
if (error.isEmpty()){
UserService userService = new UserService();
int register = userService.register(user);
if (register == 0) {
resp.sendRedirect("/formdemo/fail.jsp");
}
if (register == 1){
resp.sendRedirect("/formdemo/success.jsp");
}
if (register == 2){
resp.sendRedirect("/formdemo/register.jsp?register=" + URLEncoder.encode("该用户已存在","utf-8"));
}
}else {
//如果有数据就携带数据跳转回到注册页面
req.setAttribute("error",error);
req.getRequestDispatcher("/register.jsp").forward(req,resp);
}
}
}
}
创建网页界面
fail:注册失败页面
index:主页
login1:登录页面
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Asus
Date: 2023/9/27
Time: 10:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
HashMap<String,String> error = (HashMap<String,String>)request.getAttribute("error");
String fail = (String)request.getAttribute("fail");
%>
//获取验证数据
<div style="width:100%; text-align: center"><%=fail==null?"":fail%></div>
<form action="UserController" method="post">
<input type="hidden" value="login" name="userAction">
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<th colspan="2">登录</th>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"><%=error==null?"":error.get("username")==null?"":error.get("username")%></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"><%=error==null?"":error.get("password")==null?"":error.get("password")%></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="登录">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
register:注册页面
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Asus
Date: 2023/9/21
Time: 11:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
HashMap<String,String> error = (HashMap<String,String>)request.getAttribute("error");
String register = request.getParameter("register");
%>
<div>
//获取验证提示
<div style="width:100%; text-align: center"><%=register==null?"":register%></div>
<form action="UserController" method="post">
<input type="hidden" value="register" name="userAction">
<table border="1" cellpadding="0" cellspacing="0" width="50%" height="500px" align="center">
<tr>
<td colspan="2" align="center">用户注册</td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" value="" name="username"></td>
<%=error==null?"":error.get("username")==null?"":error.get("username")%>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" value="" name="password"></td>
<%=error==null?"":error.get("password")==null?"":error.get("password")%>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" value="男" name="gender">男
<input type="radio" value="女" name="gender">女
</td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" value="篮球" name="hobby">篮球
<input type="checkbox" value="唱" name="hobby">唱
<input type="checkbox" value="跳" name="hobby">跳
<input type="checkbox" value="rap" name="hobby">rap
</td>
</tr>
<tr>
<td>地址:</td>
<td>
<select name="address">
<option value="北京">北京</option>
<option value="四川">四川</option>
<option value="广州">广州</option>
<option value="上海">上海</option>
</select>
</td>
</tr>
<tr>
<td>备注:</td>
<td>
<textarea cols="80" rows="20" name="remark">
</textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
success:注册成功页面
运行结果
输入数据
数据已存入数据库
显示注册成功后前往登录
点击登录
最后出现欢迎的字幕成功登录