尚硅谷书城项目第二阶段——用户注册和登陆(2)

news/2024/11/20 7:11:21/

1、编写UserDao并测试

1.1、编写UserDao接口

public interface UserDao {/*** 根据用户名查询用户信息* @param username 用户名* @return 如果返回null,说明没有这个用户。反之亦然*/public User queryUserByUsername(String username);/*** 根据 用户名和密码查询用户信息* @param username* @param password* @return 如果返回null,说明用户名或密码错误,反之亦然*/public User queryUserByUsernameAndPassword(String username,String password);/*** 保存用户信息* @param user* @return 返回-1表示操作失败,其他是sql语句影响的行数*/public int saveUser(User user);}

1.2、UserDaoImpl实现类:

public class UserDaoImpl extends BaseDao implements UserDao {@Overridepublic User queryUserByUsername(String username) {String sql = "select `id`,`username`,`password`,`email` from t_user where username = ?";return queryForOne(User.class, sql, username);}@Overridepublic User queryUserByUsernameAndPassword(String username, String password) {String sql = "select `id`,`username`,`password`,`email` from t_user where username = ? and password = ?";return queryForOne(User.class, sql, username,password);}@Overridepublic int saveUser(User user) {String sql = "insert into t_user(`username`,`password`,`email`) values(?,?,?)";return update(sql, user.getUsername(),user.getPassword(),user.getEmail());}
}

1.3、UserDao测试

public class UserDaoTest {UserDao userDao = new UserDaoImpl();@Testpublic void queryUserByUsername() {if (userDao.queryUserByUsername("admin1234") == null ){System.out.println("用户名可用!");} else {System.out.println("用户名已存在!");}}@Testpublic void queryUserByUsernameAndPassword() {if ( userDao.queryUserByUsernameAndPassword("admin","admin1234") == null) {System.out.println("用户名或密码错误,登录失败");} else {System.out.println("查询成功");}}@Testpublic void saveUser() {System.out.println( userDao.saveUser(new User(null,"wzg168", "123456", "wzg168@qq.com")) );}
}

2、编写UserService并测试

2.1、UserService接口

public interface UserService {/*** 注册用户* @param user*/public void registUser(User user);/*** 登录* @param user* @return 如果返回null,说明登录失败,返回有值,是登录成功*/public User login(User user);/*** 检查 用户名是否可用* @param username* @return 返回true表示用户名已存在,返回false表示用户名可用*/public boolean existsUsername(String username);
}

2.2、UserServiceImpl实现类

public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic void registUser(User user) {userDao.saveUser(user);}@Overridepublic User login(User user) {/*** QQ登录 !!!* 1、查询用户名和密码* 2、查询天气信息* 3、查询QQ邮箱几封未读邮件* 4、查询QQ空间留言数* 5、还要查询QQ游戏 有没有什么更新* 6、查询QQ的黄钻,什么什么钻,的皮肤信息。* 7、还要查询个个好友的登录IP和登录位置信息* 8、发QQ好友登录提示音*/return userDao.queryUserByUsernameAndPassword(user.getUsername(), user.getPassword());}@Overridepublic boolean existsUsername(String username) {if (userDao.queryUserByUsername(username) == null) {// 等于null,说明没查到,没查到表示可用return false;}return true;}
}

2.3、UserService测试

public class UserServiceTest {UserService userService = new UserServiceImpl();@Testpublic void registUser() {userService.registUser(new User(null, "bbj168", "666666", "bbj168@qq.com"));userService.registUser(new User(null, "abc168", "666666", "abc168@qq.com"));}@Testpublic void login() {System.out.println( userService.login(new User(null, "wzg168", "123456", null)) );}@Testpublic void existsUsername() {if (userService.existsUsername("wzg16888")) {System.out.println("用户名已存在!");} else {System.out.println("用户名可用!");}}
}

3、编写web层

3.1、实现用户注册的功能

3.1.1、图解用户注册的流程

在这里插入图片描述

3.1.2、修改regist.html和regist_success.html页面

1、添加base标签

<!--写base标签,永远固定相对路径跳转的结果-->
<base href="http://localhost:8080/book/">

2、修改base标签对页面中所有相对路径的影响
以下是几个修改的示例:

<link type="text/css" rel="stylesheet" href="static/css/style.css" >
<script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>

3、修改注册表单的提交地址和请求方式
在这里插入图片描述

3.1.3、编写RegistServlet程序

public class RegistServlet extends HttpServlet {private UserService userService = new UserServiceImpl();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//  1、获取请求的参数String username = req.getParameter("username");String password = req.getParameter("password");String email = req.getParameter("email");String code = req.getParameter("code");//  2、检查 验证码是否正确  === 写死,要求验证码为:abcdeif ("abcde".equalsIgnoreCase(code)) {//     3、检查 用户名是否可用if (userService.existsUsername(username)) {System.out.println("用户名[" + username + "]已存在!");//  跳回注册页面req.getRequestDispatcher("/pages/user/regist.html").forward(req, resp);} else {//      可用//  调用Sservice保存到数据库userService.registUser(new User(null, username, password, email));//        跳到注册成功页面 regist_success.htmlreq.getRequestDispatcher("/pages/user/regist_success.html").forward(req, resp);}} else {System.out.println("验证码[" + code + "]错误");req.getRequestDispatcher("/pages/user/regist.html").forward(req, resp);}}
}

3.2、IDEA中Debug调试的使用

3.2.1、Debug调试代码,需要断点 + Debug启动服务器

1、断点,只需要在代码需要停的行的左边上单击,就可以添加和取消
2、Debug启动Tomcat运行代码
在这里插入图片描述

3.2.2、测试工具栏介绍:

在这里插入图片描述

3.2.3、变量窗口介绍

变量窗口:它可以查看当前方法范围内所有有效的变量
在这里插入图片描述

3.2.4、方法调用栈窗口

1、方法调用栈可以查看当前线程有哪些方法调用信息
2、下面的调用上一行的方法
在这里插入图片描述

3、其他常用调试相关按钮

在这里插入图片描述

3.3、用户登录功能的实现

3.3.1、图解用户登录

在这里插入图片描述

3.3.2、修改login.html页面和login_success.html页面

1、添加base标签

<!--写base标签,永远固定相对路径跳转的结果--><base href="http://localhost:8080/book/">

2、修改base标签对页面中所有相对路径的影响
以下是几个修改的示例:

<link type="text/css" rel="stylesheet" href="static/css/style.css" >
<script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>

3、修改login.html表单的提交地址和请求方式
在这里插入图片描述

3.3.3、LoginServlet程序

public class LoginServlet extends HttpServlet {private UserService userService = new UserServiceImpl();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//  1、获取请求的参数String username = req.getParameter("username");String password = req.getParameter("password");// 调用 userService.login()登录处理业务User loginUser = userService.login(new User(null, username, password, null));// 如果等于null,说明登录 失败!if (loginUser == null) {//   跳回登录页面req.getRequestDispatcher("/pages/user/login.html").forward(req, resp);} else {// 登录 成功//跳到成功页面login_success.htmlreq.getRequestDispatcher("/pages/user/login_success.html").forward(req, resp);}}
}

http://www.ppmy.cn/news/528641.html

相关文章

javascript属性

一window对象 alert方法 &#xff1a;弹出一个只有确定按钮的提示框 confirm方法 &#xff1a;弹出一个具有确定和取消按钮的提示框 //window.confirm("确定是个好人吗&#xff1f;")确定返回true&#xff0c;取消返回false prompt方法 &#xff1a;弹出用户可以输…

【微信】竞品分析

概述 通过官网和数据分析网站了解【微信】APP近期的现状和市场情况&#xff1b;分析【微信】APP目前的市场地位、设计方面&#xff1b;与相关竞品进行对比分析&#xff0c;寻找【微信】APP的优势和劣势&#xff0c;最后进行总结。 一、产品描述 微信是腾讯公司于2011年初推出…

SpringBoot+Vue实现第三方QQ登录(二)

1. 准备工作_OAuth2.0&#xff08;官网地址&#xff1a;开发流程&#xff09; 本步骤的作用&#xff1a; 接入QQ登录前&#xff0c;网站需首先进行申请&#xff0c;获得对应的appid与appkey&#xff0c;以保证后续流程中可正确对网站与用户进行验证与授权。 1.1 申请appid和a…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

互联网后台的奥秘 - 腾讯一大牛的分享

这是前两天腾讯一技术总监来华科做的一个演讲, 今天才整理出来. 因为里面有些内容好逗, 为了免除给大牛带来烦恼, 就不署名了. 都是纯纯的干货, 都是亲身经历获得的经验, 十分感谢这位大牛. 为了穿插成文, 里面有些我自己的想法, 如有错误, 谢谢指出, 和大牛无关. 大纲 提升系…

Android 微信、QQ、微博分享问题汇总

1. 微信分享 1.1 分享至好友会话 支持类型&#xff1a;文字、图片、音乐、视频、网页、小程序。 1.1.1 文字类型分享 字段包含&#xff1a; 纯文本&#xff08;必填&#xff09; 1.1.2 图片类型分享 字段包含&#xff1a; 图片&#xff08;必填&#xff0c;支持jpg、pn…

计算机登录的qq点赞怎样删除,QQ空间个性点赞怎么设置 怎么取消

QQ&#xff0c;相信很多人都有玩过&#xff0c;是非常受欢迎的。QQ空间个性点赞怎么设置?怎么取消? QQ空间个性点赞怎么设置&#xff1a; 一、首先登陆手机QQ&#xff0c;进入到主界面&#xff0c;切换至动态---点击好友动态 二、然后在好友动态界面下方点击个性化 三、接下来…

丰田汽车投资人要求董事长下台

&#x1f699; 丰田电动车推广不力&#xff0c;股东要求董事长下台 Toyota faced down two proxy votes at its annual general meeting. In an unusual challenge to the management of a Japanese company, activist investors in America and Europe recommended voting aga…