JavaWeb小项目(一) - 用户登录(Request/Response综合应用)

JavaWeb小项目(一)- 用户登录与注册(Request/Response综合应用)

涉及技术栈:Java,Servlet(Request/Response),Tomcat,MySql,MyBatis
需要自行导入的包链接:提取码:6666

用户登录

业务逻辑

  • 用户填写用户名密码,提交到 LoginServlet
  • LoginServlet 中使用 MyBatis 查询数据库,验证用户名密码是否正确
  • 如果正确,响应"登录成功",如果错误,响应“登录失败”
    在这里插入图片描述

环境搭建

  • 将静态页面项目到webapp目录下(资源路径:)
    在这里插入图片描述

  • 创建 db1 数据库,创建 tb_user 表,并导入实验数据
    在这里插入图片描述

  • com.itheima下创建pojo包,并在该包下创建 User 实体类

    /**
     * 在com.itheima.web下创建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 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 + '\'' +
                    '}';
        }
    }
    
  • pom.xml 配置文件中导入 MyBatis 坐标,MySQL驱动坐标

    <!-- 导入mybatis坐标 -->
    <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.5</version>
    </dependency>
    
    <!--  
    	注意事项:Mysql驱动需要尽可能用最新版本,否则版本过低会无法连接数据库
    	导致报错
    -->
    <!-- 导入Mysql驱动 -->
    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.46</version>
    </dependency>
    
  • resourses 资源目录下创建 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="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://localhost:3306/db1?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"/>
                    <property name="username" value="root"/>
                    <property name="password" value="XXX"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--扫描mapper-->
            <package name="com.itheima.mapper"/>
        </mappers>
    </configuration>
    
  • resources 资源文件夹下创建com.itheima.mapper包,并创建UserMapper.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">
    
    </mapper>
    
  • com.itheima下创建 mapper包,创建 UserMapper 接口

    public interface UserMapper {
    }
    

业务逻辑实现

  • 添加 UserMapper 接口新功能
    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);
    }
    
  • com.itheima目录下创建 LoginServlet,并实现对应的登录处理逻辑
    @WebServlet("/loginServlet")
    public class LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		this.doGet(request,response);
        }
    }
    

运行效果

  • 登录界面:
    在这里插入图片描述
  • 登录成功
    在这里插入图片描述
  • 登录失败
    在这里插入图片描述

用户注册

业务逻辑

  • 用户填写用户名,密码等信息,点击注册按钮,提交到 RegisterServlet
  • RegisterServlet 中使用 MyBatis 保存数据
  • 保存前,需要判断用户名是否已经存在:即根据用户名查询数据库
    在这里插入图片描述

业务逻辑实现

  • 添加 UserMapper 接口新功能

    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);
    }
    
  • 创建 RegisterServlet 并实现注册业务逻辑处理代码

    @WebServlet("/registerServlet")
    public class RegisterServlet extends HttpServlet {
        protected void doPost(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 获取Mapper
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
            //2.4 调用方法
            User u = userMapper.selectByUsername(username);
    
            //3.判断用户对象是否为null
            if(u==null){
                //用户名不存在,添加用户
                userMapper.add(user);
    
                //提交事务
                sqlSession.commit();
    
    			//注册成功提示
            	response.setContentType("text/html;charset=utf-8");
            	response.getWriter().write("用户注册成功");
    
                //释放资源
                sqlSession.close();
            }else{
                //用户名存在,给出提示信息
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("用户名已存在");
            }
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    

运行效果

  • 注册页面
    在这里插入图片描述

  • 注册成功
    在这里插入图片描述

  • 用户存在
    在这里插入图片描述

代码优化

问题引入

  1. 代码重复:通过创建工具类将代码简化
  2. SqlSessionFactory 工厂只创建一次,不需要重复创建静态代码块

解决方案

创建创建 util 包,并在该包下创建SqlSessionFactoryUtils

public class SqlSessionFactoryUtils {

    private static  SqlSessionFactory sqlSessionFactory;

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

    public static SqlSessionFactory getsqlSessionFactory(){
        return sqlSessionFactory;
    }
}

将XXXServlet该段代码替换为

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

SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getsqlSessionFactory();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值