# 只用Servlet搞定登录与注册
# 基础项目环境的搭建
使用maven的web项目结构创建项目,并添加核心的java目录
引入插件
pom.xml
<dependencies> <!--apache io工具类 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.0.7</version> </dependency> </dependencies> <build> <finalName>servlet</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build>
# Mybaits配置
创建数据表
编写mybatis-config.xml
<?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="top.brightzm.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库连接信息 --> <property name="driver" value="org.mariadb.jdbc.Driver"/> <property name="url" value="jdbc:mariadb://127.0.0.1:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="ROOT"/> </dataSource> </environment> </environments> <!--扫描mapper --> <mappers> <package name="top.brightzm.mapper"/> </mappers> </configuration>编写sql映射文件 UserMapper.xml
注意路径 top/brightzm/mapper
<?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="top.brightzm.mapper.UserMapper"> <!--查询用户 --> <select id="select" resultType="top.brightzm.pojo.User"> SELECT * FROM tb_user2 WHERE username = #{username} AND password = #{password} </select> <select id="selectByName" resultType="User"> SELECT * FROM tb_user2 WHERE username = #{username}; </select> <!-- 创建用户 --> <insert id="add"> INSERT INTO tb_user2(username, password) VALUES (#{username}, #{password}) </insert> </mapper>编写pojo类 User.java
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 getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }编写mapper接口 UserMapper.java
注意路径
public interface UserMapper { User select(@Param("username") String username, @Param("password") String password); User selectByName(@Param("username") String username); void add(User user); }
# 编写servlet核心代码
静态文件编写
form表单 action指向servlet的url
编写SqlSessionFactory工具类
public class SqlSessionFactoryUtils { // SqlSessionFactory对象获取 private static SqlSessionFactory sqlSessionFactory; static { try { String resources = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resources); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e){ e.printStackTrace(); } } public static SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; } }login servlet
@WebServlet("/login") public class login extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 调用Mybatis完成查询 // 获取sqlSessionFactory对象 和sqlSession对象 SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取mapper并查询 UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.select(username, password); sqlSession.close(); // 判断user是否为null并输出信息 response.setContentType("text/html;charset=utf-8"); 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 servlet
@WebServlet("/register") public class register extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 注册的实现 // 获取用户名和密码 String newName = req.getParameter("username"); String newPassword = req.getParameter("password"); User newUser = new User(); newUser.setUsername(newName); newUser.setPassword(newPassword); // 使用mybatis添加用户 // 获取sqlsession SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取mapper UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 判断用户名是否重复 User user = mapper.selectByName(newName); boolean result = user == null; // 添加用户并返回信息 resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); if (result){ mapper.add(newUser); // 提交事务 sqlSession.commit(); sqlSession.close(); writer.write("注册成功"); }else { writer.write("用户名重复"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }运行项目 完成