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

- 准备环境:
- 复制资料中的静态页面到项目的webapp目录下
- 创建db1数据库,创建tb_user表,创建User实体类
- 导入MyBatis坐标,MySQL驱动坐标
- 创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口
用户注册
- 流程说明:
- 用户填写用户名、密码等信息,点击注册按钮,提交到RegisterServlet
- 在RegisterServlet中使用MyBatis 保存数据
- 保存前,需要判断用户名是否已经存在:根据用户名查询数据库

具体代码
-
目录结构
![[)(D:\文档\Markdown\JavaWeb\用户注册登录案例.assets\mljg.png)]](https://img-blog.csdnimg.cn/85e3d8321361407fb71a48f8a49fccfe.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);问题:
- 代码重复:工具类
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();
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
