目录

1,用户注册登录案例

1.1 用户登录

1.1.1 需求分析

1.1.2 环境准备

1.1.3 代码实现

1.2 用户注册

1.2.1 需求分析

1.2.2 代码编写

1.3 SqlSessionFactory工具类抽取


1,用户注册登录案例

接下来我们通过两个比较常见的案例,一个是注册,一个是登录来对今天学习的内容进行一个实战演练,首先来实现用户登录。

1.1 用户登录

1.1.1 需求分析

  1. 用户在登录页面输入用户名和密码,提交请求给LoginServlet

  2. 在LoginServlet中接收请求和数据[用户名和密码]

  3. 在LoginServlt中通过Mybatis实现调用UserMapper来根据用户名和密码查询数据库表

  4. 将查询的结果封装到User对象中进行返回

  5. 在LoginServlet中判断返回的User对象是否为null

  6. 如果为nul,说明根据用户名和密码没有查询到用户,则登录失败,返回"登录失败"数据给前端

  7. 如果不为null,则说明用户存在并且密码正确,则登录成功,返回"登录成功"数据给前端

1.1.2 环境准备

1,复制资料中的静态页面到项目的webapp目录下

,2,创建db1数据库,创建tb_user表,创建User实体类

id
name
password

3,在项目的pom.xml导入Mybatis和Mysql驱动坐标

 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>​<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency>

4,创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口

 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--起别名--><typeAliases><package name="com.itheima.pojo"/></typeAliases>​<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><!--useSSL:关闭SSL安全连接 性能更高useServerPrepStmts:开启预编译功能&amp; 等同于 & ,xml配置文件中不能直接写 &符号--><property name="url" value="jdbc:mysql:///db1?useSSL=false&amp;useServerPrepStmts=true"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment></environments><mappers><!--扫描mapper--><package name="com.itheima.mapper"/></mappers></configuration>

4.2 在com.itheima.mapper包下创建UserMapper接口

 public interface UserMapper {​}

4.3 UserMapper.xml文件

注意:在resources下创建UserMapper.xml的目录时,要使用/分割

至此我们所需要的环境就都已经准备好了,具体该如何实现?

1.1.3 代码实现

1,在UserMapper接口中提供一个根据用户名和密码查询用户对象的方法

 /*** 根据用户名和密码查询用户对象* @param username* @param password* @return*/@Select("select * from tb_user where username = #{username} and password = #{password}")User select(@Param("username") String username,@Param("password")  String password);

说明

@Param注解的作用:用于传递参数,是方法的参数可以与SQL中的字段名相对应。

2,修改loign.html

 <!DOCTYPE html><html lang="en">​<head><meta charset="UTF-8"><title>login</title><link href="css/login.css" rel="stylesheet"></head>​<body><div id="loginDiv"><form action="/request-demo/loginServlet" method="post" id="form"><h1 id="loginMsg">LOGIN IN</h1><p>Username:<input id="username" name="username" type="text"></p>​<p>Password:<input id="password" name="password" type="password"></p>​<div id="subDiv"><input type="submit" class="button" value="login up"><input type="reset" class="button" value="reset">&nbsp;&nbsp;&nbsp;<a href="register.html">没有账号?点击注册</a></div></form></div>​</body></html>
 @WebServlet("/loginServlet")public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 接收用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");​//2. 调用MyBatis完成查询//2.1 获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.2 获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//2.3 获取MapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);//2.4 调用方法User user = userMapper.select(username, password);//2.5 释放资源sqlSession.close();​​//获取字符输出流,并设置content typeresponse.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();//3. 判断user释放为nullif(user != null){// 登陆成功writer.write("登陆成功");}else {// 登陆失败writer.write("登陆失败");}}​@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

4,启动服务器测试

4.1 如果用户名和密码输入错误,则

4.2 如果用户名和密码输入正确,则

至此用户的登录功能就已经完成了~

1.2 用户注册

1.2.1 需求分析

  1. 用户在注册页面输入用户名和密码,提交请求给RegisterServlet

  2. 在RegisterServlet中接收请求和数据[用户名和密码]

  3. 在RegisterServlet中通过Mybatis实现调用UserMapper来根据用户名查询数据库表

  4. 将查询的结果封装到User对象中进行返回

  5. 在RegisterServlet中判断返回的User对象是否为null

  6. 如果为nul,说明根据用户名可用,则调用UserMapper来实现添加用户

  7. 如果不为null,则说明用户不可以,返回"用户名已存在"数据给前端

1.2.2 代码编写

1,编写UserMapper提供根据用户名查询用户数据方法和添加用户方法

 /*** 根据用户名查询用户对象* @param username* @return*/@Select("select * from tb_user where username = #{username}")User selectByUsername(String username);​/*** 添加用户* @param user*/@Insert("insert into tb_user values(null,#{username},#{password})")void add(User user);

2,修改register.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>欢迎注册</title><link href="css/register.css" rel="stylesheet"></head><body>​<div class="form-div"><div class="reg-content"><h1>欢迎注册</h1><span>已有帐号?</span> <a href="login.html">登录</a></div><form id="reg-form" action="/request-demo/registerServlet" method="post">​<table>​<tr><td>用户名</td><td class="inputs"><input name="username" type="text" id="username"><br><span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span></td>​</tr>​<tr><td>密码</td><td class="inputs"><input name="password" type="password" id="password"><br><span id="password_err" class="err_msg" style="display: none">密码格式有误</span></td></tr>​</table>​<div class="buttons"><input value="注 册" type="submit" id="reg_btn"></div><br class="clear"></form>​</div></body></html>

3,创建RegisterServlet类

@WebServlet("/registerServlet")public class RegisterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 接收用户数据String username = request.getParameter("username");String password = request.getParameter("password");​//封装用户对象User user = new User();user.setUsername(username);user.setPassword(password);​//2. 调用mapper 根据用户名查询用户对象//2.1 获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.2 获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//2.3 获取MapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);​//2.4 调用方法User u = userMapper.selectByUsername(username);​//3. 判断用户对象释放为nullif( u == null){// 用户名不存在,添加用户userMapper.add(user);​// 提交事务sqlSession.commit();// 释放资源sqlSession.close();}else {// 用户名存在,给出提示信息response.setContentType("text/html;charset=utf-8");response.getWriter().write("用户名已存在");}​}​@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

4,启动服务器进行测试

4.1 如果测试成功,则在数据库中就能查看到新注册的数据

4.2 如果用户已经存在,则在页面上展示 用户名已存在 的提示信息

1.3 SqlSessionFactory工具类抽取

上面两个功能已经实现,但是在写Servlet的时候,因为需要使用Mybatis来完成数据库的操作,所以对于Mybatis的基础操作就出现了些重复代码,如下

 String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

有了这些重复代码就会造成一些问题:

  • 重复代码不利于后期的维护

  • SqlSessionFactory工厂类进行重复创建

    • 就相当于每次买手机都需要重新创建一个手机生产工厂来给你制造一个手机一样,资源消耗非常大但性能却非常低。所以这么做是不允许的。

那如何来优化呢?

  • 代码重复可以抽取工具类

  • 对指定代码只需要执行一次可以使用静态代码块

有了这两个方向后,代码具体该如何编写?

 public class SqlSessionFactoryUtils {​private static SqlSessionFactory sqlSessionFactory;​static {//静态代码块会随着类的加载而自动执行,且只执行一次try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}​​public static SqlSessionFactory getSqlSessionFactory(){return sqlSessionFactory;}}

工具类抽取以后,以后在对Mybatis的SqlSession进行操作的时候,就可以直接使用

 SqlSessionFactory sqlSessionFactory =SqlSessionFactoryUtils.getSqlSessionFactory();

这样就可以很好的解决上面所说的代码重复和重复创建工厂导致性能低的问题了。

JavaWeb核心技术——RequestResponse用户登录注册案例相关推荐

  1. 【Web基础】用户登录注册案例

    4,用户登录注册案例 4.1 需求分析 需求说明: 完成用户登录功能,如果用户勾选"记住用户" ,则下次访问登录页面 自动 填充用户名密码 完成注册功能,并实现 验证码 功能 4. ...

  2. JavaWeb-WEB核心7 会话技术 理解什么是会话跟踪技术掌握Cookie的使用掌握Session的使用(钝化、活化)完善用户登录注册案例的功能

    会话技术 今日目标 理解什么是会话跟踪技术 掌握Cookie的使用 掌握Session的使用 完善用户登录注册案例的功能 1,会话跟踪技术的概述 对于会话跟踪这四个词,我们需要拆开来进行解释,首先要理 ...

  3. JavaWeb:掌握Session的使用,完善用户登录注册案例的功能

    ↑↑Java语法基础 -> 小型项目练习 -> MySQL 更多学习内容均更新在专栏了,记得关注专栏哦 ↑↑

  4. 移动端用户登录注册案例

    用的是TypeScript语言,主要是展示相关的思想逻辑,而不是语法.会说明注册和登录页面进行局部切换的逻辑.用账号密码登录的相关逻辑.用手机号和验证码登录的相关逻辑.获取验证码的相关逻辑,忘记密码的 ...

  5. java用户登录注册

    用户登录注册 案例需求 涉及知识点 面向对象,接口,Java序列化,HashMap,IO流 欢迎界面 public class BootStrap { public static void main( ...

  6. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  7. javaweb学习总结(二十二):基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  8. javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/

    javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...

最新文章

  1. 关于软件开发的随想,纯属意淫
  2. 安装batocera-linux教程_batocera游戏系统,一个U盘搞定所有模拟器
  3. WPF 密码框水印与明文切换
  4. 【STC15库函数上手笔记】6、ADC
  5. 《信息安全系统设计基础》 第五周学习总结
  6. shell编程之awk
  7. 微信回应发原图泄露位置信息;华为员工索要离职补偿被起诉;Windows Terminal v0.7 发布 | 极客头条...
  8. php查询框,html查找框功能
  9. ll命令报错-bash: ll: command not found
  10. C语言实现加密解密功能 附带详细注释源码
  11. 拓端tecdat:R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
  12. 矿物质防火电缆对于水的防护也很重要
  13. 《.NET程序员面试秘籍》读书笔记
  14. 蓝牙写入数据库_android 蓝牙 数据库
  15. 解决 Missing GL version
  16. 手机怎样设置一个高考倒计时便签,可以天天看见那种
  17. 【STM32】基于IWDG实现复位(手动喂狗)功能
  18. 微信小程序支付组件开发实战
  19. Nginx 负载均衡 ip_hash和一致性hash
  20. Consolas 字体

热门文章

  1. 计算机开机后黑屏鼠标显示桌面图标,win10系统电脑启动开机黑屏不显示只有鼠标图标的处理办法...
  2. beautifulsoup菜鸟教程
  3. 微信小程序—修改日期
  4. win10 RTX30系列显卡 安装tensorflow-gpu 1.15
  5. 鸿蒙HarmonyOS开发环境初识及搭建
  6. AP计算机编程路上的照明灯----学校老师哈佛博士的伊利诺伊大学学生如何说
  7. 10万存银行,几年能翻一番?
  8. 二叉树(1.二叉树的概念堆)
  9. [codeforces 1324C] Frog Jumps 一直向右+边界处理
  10. centos 7 安装时忘记打开网络导致开机网络无法自启动解决办法