用户注册登录案列

用户注册登录

用户登录

  • 流程说明:
    1. 用户填写用户名密码,提交到LoginServlet
    2. 在LoginServlet中使用MyBatis查询数据库,验证用户名密码是否正确
    3. 如果正确,响应“登录成功”,如果错误,响应“登录失败”

在这里插入图片描述

  • 准备环境:
    1. 复制资料中的静态页面到项目的webapp目录下
    2. 创建db1数据库,创建tb_user表,创建User实体类
    3. 导入MyBatis坐标,MySQL驱动坐标
    4. 创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口

用户注册

  • 流程说明:
    1. 用户填写用户名、密码等信息,点击注册按钮,提交到RegisterServlet
    2. 在RegisterServlet中使用MyBatis 保存数据
    3. 保存前,需要判断用户名是否已经存在:根据用户名查询数据库

在这里插入图片描述

具体代码

  • 目录结构

    [)(D:\文档\Markdown\JavaWeb\用户注册登录案例.assets\mljg.png)]

  • porm.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><groupId>com.jihuagroupId><artifactId>userDemoartifactId><version>1.0-SNAPSHOTversion><packaging>warpackaging><name>userDemo Maven Webappname><url>http://www.example.comurl><properties><project.build.sourceEncoding>UTF-8project.build.sourceEncoding><maven.compiler.source>1.7maven.compiler.source><maven.compiler.target>1.7maven.compiler.target>properties><dependencies><dependency><groupId>javax.servletgroupId><artifactId>javax.servlet-apiartifactId><version>3.1.0version><scope>providedscope>dependency><dependency><groupId>org.mybatisgroupId><artifactId>mybatisartifactId><version>3.5.5version>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>5.1.34version>dependency>dependencies><build><plugins><plugin><groupId>org.apache.tomcat.mavengroupId><artifactId>tomcat7-maven-pluginartifactId><version>2.2version><configuration><port>8080port>configuration>plugin>plugins>build>
    project>
  • login.html

    DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>logintitle>
    head>
    <body>
    <form action="/userDemo/LoginServlet" method="post" id="form"><h1>欢迎,请登录h1><p>用户名:<input id="username" name="username" type="text">p><p>   码:<input id="password" name="password" type="password">p><input type="submit" value="登录"><input type="reset" value="清空"><span>没有账号?span><a href="register.html">注册a>
    form>
    body>
    html>
    
    • register.html
    DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>欢迎注册title>
    head>
    <body>
    <h1>欢迎注册h1>
    <form action="/userDemo/RegisterServlet" method="post"><p><span>用户名:span><input type="text" name="username" id="username">p><p><span>   码:span> <input type="password" name="password" id="password">p><input type="submit" value="注册"><input type="reset" value="清空"><span>已有账号?span><a href="login.html">登录a>form>
    body>
    html>
    
  • UserMapper.xml

    
    DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Napper 3.0//EN""http: //mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.jihua.mapper.UserMapper">mapper>
    
  • mybatis-config.xml

    
    DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><typeAliases><package name="com.jihua.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:///userdemo?useSSL=false&useServerPrepStmts=true"/><property name="username" value="root"/><property name="password" value="你的密码"/>dataSource>environment>environments><mappers><package name="com.jihua.mapper"/>mappers>
    configuration>
    
  • User.java

    package com.jihua.pojo;public class User {private Integer id;private String username;private String password;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return username;}public void setName(String name) {this.username = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + username + '\'' +", password='" + password + '\'' +'}';}
    }
    
  • UserMapper.class(接口)

    package com.jihua.mapper;import com.jihua.pojo.User;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;public interface 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 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);
    }
    
  • LoginServlet.class

    package com.jihua.web;import com.jihua.mapper.UserMapper;
    import com.jihua.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(name = "LoginServlet", value = "/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("");
    //            writer.write("登录成功");writer.write(username + ",欢迎你");} else {//登录失败writer.write("");response.getWriter().write("登录失败,点击返回登录");
    //            writer.write("登录失败");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
    }
    
  • RegisterServlet.class

    package com.jihua.web;import com.jihua.mapper.UserMapper;
    import com.jihua.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(name = "RegisterServlet", value = "/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.setName(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);//获取字符输出流,并设置content typeresponse.setContentType("text/html;charset=utf-8");//3. 判断用户对象是否为nullif (u == null) {//用户名不存在,添加用户userMapper.add(user);//提交事务sqlSession.commit();//给出提示response.getWriter().write("");response.getWriter().write("注册成功,点击返回登录");} else {//用户名存在,给出提示信息response.getWriter().write("");response.getWriter().write("用户已存在,点击返回登录");}//释放资源sqlSession.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
    }
    

SqlSessionFactory工具类抽取

代码优化

  • 创建SqlSessionFactory代码优化

    //2.1 获SqlSessionFactory对象
    String resource "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsstream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputstream);
    

    问题:

    1. 代码重复:工具类
    2. 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;}
}
//2.1 获SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = SqLSessionFactoryutils.getsqLSessionFactory();


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部