Compare commits

...

9 Commits

@ -5,53 +5,68 @@ package com.yj.bean;
* @create 2020-08-21 10:41
*/
public class User {
// 用户ID使用Integer类型以便于处理数据库中的null值
private Integer id;
// 用户名
private String username;
// 密码
private String password;
// 邮箱地址
private String email;
// 用户地址
private String address;
// 获取用户地址
public String getAddress() {
return address;
}
// 设置用户地址
public void setAddress(String address) {
this.address = address;
}
// 获取用户ID
public Integer getId() {
return id;
}
// 设置用户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 getEmail() {
return email;
}
// 设置邮箱
public void setEmail(String email) {
this.email = email;
}
// 重写toString方法方便输出用户信息
@Override
public String toString() {
return "User{" +
@ -63,9 +78,11 @@ public class User {
'}';
}
// 无参构造函数
public User() {
}
// 带参数的构造函数,用于创建用户对象时初始化属性
public User(Integer id, String username, String password, String email, String address) {
this.id = id;
this.username = username;
@ -74,3 +91,4 @@ public class User {
this.address = address;
}
}

@ -5,6 +5,7 @@ import com.yj.bean.User;
import java.util.List;
/**
* 访
* @author yj
* @create 2020-08-21 11:57
*/
@ -19,30 +20,64 @@ public interface UserDao {
/**
*
* @param username
* @param password
* @param username
* @param password
* @return null
*/
public User querybyUsernameAndPassword(String username,String password);
public User querybyUsernameAndPassword(String username, String password);
/**
*
* @param user
* @return
* @param user
* @return
*/
public int saveUser(User user);
/**
*
* @param user
* @return
*/
public int addUser(User user);
/**
* ID
* @param i ID
* @return
*/
public int deleteUserById(int i);
/**
*
* @param user
* @return
*/
public int updateUser(User user);
/**
* ID
* @param id ID
* @return null
*/
public User queryUserById(Integer id);
/**
*
* @return
*/
public List<User> queryUsers();
/**
*
* @return
*/
public Integer queryForPageTotalCount();
/**
*
* @param begin
* @param pageSize
* @return
*/
public List<User> queryForPageItems(int begin, int pageSize);
}

@ -10,56 +10,77 @@ import java.util.List;
* @create 2020-08-21 15:04
*/
public class UserDaoImpl extends BaseDao implements UserDao {
// 根据用户名查询用户信息
@Override
public User querybyUsername(String username) {
// SQL 查询语句,选择 t_user 表中的相关字段
String sql = "select `id`,`username`,`password`,`email`,`address` from t_user where username = ?";
return queryForOne(User.class,sql,username);
// 执行查询并返回单个 User 对象
return queryForOne(User.class, sql, username);
}
// 根据用户名和密码查询用户信息
@Override
public User querybyUsernameAndPassword(String username, String password) {
// SQL 查询语句,通过用户名和密码查找用户
String sql = "select * from t_user where username = ? and password = ?";
return queryForOne(User.class,sql,username,password);
// 执行查询并返回单个 User 对象
return queryForOne(User.class, sql, username, password);
}
// 保存用户信息
@Override
public int saveUser(User user) {
// SQL 插入语句,向 t_user 表中插入新的用户数据
String sql = "insert into t_user(`username`,`password`,`email`,`address`) values(?,?,?,?)";
return update(sql,user.getUsername(),user.getPassword(),user.getEmail(),user.getAddress());
// 执行更新操作,返回受影响的行数
return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress());
}
// 添加用户信息(功能与 saveUser 相同)
@Override
public int addUser(User user) {
// SQL 插入语句,向 t_user 表中插入新的用户数据
String sql = "insert into t_user(`username`,`password`,`email`,`address`) values(?,?,?,?)";
return update(sql,user.getUsername(),user.getPassword(),user.getEmail(),user.getAddress());
// 执行更新操作,返回受影响的行数
return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress());
}
// 根据用户 ID 删除用户信息
@Override
public int deleteUserById(int i) {
// SQL 删除语句,根据用户 ID 删除对应的记录
String sql = "delete from t_user where id = ?";
return update(sql,i);
// 执行更新操作,返回受影响的行数
return update(sql, i);
}
// 更新用户信息
@Override
public int updateUser(User user) {
// SQL 更新语句,根据用户 ID 更新用户的各项信息
String sql = "update t_user set `username`=?,`password`=?,`email`=?,`address`=? where id=?";
return update(sql,user.getUsername(),user.getPassword(),user.getEmail(),user.getAddress(),user.getId());
// 执行更新操作,返回受影响的行数
return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress(), user.getId());
}
@Override
public User queryUserById(Integer id) {
// 根据用户ID查询单个用户信息
String sql = "select * from t_user where id=?";
return queryForOne(User.class,sql,id);
return queryForOne(User.class, sql, id);
}
@Override
public List<User> queryUsers() {
// 查询所有用户信息
String sql = "select * from t_user";
return queryForList(User.class,sql);
return queryForList(User.class, sql);
}
@Override
public Integer queryForPageTotalCount() {
// 查询用户表中总记录数,以便进行分页
String sql = "select count(*) from t_user";
Number count = (Number) queryForSingleValue(sql);
return count.intValue();
@ -67,7 +88,9 @@ public class UserDaoImpl extends BaseDao implements UserDao {
@Override
public List<User> queryForPageItems(int begin, int pageSize) {
// 通过指定的偏移量和页面大小查询特定页的用户信息
String sql = "select * from t_user limit ?,?";
return queryForList(User.class,sql,begin,pageSize);
return queryForList(User.class, sql, begin, pageSize);
}
}

@ -7,39 +7,68 @@ import com.yj.bean.User;
import java.util.List;
/**
*
* @author yj
* @create 2020-08-21 15:29
*/
public interface UserService {
/**
*
* @param user
* @param user
*/
public void registUser(User user);
/**
*
* @param user
* @return
*
* @param user
* @return null
*/
public User login(User user);
/**
*
* @param username
* @param username
* @return truefalse
*/
public boolean existsUsername(String username);
/**
*
* @param user
*/
public void addUser(User user);
public void deleteUserById(int i);
/**
* ID
* @param id ID
*/
public void deleteUserById(int id);
/**
*
* @param user
*/
public void updateUser(User user);
/**
* ID
* @param id ID
* @return null
*/
public User queryUserById(Integer id);
/**
*
* @return
*/
public List<User> queryUsers();
/**
*
* @param pageNo
* @param pageSize
* @return
*/
public Page<User> page(int pageNo, int pageSize);
}

@ -15,84 +15,124 @@ import java.util.List;
*/
public class UserServiceImpl implements UserService {
// 用户数据访问对象使用UserDaoImpl实现
private UserDao userDao = new UserDaoImpl();
/**
*
* @param user
*/
@Override
public void registUser(User user) {
userDao.saveUser(user);
userDao.saveUser(user); // 保存用户信息
}
/**
*
* @param user
* @return null
*/
@Override
public User login(User user) {
return userDao.querybyUsernameAndPassword(user.getUsername(),user.getPassword());
return userDao.querybyUsernameAndPassword(user.getUsername(), user.getPassword()); // 验证用户名和密码
}
/**
*
* @param username
* @return falsetrue
*/
@Override
public boolean existsUsername(String username) {
if (userDao.querybyUsername(username) == null) {
return false;
return false; // 用户名不存在
} else {
return true;
return true; // 用户名存在
}
}
/**
*
* @param user
*/
@Override
public void addUser(User user) {
userDao.addUser(user);
userDao.addUser(user); // 调用数据访问层添加用户
}
/**
* ID
* @param i ID
*/
@Override
public void deleteUserById(int i) {
userDao.deleteUserById(i);
userDao.deleteUserById(i); // 调用数据访问层删除用户
}
/**
*
* @param user
*/
@Override
public void updateUser(User user) {
userDao.updateUser(user);
userDao.updateUser(user); // 调用数据访问层更新用户
}
/**
* ID
* @param id ID
* @return null
*/
@Override
public User queryUserById(Integer id) {
return userDao.queryUserById(id);
return userDao.queryUserById(id); // 调用数据访问层查询用户
}
/**
*
* @return
*/
@Override
public List<User> queryUsers() {
return userDao.queryUsers();
return userDao.queryUsers(); // 调用数据访问层获取所有用户
}
@Override
public Page<User> page(int pageNo, int pageSize) {
Page<User> page = new Page<User>();
Page<User> page = new Page<User>(); // 创建一个新的分页对象
//设置每页记录数
page.setPageSize(pageSize);
// 设置每页记录数
page.setPageSize(pageSize); // 将每页的记录数设置为方法传入的pageSize
//设置总记录数
Integer pageTotalCount = userDao.queryForPageTotalCount();
page.setPageTotalCount(pageTotalCount);
// 设置总记录数
Integer pageTotalCount = userDao.queryForPageTotalCount(); // 从数据库中获取总记录数
page.setPageTotalCount(pageTotalCount); // 将总记录数设置到分页对象中
//总页码
Integer pageTotal = pageTotalCount / pageSize;
if(pageTotalCount % pageSize >0) {
pageTotal+=1;
// 计算总页码
Integer pageTotal = pageTotalCount / pageSize; // 根据总记录数和每页大小计算总页数
if (pageTotalCount % pageSize > 0) { // 如果有剩余记录,则总页数加一
pageTotal += 1;
}
//设置当前页
if(pageNo>pageTotal) {
// 设置当前页
if (pageNo > pageTotal) { // 如果请求的当前页码大于总页码,则设置为最后一页
pageNo = pageTotal;
}
if(pageNo<1) {
if (pageNo < 1) { // 如果请求的当前页码小于1则设置为第一页
pageNo = 1;
}
page.setPageNo(pageNo);
//设置总页码
page.setPageTotal(pageTotal);
page.setPageNo(pageNo); // 将最终确定的当前页码设置到分页对象中
// 设置总页码
page.setPageTotal(pageTotal); // 将计算出来的总页码设置到分页对象中
int begin = (page.getPageNo() -1)*pageSize;
List<User> items = userDao.queryForPageItems(begin,pageSize);
page.setItems(items);
// 计算当前页的起始记录索引
int begin = (page.getPageNo() - 1) * pageSize; // 计算当前页的开始位置
// 查询当前页的数据项
List<User> items = userDao.queryForPageItems(begin, pageSize); // 从数据库中查询当前页的数据
page.setItems(items); // 将查询到的数据设置到分页对象中
return page;
return page; // 返回包含分页信息的分页对象
}
}

@ -13,67 +13,102 @@ import java.util.List;
* @author yj
* @create 2020-08-21 15:14
*/
import org.junit.Test;
public class UserDaoTest {
UserDao userDao = new UserDaoImpl();
// 创建UserDao的实例用于测试
UserDao userDao = new UserDaoImpl();
/**
*
* null
*/
@Test
public void querybyUsername() {
if(userDao.querybyUsername("yan1gjie")==null) {
if (userDao.querybyUsername("yan1gjie") == null) {
System.out.println("用户名可用");
} else {
System.out.println("用户名已存在!");
}
//System.out.println(userDao.querybyUsername("yangjie"));
// System.out.println(userDao.querybyUsername("yangjie"));
}
/**
*
* null
*/
@Test
public void querybyUsernameAndPassword() {
if(userDao.querybyUsernameAndPassword("yagjie","yanjie")==null) {
if (userDao.querybyUsernameAndPassword("yagjie", "yanjie") == null) {
System.out.println("密码错误或用户名错误");
}else {
} else {
System.out.println("登陆成功");
}
}
/**
*
*
*/
@Test
public void saveUser() {
System.out.println(userDao.saveUser(new User(null,"yangjie2","yangjie","wzg168@qq.com","大河湾")));
System.out.println(userDao.saveUser(new User(null, "yangjie2", "yangjie", "wzg168@qq.com", "大河湾")));
}
/**
*
*
*/
@Test
public void addUser() {
System.out.println(userDao.addUser(new User(null,"舒胡2贤","123456","123456@qq.com","贵州")));
System.out.println(userDao.addUser(new User(null, "舒胡2贤", "123456", "123456@qq.com", "贵州")));
}
/**
* ID
*
*/
@Test
public void deleteUserById() {
System.out.println(userDao.deleteUserById(3));
}
/**
*
*
*/
@Test
public void updateUser() {
System.out.println(userDao.updateUser(new User(3,"舒胡贤","123456","123456@qq.com","贵州")));
System.out.println(userDao.updateUser(new User(3, "舒胡贤", "123456", "123456@qq.com", "贵州")));
}
@Test
public void queryUserById() {
// 根据用户ID查询用户信息
User user = userDao.queryUserById(1);
// 输出查询到的用户信息
System.out.println(user);
}
@Test
public void queryUsers() {
// 查询所有用户的信息
List<User> users = userDao.queryUsers();
// 输出所有用户的信息
System.out.println(users);
}
@Test
public void queryForPageTotalCount() {
// 查询用户总数,用于分页功能
System.out.println(userDao.queryForPageTotalCount());
}
@Test
public void queryForPageItems() {
System.out.println(userDao.queryForPageItems(1,2));
// 查询指定页码和每页数量的用户信息
// 这里查询第一页的2条用户记录
System.out.println(userDao.queryForPageItems(1, 2));
}
}

@ -6,35 +6,43 @@ import com.yj.service.impl.UserServiceImpl;
import org.junit.Test;
/**
*
* @author yj
* @create 2020-08-21 15:38
*/
public class UserServiceImplTest {
// 创建UserService的实例
UserService userService = new UserServiceImpl();
@Test
public void registUser() {
userService.registUser(new User(null,"admin","admin","225@qq.com","大河湾"
));
// 测试用户注册功能,创建一个新的用户对象并进行注册
userService.registUser(new User(null, "admin", "admin", "225@qq.com", "大河湾"));
}
@Test
public void login() {
if(userService.login(new User(null,"admin123","admin",null,"大河湾"))==null) {
// 测试用户登录功能
// 创建一个用户对象用于登录验证
if (userService.login(new User(null, "admin123", "admin", null, "大河湾")) == null) {
// 如果登录返回为null则输出登录失败
System.out.println("登录失败");
} else {
System.out.println("登陆成功");
// 登录成功的情况下输出提示
System.out.println("登陆成功");
}
}
@Test
public void existsUsername() {
if(userService.existsUsername("admin35135")==false) {
// 测试用户名是否存在的方法
if (userService.existsUsername("admin35135") == false) {
// 如果用户名不存在,输出可用提示
System.out.println("用户名可用");
} else {
System.out.println("用户名已存在");
// 如果用户名已存在,输出提示
System.out.println("用户名已存在");
}
}
}
}

@ -8,34 +8,61 @@ import org.junit.Test;
import static org.junit.Assert.*;
/**
* UserService
* @author yj
* @create 2020-10-21 18:50
*/
public class UserServiceTest {
// 创建UserService的实例使用UserServiceImpl实现类
UserService userService = new UserServiceImpl();
/**
*
*/
@Test
public void addUser() {
userService.addUser(new User(null,"舒胡贤2","kj","1234@qq.com","kjk"));
// 调用addUser方法添加一个新的用户
userService.addUser(new User(null, "舒胡贤2", "kj", "1234@qq.com", "kjk"));
}
/**
* ID
*/
@Test
public void deleteUserById() {
// 调用deleteUserById方法根据用户ID删除用户此处示例为删除ID为3的用户
userService.deleteUserById(3);
}
/**
*
*/
@Test
public void updateUser() {
// 该方法尚未实现,用于测试更新用户信息的逻辑
}
/**
* ID
*/
@Test
public void queryUserById() {
// 该方法尚未实现用于测试根据用户ID查询用户的逻辑
}
/**
*
*/
@Test
public void queryUsers() {
// 该方法尚未实现,用于测试查询所有用户的逻辑
}
/**
*
*/
@Test
public void page() {
// 该方法尚未实现,用于测试分页查询用户的逻辑
}
}
}

@ -21,59 +21,71 @@ import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY;
*/
public class UserServlet extends BaseServlet {
// 创建UserService的实例使用UserServiceImpl实现类
private UserService userService = new UserServiceImpl();
protected void ajaxExistsusername(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
// 获取请求参数中的用户名
String username = req.getParameter("username");
//调用userService.existsUsername
boolean exitsUsername = userService.existsUsername(username);
//把返回的结果封装为map对象
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("exitsUsername",exitsUsername);
// 调用userService.existsUsername()方法,检查用户名是否存在
boolean existsUsername = userService.existsUsername(username);
// 将返回的结果封装为Map对象
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("existsUsername", existsUsername); // 存在性结果存入Map
// 使用Gson库将Map对象转换为JSON格式的字符串
Gson gson = new Gson();
String json = gson.toJson(resultMap);
resp.getWriter().write(json);
// 将JSON字符串写入响应中返回给客户端
resp.getWriter().write(json);
}
/**
*
* @param req
* @param resp
*
* @param req HttpServletRequest
* @param resp HttpServletResponse
* @throws ServletException
* @throws IOException
*/
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、获取请求的参数
// 1、获取请求的参数(用户名和密码)
String username = req.getParameter("username");
String password = req.getParameter("password");
User loginUser = userService.login(new User(null, username, password, null,null));
if(loginUser==null)
{
req.setAttribute("msg","用户名或密码错误!");
//req.setAttribute("username",username);
req.getRequestDispatcher("/pages/user/login.jsp").forward(req, resp);
// 2、调用userService.login()方法进行登录验证创建User对象传递用户名和密码
User loginUser = userService.login(new User(null, username, password, null, null));
// 3、检查登录结果
if (loginUser == null) {
// 登录失败,设置错误信息并转发到登录页面
req.setAttribute("msg", "用户名或密码错误!"); // 设置错误消息
// req.setAttribute("username", username); // 可选:保存用户名以便回显
req.getRequestDispatcher("/pages/user/login.jsp").forward(req, resp); // 转发请求
} else {
//保存用户登录的信息到session域中
req.getSession().setAttribute("user",loginUser);
// 登录成功将用户信息保存到session域中以便后续使用
req.getSession().setAttribute("user", loginUser);
// 转发到登录成功页面
req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req, resp);
}
}
/**
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*
*
* @param req HttpServletRequest
* @param resp HttpServletResponse
* @throws ServletException
* @throws IOException
*/
protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 使当前会话失效清除所有用户相关的session数据
req.getSession().invalidate();
// 重定向到应用的根路径,以返回主页或登录页面
resp.sendRedirect(req.getContextPath());
}
@ -85,30 +97,32 @@ public class UserServlet extends BaseServlet {
* @throws IOException
*/
protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取Session验证码
// 获取Session中存储的验证码
String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
//删除Session中的验证码
// 删除Session中的验证码,以防止重复使用
req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
//1、获取请求的参数
// 1、获取请求的参数包括用户名、密码、确认密码、邮箱和验证码
String username = req.getParameter("username");
String password = req.getParameter("password");
String repwd = req.getParameter("repwd");
String email = req.getParameter("email");
String code = req.getParameter("code");
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(),new User());
//2、检查验证码是否正确 abcde
if (token!=null&&token.equalsIgnoreCase(code)) {
//3、检查用户名是否可用
// 将请求参数复制到User对象中
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(), new User());
// 2、检查验证码是否正确
if (token != null && token.equalsIgnoreCase(code)) {
// 3、检查用户名是否已被注册
if (userService.existsUsername(username)) {
//不可用 跳回注册页面
req.setAttribute("msg","用户名已存在!");
req.setAttribute("username",username);
req.setAttribute("email",email);
// 如果用户名已存在,设置错误信息并转发回注册页面
req.setAttribute("msg", "用户名已存在!");
req.setAttribute("username", username); // 保留输入的用户名以便于用户填写
req.setAttribute("email", email); // 保留输入的邮箱
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req, resp);
} else {
//可用 调用service保存到数据库 跳到注册成功页面
// 如果用户名可用,调用服务层方法将用户信息保存到数据库,并转发到注册成功页面
userService.registUser(user);
req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req, resp);
}
@ -124,10 +138,19 @@ public class UserServlet extends BaseServlet {
}
protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(),new User());
// 1、将请求参数复制到User对象中
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(), new User());
// 2、调用服务层方法更新用户信息
userService.updateUser(user);
// 3、根据用户ID查询更新后的用户信息
User user1 = userService.queryUserById(user.getId());
req.getSession().setAttribute("user",user1);
// 4、将更新后的用户信息存储到Session中以便后续使用
req.getSession().setAttribute("user", user1);
// 5、重定向到用户信息页面展示更新后的信息
resp.sendRedirect(req.getContextPath() + "/pages/user/userinfo.jsp");
}

@ -2,96 +2,92 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<%@include file="/pages/common/header.jsp"%>
<script type="text/javascript">
// 页面加载完成之后
$(function(){
// 给注册按钮添加事件
$("#sub_btn").click(function(){
// 获取用户名
var usernameValue = $("#username").val();
// 验证用户名是否合法,规则如下必须由字母数字下划线组成并且长度为5到15位。
var usernameReg = /^\w{5,15}$/;
// 验证用户信息
if (!usernameReg.test(usernameValue)) {
// 提示用户
$("span.errorMsg").text("用户名不合法!");
return false;
}
// 获取密码
var passwordValue = $("#password").val();
// 验证密码是否合法,规则如下必须由字母数字下划线组成并且长度为5到15位。
var passwordReg = /^\w{5,15}$/;
// 验证用户信息
if (!passwordReg.test(passwordValue)) {
// 提示用户
$("span.errorMsg").text("密码不合法!");
return false;
}
// 阻止表单提交
return true;
});
});
<meta charset="UTF-8">
<title>登录页面</title>
<%@include file="/pages/common/header.jsp"%> <!-- 引入公共头部文件 -->
<script type="text/javascript">
// 页面加载完成后执行
$(function(){
// 给注册按钮添加点击事件
$("#sub_btn").click(function(){
// 获取用户名输入框的值
var usernameValue = $("#username").val();
// 定义正则表达式,验证用户名是否合法 (由字母、数字、下划线组成长度5到15位)
var usernameReg = /^\w{5,15}$/;
// 验证用户名信息
if (!usernameReg.test(usernameValue)) {
// 如果不合法,提示用户
$("span.errorMsg").text("用户名不合法!");
return false; // 阻止表单提交
}
</script>
// 获取密码输入框的值
var passwordValue = $("#password").val();
// 定义正则表达式,验证密码是否合法(同样的规则)
var passwordReg = /^\w{5,15}$/;
// 验证密码信息
if (!passwordReg.test(passwordValue)) {
// 如果不合法,提示用户
$("span.errorMsg").text("密码不合法!");
return false; // 阻止表单提交
}
// 如果验证通过,允许表单提交
return true;
});
});
</script>
</head>
<body>
<div id="login_header">
<img class="logo_img" alt="" src="static/img/logo.jpg" >
</div>
<div class="login_banner">
<div id="l_content">
<span class="login_word">欢迎登录</span>
<div id="login_header">
<img class="logo_img" alt="" src="static/img/logo.jpg"> <!-- 显示网站的logo -->
</div>
<div class="login_banner">
<div id="l_content">
<span class="login_word">欢迎登录</span> <!-- 登录页面的欢迎词 -->
</div>
<div id="content">
<div class="login_form">
<div class="login_box">
<div class="tit">
<h1>书城会员</h1> <!-- 登录框标题 -->
<a href="pages/user/regist.jsp">立即注册</a> <!-- 注册链接,点击后跳转到注册页面 -->
</div>
<div id="content">
<div class="login_form">
<div class="login_box">
<div class="tit">
<h1>书城会员</h1>
<a href="pages/user/regist.jsp">立即注册</a>
</div>
<div class="msg_cont">
<b></b>
<span class="errorMsg">
<div class="msg_cont">
<b></b>
<span class="errorMsg">
<%--<%=request.getAttribute("msg")==null?"请输入用户名和密码":request.getAttribute("msg")%>--%>
${empty requestScope.msg ? "请输入用户名和密码":requestScope.msg}
${empty requestScope.msg ? "请输入用户名和密码":requestScope.msg} <!-- 显示错误信息,若有则显示 -->
</span>
</div>
<div class="form">
<form action="userServlet" method="post">
<input type="hidden" name="action" value="login">
<label>用户名称:</label>
<input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off"
tabindex="1" name="username" id="username"
value="${requestScope.username}"
/>
<br />
<br />
<label>用户密码:</label>
<input class="itxt" type="password" placeholder="请输入密码" autocomplete="off"
tabindex="1" name="password" id="password"
/>
<br />
<br />
<input type="submit" value="登录" id="sub_btn" />
</form>
</div>
</div>
</div>
</div>
<div class="form">
<form action="userServlet" method="post"> <!-- 表单提交至userServlet处理登录 -->
<input type="hidden" name="action" value="login"> <!-- 隐藏字段,指明操作为登录 -->
<label>用户名称:</label>
<input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off"
tabindex="1" name="username" id="username"
value="${requestScope.username}" /> <!-- 用户名输入框 -->
<br />
<br />
<label>用户密码:</label>
<input class="itxt" type="password" placeholder="请输入密码" autocomplete="off"
tabindex="1" name="password" id="password" /> <!-- 密码输入框 -->
<br />
<br />
<input type="submit" value="登录" id="sub_btn" /> <!-- 登录按钮 -->
</form>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%>
</div>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共底部文件 -->
</body>
</html>
</html>

@ -2,32 +2,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录成功页面</title>
<%@include file="/pages/common/header.jsp"%>
<style type="text/css">
h1 {
text-align: center;
margin-top: 200px;
}
h1 a {
color:red;
}
</style>
<meta charset="UTF-8"> <!-- 设置字符编码为UTF-8 -->
<title>登录成功页面</title> <!-- 页面标题 -->
<%@include file="/pages/common/header.jsp"%> <!-- 引入公共头部文件 -->
<style type="text/css">
h1 {
text-align: center; <!-- 使h1内容居中对齐 -->
margin-top: 200px; <!-- 顶部外边距设置为200像素 -->
}
h1 a {
color:red; <!-- 超链接颜色设置为红色 -->
}
</style>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.jpg" >
<%@include file="/pages/common/login_success_menu.jsp"%>
</div>
<div id="main">
<h1>欢迎回来 <a href="index.jsp">转到主页</a></h1>
</div>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.jpg" > <!-- 显示网站的logo -->
<%@include file="/pages/common/login_success_menu.jsp"%> <!-- 引入登录成功后的菜单 -->
</div>
<div id="main">
<h1>欢迎回来 <a href="index.jsp">转到主页</a></h1> <!-- 欢迎信息及返回主页的链接 -->
</div>
<%@include file="/pages/common/footer.jsp"%>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共底部文件 -->
</body>
</html>
</html>

@ -8,151 +8,202 @@
<script type="text/javascript">
// 页面加载完成之后
$(function(){
// 当用户名输入框失去焦点时触发事件
$("#username").blur(function () {
//1、获取用户名
// 1、获取用户名
var username = this.value;
$.getJSON("http://localhost:8080/bookstore1/userServlet","action=ajaxExistsusername&username="+username,function (data) {
// 发送一个GET请求检查用户名是否已经存在
$.getJSON("http://localhost:8080/bookstore1/userServlet", "action=ajaxExistsusername&username=" + username, function (data) {
if(data.exitsUsername) {
// 如果用户名已存在,显示错误信息
$("span.errorMsg").text("用户名已存在!");
} else {
// 如果用户名可用,显示可用信息
$("span.errorMsg").text("用户名可用!");
}
});
});
// 点击验证码图片时更换其源,以更新验证码
$("#code_img").click(function () {
this.src = "${basePath}kaptcha.jpg?d=" + new Date();
});
// 给注册按钮添加事件
// 给注册按钮添加点击事件
$("#sub_btn").click(function(){
// 获取用户名
// 获取用户名的值
var usernameValue = $("#username").val();
// 验证用户名是否合法,规则如下:必须由字母,数字,下划线组成并且长度为5到15位。
// 验证用户名是否合法,规则如下:必须由字母、数字和下划线组成并且长度为5到15位。
var usernameReg = /^\w{5,15}$/;
// 验证用户信息
if (!usernameReg.test(usernameValue)) {
// 提示用户
// 如果验证不通过,提示用户
$("span.errorMsg").text("用户名不合法!");
return false;
return false; // 阻止表单提交
}
// 获取密码
// 获取密码输入框的值
var passwordValue = $("#password").val();
// 验证密码是否合法,规则如下:必须由字母,数字,下划线组成并且长度为5到15位。
// 验证密码是否合法,规则如下:必须由字母、数字和下划线组成并且长度为5到15位。
var passwordReg = /^\w{5,15}$/;
// 验证用户信息
// 验证用户信息
if (!passwordReg.test(passwordValue)) {
// 提示用户
// 如果验证不通过,提示用户
$("span.errorMsg").text("密码不合法!");
return false;
return false; // 阻止表单提交
}
// 获取确认密码
// 获取确认密码输入框的值
var repwdValue = $("#repwd").val();
// 验证确认密码和密码一致
// 验证确认密码与密码是否一致
if (passwordValue != repwdValue) {
// 提示用户
// 如果不一致,提示用户
$("span.errorMsg").text("确认密码和密码不一致!");
return false;
return false; // 阻止表单提交
}
// 获取用户名
// 获取电子邮件输入框的值
var emailValue = $("#email").val();
// 验证邮件输入是否合法。
// 验证邮件输入是否合法,采用正则表达式
var emailReg = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
// 检查电子邮件格式是否符合要求
if (!emailReg.test(emailValue)) {
// 提示用户
// 如果验证不通过,提示用户
$("span.errorMsg").text("邮件输入不合法!");
return false;
return false; // 阻止表单提交
}
// 获取验证码信息
// 获取验证码输入框的值
var codeValue = $("#code").val();
// 验证验证码不为空!
// 验证验证码输入是否为空
if (codeValue == "") {
// 如果为空,提示用户
$("span.errorMsg").text("验证码不能为空!")
return false;
return false; // 阻止表单提交
}
// 如果所有验证通过返回true允许表单提交
return true;
});
});
</script>
<style type="text/css">
.login_form{
height:420px;
margin-top: 25px;
}
</style>
<style type="text/css">
/* 定义 .login_form 类的样式 */
.login_form {
/* 设置登录表单的高度为420像素 */
height: 420px;
/* 设置登录表单与顶部的外边距为25像素 */
margin-top: 25px;
}
</style>
</head>
<body>
<div id="login_header">
<img class="logo_img" alt="" src="static/img/logo.jpg" >
</div>
<div class="login_banner">
<div id="l_content">
<span class="login_word">欢迎注册</span>
<div id="login_header">
<!-- 显示网站或应用程序的logo使用img标签加载图像 -->
<img class="logo_img" alt="" src="static/img/logo.jpg">
</div>
<div class="login_banner">
<!-- 登录横幅区域 -->
<div id="l_content">
<!-- 登录内容部分 -->
<span class="login_word">欢迎注册</span>
<!-- 提示用户进行注册 -->
</div>
<div id="content">
<!-- 内容区域 -->
<div class="login_form">
<!-- 登录表单容器 -->
<div class="login_box">
<!-- 登录框 -->
<div class="tit">
<!-- 标题部分 -->
<h1>注册会员</h1>
<!-- 主标题,显示“注册会员” -->
<span class="errorMsg">
<!-- 错误信息显示区域 -->
<%--<%=request.getAttribute("msg")==null? "" : request.getAttribute("msg")%>--%>
<!-- 注释掉的JSP代码用于获取请求中的消息属性 -->
${requestScope.msg}
<!-- 使用EL表达式获取请求作用域中的消息并显示 -->
</span>
</div>
<div id="content">
<div class="login_form">
<div class="login_box">
<div class="tit">
<h1>注册会员</h1>
<span class="errorMsg">
<%--<%=request.getAttribute("msg")==null? "" : request.getAttribute("msg")%>--%>
${requestScope.msg}
</span>
</div>
<div class="form">
<form action="userServlet" method="post">
<input type="hidden" name="action" value="regist">
<label>用户名称:</label>
<input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" id="username"
value="${requestScope.username}"/>
<br />
<br />
<label>用户密码:</label>
<input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" id="password"
value="${requestScope.password}"/>
<br />
<br />
<label>确认密码:</label>
<input class="itxt" type="password" placeholder="确认密码" autocomplete="off" tabindex="1" name="repwd" id="repwd"
value="${requestScope.repwd}"/>
<br />
<br />
<label>电子邮件:</label>
<input class="itxt" type="text" placeholder="请输入邮箱地址" autocomplete="off" tabindex="1" name="email" id="email"
value="${requestScope.email}"/>
<br />
<br />
<label>验证码:</label>
<input class="itxt" type="text" name="code" style="width: 80px;" id="code"/>
<img id="code_img" alt="" src="kaptcha.jpg" style="float: right; margin-right: 40px;width: 110px;height: 30px">
<br />
<br />
<input type="submit" value="注册" id="sub_btn" />
</form>
</div>
</div>
</div>
<div class="form">
<!-- 表单容器 -->
<form action="userServlet" method="post">
<!-- 表单,提交到 userServlet使用 POST 方法 -->
<input type="hidden" name="action" value="regist">
<!-- 隐藏字段,指定表单操作为注册 -->
<label>用户名称:</label>
<!-- 用户名称标签 -->
<input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" id="username"
value="${requestScope.username}"/>
<!-- 输入框,供用户输入用户名 -->
<!-- 使用 EL 表达式填充之前的用户名(如果有的话) -->
<br />
<br />
<label>用户密码:</label>
<!-- 用户密码标签 -->
<input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" id="password"
value="${requestScope.password}"/>
<!-- 输入框,供用户输入密码 -->
<!-- 使用 EL 表达式填充之前的密码(如果有的话) -->
<br />
<br />
<label>确认密码:</label>
<!-- 确认密码标签 -->
<input class="itxt" type="password" placeholder="确认密码" autocomplete="off" tabindex="1" name="repwd" id="repwd"
value="${requestScope.repwd}"/>
<!-- 输入框,供用户确认密码 -->
<!-- 使用 EL 表达式填充之前的确认密码(如果有的话) -->
<br />
<br />
<label>电子邮件:</label>
<!-- 电子邮件标签 -->
<input class="itxt" type="text" placeholder="请输入邮箱地址" autocomplete="off" tabindex="1" name="email" id="email"
value="${requestScope.email}"/>
<!-- 输入框,供用户输入电子邮件地址 -->
<!-- 使用 EL 表达式填充之前的邮箱(如果有的话) -->
<br />
<br />
<label>验证码:</label>
<!-- 验证码标签 -->
<input class="itxt" type="text" name="code" style="width: 80px;" id="code"/>
<!-- 输入框,供用户输入验证码 -->
<img id="code_img" alt="" src="kaptcha.jpg" style="float: right; margin-right: 40px;width: 110px;height: 30px">
<!-- 显示验证码图像 -->
<br />
<br />
<input type="submit" value="注册" id="sub_btn" />
<!-- 提交按钮,用户点击后提交表单进行注册 -->
</form>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%>
</div>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>

@ -1,8 +1,40 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<head><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功页面</title>
<%@include file="/pages/common/header.jsp"%> <!-- 引入公共头部文件 -->
<style type="text/css">
h1 {
text-align: center; /* 设置标题文本居中对齐 */
margin-top: 200px; /* 顶部外边距设置为200像素 */
}
h1 a {
color:red; /* 设置链接的颜色为红色 */
}
</style>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.jpg"> <!-- 显示网站Logo -->
<span class="wel_word"></span> <!-- 欢迎词,未赋值 -->
<%@include file="/pages/common/login_success_menu.jsp"%> <!-- 引入登录成功后的菜单 -->
</div>
<div id="main">
<h1>注册成功! <a href="index.jsp">转到主页</a></h1> <!-- 显示注册成功提示,并提供返回主页的链接 -->
</div>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共底部文件 -->
</body>
</html>
<meta charset="UTF-8">
<title>注册成功页面</title>
<%@include file="/pages/common/header.jsp"%>
<style type="text/css">

@ -9,57 +9,57 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我的个人信息</title>
<%@include file="/pages/common/header.jsp"%>
<meta charset="UTF-8"> <!-- 设置文档字符集为UTF-8 -->
<title>我的个人信息</title> <!-- 设置网页标题 -->
<%@include file="/pages/common/header.jsp"%> <!-- 引入公共头部文件 -->
<style type="text/css">
h1 {
text-align: center;
margin-top: 200px;
text-align: center; /* 设置h1标题文本居中对齐 */
margin-top: 200px; /* 设置h1元素的顶部外边距为200像素 */
}
h1 a {
color:red;
color:red; /* 设置h1中的链接颜色为红色 */
}
input {
text-align: center;
text-align: center; /* 设置输入框中的文本居中对齐 */
}
</style>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo1.jpg" >
<span class="wel_word">个人信息</span>
<%@include file="/pages/common/login_success_menu.jsp"%>
<div id="header"> <!-- 页头部分 -->
<img class="logo_img" alt="" src="static/img/logo1.jpg"> <!-- 网站logo图像 -->
<span class="wel_word">个人信息</span> <!-- 显示欢迎词,标识为"个人信息" -->
<%@include file="/pages/common/login_success_menu.jsp"%> <!-- 引入登录成功后显示的菜单 -->
</div>
<div id="main">
<form action="userServlet" method="post">
<input type="hidden" name="action" value="update"/>
<table>
<div id="main"> <!-- 主内容区域 -->
<form action="userServlet" method="post"> <!-- 表单提交到userServlet使用POST方法 -->
<input type="hidden" name="action" value="update"/> <!-- 隐藏字段,用于指示操作类型为"更新" -->
<table> <!-- 使用表格来组织输入字段 -->
<tr>
<td>序号</td>
<td>用户名</td>
<td>密码</td>
<td>电子邮箱</td>
<td>收货地址</td>
<td colspan="2">修改</td>
<td>序号</td> <!-- 表头:序号 -->
<td>用户名</td> <!-- 表头:用户名 -->
<td>密码</td> <!-- 表头:密码 -->
<td>电子邮箱</td> <!-- 表头:电子邮箱 -->
<td>收货地址</td> <!-- 表头:收货地址 -->
<td colspan="2">修改</td> <!-- 表头:修改,跨两列 -->
</tr>
<tr>
<td><input name="id" type="text" value="${sessionScope.user.id}"/></td>
<td><input name="username" type="text" value="${sessionScope.user.username}"/></td>
<td><input name="password" type="text" value="${sessionScope.user.password}"/></td>
<td><input name="email" type="text" value="${sessionScope.user.email}"/></td>
<td><input name="address" type="text" value="${sessionScope.user.address}"/></td>
<td><input type="submit" value="提交"/></td>
<td><input name="id" type="text" value="${sessionScope.user.id}"/></td> <!-- 用户ID输入框默认值来自会话 -->
<td><input name="username" type="text" value="${sessionScope.user.username}"/></td> <!-- 用户名输入框,默认值来自会话 -->
<td><input name="password" type="text" value="${sessionScope.user.password}"/></td> <!-- 密码输入框,默认值来自会话 -->
<td><input name="email" type="text" value="${sessionScope.user.email}"/></td> <!-- 电子邮箱输入框,默认值来自会话 -->
<td><input name="address" type="text" value="${sessionScope.user.address}"/></td> <!-- 收货地址输入框,默认值来自会话 -->
<td><input type="submit" value="提交"/></td> <!-- 提交按钮,点击后提交表单 -->
</tr>
</table>
</form>
</div>
<%@include file="/pages/common/footer.jsp"%>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共页脚文件 -->
</body>
</html>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save