Compare commits

..

15 Commits

Author SHA1 Message Date
gyt e9badbb6be zhushi
10 months ago
gyt f2581409af zhushi
10 months ago
gyt 2b0a077d4a zhushi
10 months ago
gyt 50c6997620 zhushi
10 months ago
gyt 9dd178569b zhushi
10 months ago
gyt b922164db0 change jquery
10 months ago
gyt 6db89b7492 zhushi
10 months ago
gyt 56f237cf93 sovled problem
10 months ago
gyt df87ea8e2f zhushi
10 months ago
gyt a7b30c76b3 zhushi
10 months ago
gyt 6fd34ecd5c zhushi
10 months ago
gyt 677cd46203 zhushi
10 months ago
gyt 218b75bc32 zhushi
10 months ago
gyt 8295c5c767 zhushi
10 months ago
gyt e71d011b3f zhushi
10 months ago

@ -5,68 +5,53 @@ 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{" +
@ -78,11 +63,9 @@ public class User {
'}';
}
// 无参构造函数
public User() {
}
// 带参数的构造函数,用于创建用户对象时初始化属性
public User(Integer id, String username, String password, String email, String address) {
this.id = id;
this.username = username;
@ -91,4 +74,3 @@ public class User {
this.address = address;
}
}

@ -5,7 +5,6 @@ import com.yj.bean.User;
import java.util.List;
/**
* 访
* @author yj
* @create 2020-08-21 11:57
*/
@ -20,64 +19,30 @@ 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,77 +10,56 @@ 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 = ?";
// 执行查询并返回单个 User 对象
return queryForOne(User.class, sql, username);
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 = ?";
// 执行查询并返回单个 User 对象
return queryForOne(User.class, sql, username, password);
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();
@ -88,9 +67,7 @@ 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,68 +7,39 @@ 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 null
*
* @param user
* @return
*/
public User login(User user);
/**
*
* @param username
* @param username
* @return truefalse
*/
public boolean existsUsername(String username);
/**
*
* @param user
*/
public void addUser(User user);
/**
* ID
* @param id ID
*/
public void deleteUserById(int id);
public void deleteUserById(int i);
/**
*
* @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,124 +15,84 @@ 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); // 将每页的记录数设置为方法传入的pageSize
//设置每页记录数
page.setPageSize(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) { // 如果请求的当前页码小于1则设置为第一页
if(pageNo<1) {
pageNo = 1;
}
page.setPageNo(pageNo); // 将最终确定的当前页码设置到分页对象中
page.setPageNo(pageNo);
//设置总页码
page.setPageTotal(pageTotal);
// 设置总页码
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,102 +13,67 @@ import java.util.List;
* @author yj
* @create 2020-08-21 15:14
*/
import org.junit.Test;
public class UserDaoTest {
// 创建UserDao的实例用于测试
UserDao userDao = new UserDaoImpl();
/**
*
* null
*/
UserDao userDao = new UserDaoImpl();
@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() {
// 查询指定页码和每页数量的用户信息
// 这里查询第一页的2条用户记录
System.out.println(userDao.queryForPageItems(1, 2));
System.out.println(userDao.queryForPageItems(1,2));
}
}

@ -6,43 +6,35 @@ 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) {
// 如果登录返回为null则输出登录失败
if(userService.login(new User(null,"admin123","admin",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,61 +8,34 @@ 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() {
// 调用addUser方法添加一个新的用户
userService.addUser(new User(null, "舒胡贤2", "kj", "1234@qq.com", "kjk"));
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,71 +21,59 @@ 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);
// 将JSON字符串写入响应中返回给客户端
resp.getWriter().write(json);
}
/**
*
*
* @param req HttpServletRequest
* @param resp HttpServletResponse
* @param req
* @param resp
* @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");
// 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); // 转发请求
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);
} 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 HttpServletRequest
* @param resp HttpServletResponse
* @throws ServletException
* @throws IOException
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 使当前会话失效清除所有用户相关的session数据
req.getSession().invalidate();
// 重定向到应用的根路径,以返回主页或登录页面
req.getSession().invalidate();
resp.sendRedirect(req.getContextPath());
}
@ -97,32 +85,30 @@ 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 = (User) WebUtils.copyParamToBean(req.getParameterMap(), new User());
// 2、检查验证码是否正确
if (token != null && token.equalsIgnoreCase(code)) {
// 3、检查用户名是否已被注册
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(),new User());
//2、检查验证码是否正确 abcde
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);
}
@ -138,19 +124,10 @@ public class UserServlet extends BaseServlet {
}
protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1、将请求参数复制到User对象中
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(), new User());
// 2、调用服务层方法更新用户信息
User user = (User) WebUtils.copyParamToBean(req.getParameterMap(),new User());
userService.updateUser(user);
// 3、根据用户ID查询更新后的用户信息
User user1 = userService.queryUserById(user.getId());
// 4、将更新后的用户信息存储到Session中以便后续使用
req.getSession().setAttribute("user", user1);
// 5、重定向到用户信息页面展示更新后的信息
req.getSession().setAttribute("user",user1);
resp.sendRedirect(req.getContextPath() + "/pages/user/userinfo.jsp");
}

@ -2,92 +2,96 @@
<!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();
// 定义正则表达式,验证密码是否合法(同样的规则)
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;
}
// 获取密码
var passwordValue = $("#password").val();
// 验证密码是否合法,规则如下必须由字母数字下划线组成并且长度为5到15位。
var passwordReg = /^\w{5,15}$/;
// 验证用户信息
if (!passwordReg.test(passwordValue)) {
// 提示用户
$("span.errorMsg").text("密码不合法!");
return false;
}
// 阻止表单提交
return true;
});
</script>
});
</script>
</head>
<body>
<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 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>
<div class="msg_cont">
<b></b>
<span class="errorMsg">
<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">
<%--<%=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"> <!-- 表单提交至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 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>
</div>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共底部文件 -->
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>
</html>

@ -2,30 +2,32 @@
<!DOCTYPE html>
<html>
<head>
<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>
<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>
</head>
<body>
<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>
<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>
<%@include file="/pages/common/footer.jsp"%> <!-- 引入公共底部文件 -->
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>
</html>

@ -8,202 +8,151 @@
<script type="text/javascript">
// 页面加载完成之后
$(function(){
// 当用户名输入框失去焦点时触发事件
$("#username").blur(function () {
// 1、获取用户名
//1、获取用户名
var username = this.value;
// 发送一个GET请求检查用户名是否已经存在
$.getJSON("http://localhost:8080/bookstore1/userServlet", "action=ajaxExistsusername&username=" + username, function (data) {
$.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 类的样式 */
.login_form {
/* 设置登录表单的高度为420像素 */
height: 420px;
/* 设置登录表单与顶部的外边距为25像素 */
margin-top: 25px;
}
</style>
<style type="text/css">
.login_form{
height:420px;
margin-top: 25px;
}
</style>
</head>
<body>
<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 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>
<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 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>
</div>
</div>
</div>
</div>
<%@include file="/pages/common/footer.jsp"%>
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>

@ -1,40 +1,8 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<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">
<head>
<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"> <!-- 设置文档字符集为UTF-8 -->
<title>我的个人信息</title> <!-- 设置网页标题 -->
<%@include file="/pages/common/header.jsp"%> <!-- 引入公共头部文件 -->
<meta charset="UTF-8">
<title>我的个人信息</title>
<%@include file="/pages/common/header.jsp"%>
<style type="text/css">
h1 {
text-align: center; /* 设置h1标题文本居中对齐 */
margin-top: 200px; /* 设置h1元素的顶部外边距为200像素 */
text-align: center;
margin-top: 200px;
}
h1 a {
color:red; /* 设置h1中的链接颜色为红色 */
color:red;
}
input {
text-align: center; /* 设置输入框中的文本居中对齐 */
text-align: center;
}
</style>
</head>
<body>
<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 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>
<div id="main"> <!-- 主内容区域 -->
<form action="userServlet" method="post"> <!-- 表单提交到userServlet使用POST方法 -->
<input type="hidden" name="action" value="update"/> <!-- 隐藏字段,用于指示操作类型为"更新" -->
<table> <!-- 使用表格来组织输入字段 -->
<div id="main">
<form action="userServlet" method="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> <!-- 用户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> <!-- 提交按钮,点击后提交表单 -->
<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>
</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