JavaWeb_servlet核心技术(2)实现注册功能

Servlet+JDBC应用(重点)

  • 在Servlet中可以使用JDBC技术访问数据库,常见功能如下:
  1. 查询DB数据,然后生成显示页面,例如:列表显示功能。
  2. 接收请求参数,然后对DB操作,例如:注册、登录、修改密码等功能
  • 为了方便重用和便于维护等目的,经常会采用DAO(Data Access Object)模式对数据库操作进行独立封装
    在这里插入图片描述

  • DAO工厂(工厂模式)
    工厂类:封装了对象的创建细节,为调用者提供符合要求的对象

以注册为例将前端、servlet和数据库搭配使用

即实现简单的注册功能

先写前端页面register.html

 是空格

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>实现简单的注册功能</title>
</head>
<body>
<form action="register" method="post">
  用户名:<input type="text" name="userName"/><br/>&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="text" name="Password"/><br/>
  <input type="submit" value="注册"/>
</form>
</body>
</html>

在这里插入图片描述

Servlet获取请求中的用户名和密码

上面html页面中form的action是找register,但register还没有,于是直接点注册按钮会出现404
现在该做这一步了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建RegisterServlet.java并在web.xml中添加好映射

<servlet>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.example.javanew.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>Register</url-pattern>
</servlet-mapping>

mapping中Register正好与前端页面action中Register对应
但是有注解的话是不用写mapping的,相当于mapping
在这里插入图片描述

下一步完善RegisterServlet.java中的内容获取用户名和密码

@WebServlet(name = "Register", value = "/register")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取前端页面请求对象中保存的用户名和密码信息
        String userName = request.getParameter("userName");
        System.out.println("获取到的用户名为:"+userName);
        String Password = request.getParameter("Password");
        System.out.println("获取到的密码为:"+Password);
    }
}

在这里插入图片描述

在这里插入图片描述

用户对象的创建

接下来我们要做的就是把接收到的用户名和密码信息进行对象的打包
打包成对象的原因:如果不把用户名和密码打包成一个封装类对象,则传递给DAO层时要传的数据太多了(数据可能有很多)
在这里插入图片描述
直接把打包好的对象扔给DAO层即可
这里构建用户类User.java
在这里插入图片描述
再在RegisterServlet.java中实现信息打包

//将接收到的用户名和密码信息打包成用户对象交给DAO层处理 构建用户类
        User user = new User(userName,Password);

DAO层没写,写实现打包

数据库的实现:DbUtil工具类的实现

建立数据库连接前先创建符合要求的数据库
在这里插入图片描述
准备一个专门的DbUtil.java来写数据库连接的工具类
先把mysql的驱动装上
在这里插入图片描述
把DbUtil类写好并测试

public class DbUtil {
    private static String jdbcName;//描述驱动信息
    private static String dbUrl;//用于描述URL信息
    private static String dbUserName;//用于描述用户民信息
    private static String dbPassword;//密码信息

    //进行静态成员的初始化操作
    static {
        jdbcName = "com.mysql.jdbc.Driver";
        dbUrl = "jdbc:mysql://localhost:3306/db_web";
        dbUserName = "root";
        dbPassword = "hmyhmy";
        try {
            Class.forName(jdbcName);//加载驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    //获取连接
    public static Connection getConnection() throws SQLException {
        Connection con = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
        return con;
    }

    //关闭连接
    public static void closeConnection(Connection con) throws SQLException {
        if(null!=con){
            con.close();
        }
    }
}

在这里插入图片描述
在这里插入图片描述

UserDao类的实现

实现注册就是把用户名和密码写进数据库中即可
创建UserDao.java类来实现这个功能

public class UserDao {
    public int creatUser(User user) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            //1.获取连接
            connection = DbUtil.getConnection();
            //2.准备SQL语句
            String sql = "insert into t_user values(null,?,?)";
            //3.获取PrepareStatement类型的引用
            preparedStatement = connection.prepareStatement(sql);
            //4.向?所占位置设置数据
            preparedStatement.setString(1, user.getUserName());
            preparedStatement.setString(2,user.getPassword());
            //5.执行sql语句
            int row = preparedStatement.executeUpdate();//返回执行的行数
            return row;//执行成功
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.关闭资源
            try {
                DbUtil.closeConnection(connection,preparedStatement);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return 0;//执行失败
    }
}

在代码实现时要先把closeConnection方法改一改
在这里插入图片描述

把处理结果发送到浏览器

重新回到RegisterServlet.java中继续写

//将接收到的用户名和密码信息打包成用户对象交给DAO层处理 构建用户类
        User user = new User(userName,Password);
        UserDao userDao = new UserDao();
        int res = userDao.creatUser(user);
        //将处理结果响应到浏览器
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(1 ==res){//因为直插入一条数据,所以1代表成功
            System.out.println("注册成功!");
            writer.write("<h1>注册成功!</h1>");
        }else{
            writer.write("<h1>注册失败!</h1>");
        }
        writer.close();

部署项目,查看结果

在这里插入图片描述
在这里插入图片描述
数据库中也有了相关数据
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值