登录注册demo

登录

1. 准备环境

  • 静态页面:login.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="loginServlet" 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>
    
  • 数据库:user.sql

    -- 创建用户表
    CREATE TABLE tb_user(
    	id int primary key auto_increment,
    	username varchar(20) unique,
    	password varchar(32)
    );
    
    -- 添加数据
    INSERT INTO tb_user(username,password) values('zhangsan','123'),('lisi','234');
    
    SELECT * FROM tb_user;
    
  • pojo:User.java

  • pom.xml加入依赖坐标:Mybatis 和 Mysql驱动

  • mybatis-config.xml : resource目录下

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//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"/>
                    <property name="url" value="jdbc:mysql:///db1?useSSL=false&amp;useServerPrepStmts=true"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--扫描mapper-->
            <package name="com.itheima.mapper"/>
        </mappers>
    </configuration>
    
  • Usermapper.xml :resource/com/itheima/mapper

  • Usermapper接口:java/com/itheima/mapper

2.代码实现

  • UserMapper接口中提供一个接口方法:根据username和password查询用户对象

    package com.itheima.mapper;
    
    import com.itheima.pojo.User;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    public interface UserMapper {
        @Select("select * from tb_user where username=#{username} and password = #{password}")
        User select(@Param("username") String username, @Param("password") String password);
    }
    
    
  • Usermapper.xml (如果sql语句简单使用注解进行映射,xml和注解二选一)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.itheima.mapper.UserMapper">
    
        <select id="select" resultType="com.itheima.pojo.User">
            select * from tb_user where username=#{username} and password = #{password}
        </select>
    </mapper>
    
  • login.html设置form标签action=LoginServert

        <form action="LoginServlet" 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>
    
  • LoginServert:com.itheima.web

    • 获取用户名和密码,

    • 调用mybatis查询,

    • 判断查询结果

      package com.itheima.web;
      
      import com.itheima.mapper.UserMapper;
      import com.itheima.pojo.User;
      import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      
      import javax.servlet.*;
      import javax.servlet.http.*;
      import javax.servlet.annotation.*;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.PrintWriter;
      
      @WebServlet("/loginServlet")
      public class LoginServlet extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              //1.获取请求参数
              String username = request.getParameter("username").trim();
              String password = request.getParameter("password").trim();
      				//2.mybatis查询数据
              //2.1加载核心配置文件
              InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
              //2.2使用sqlSessionFactory创建sqlSession
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
              SqlSession sqlSession = sqlSessionFactory.openSession();
              //2.3使用sqlSession获取userMapper代理对象,执行方法,获取查询结果
              UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
              User user = userMapper.select(username,password);
      				//3.释放资源
              sqlSession.close();
      				//4.response设置ContentType
              response.setContentType("text/html;charset=utf-8");
            	//5.根据user是否为null,在页面写登录是否成功
              PrintWriter writer = response.getWriter();
              if (user!=null){
                  writer.write("登陆成功");
              }else {
                  writer.write("登陆失败");
              }
          }
      
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doGet(request, response);
          }
      }
      
      
  • 测试

注册

代码实现

  • register.html:action指向registerServlet

    <!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="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>
    
  • registerServlet

    package com.itheima.web;
    
    import com.itheima.mapper.UserMapper;
    import com.itheima.pojo.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    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.io.InputStream;
    import java.io.PrintWriter;
    
    @WebServlet("/registerServlet")
    public class RegisterServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.获取前端请求数据,将用户名密码封装为User,为插入数据做准备
            String username = request.getParameter("username").trim();
            String password = request.getParameter("password").trim();
            User u = new User();
            u.setUsername(username);
            u.setPassword(password);
            //2.mybatis查询数据
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //根据用户名查询,并返回User对象,
            //注意User实体类要有全参数的构造方法,才可以根据查询结果封装对象
            User user = userMapper.selectByUsername(username);
    
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
            if (user!=null){
                writer.write("用户名已存在");
            }else {
                userMapper.add(u);
                //mybatis默认开启事务,所以需要提交事务,这样插入数据才可以生效
                sqlSession.commit();
                sqlSession.close();
                writer.write("注册成功");
            }
    
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    
  • UserMapper接口

    package com.itheima.mapper;
    
    import com.itheima.pojo.User;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    public interface UserMapper {
        @Select("select * from tb_user where username=#{username} and password = #{password}")
        User select(@Param("username") String username, @Param("password") String password);
    
        @Select("select * from tb_user where username=#{username}")
        User selectByUsername(String username);
        @Insert("insert into tb_user values (null,#{username},#{password})")
        void add(User user);
    }
    
    

SqlSessionFactory工具类抽取

  • 由于每个Servlet里面进行mybatis查询时都有重复的代码

    • sqlSessionFactory工厂类重复创建
    				InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
  • 抽取SqlSessionFactory工具类
    • 重复代码抽取工具类
    • 对指定的代码只需要执行一次可以使用静态代码块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值