Servlet学习(2)—— 将接收的数据存入数据库

本文详细介绍了一个完整的Java Web应用程序的搭建过程,包括数据库创建、JavaBean对象设计、数据库连接配置、DAO层实现及Servlet程序编写等关键步骤。

一. 创建数据库和表

  创建一个数据库webstudy,在该数据库下创建一个user表

CREATE TABLE user (
  id int NOT NULL AUTO_INCREMENT,
  username varchar(45) NOT NULL,
  password varchar(45) NOT NULL,
  sex varchar(45) NOT NULL,
  country varchar(45) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY username_UNIQUE (username)

insert into user(username,age,sex,country) values('Tom','123456','男','美国');

二. 编写数据库表对应的JavaBean对象

      在pojo包下创建User类,将数据库中的内容封装成一个对象

package pojo;

public class User {
    private Integer id;
    private String username;
    private String password;
    private String sex;
    private String country;

    public User() {
    }

    public User(Integer id, String username, String password, String sex, String country) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.country = country;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}

三. 连接数据库

1. 创建jdbc.properties文件,将其放在src下(必须是src目录下第一级),文件内容为:

url=jdbc:mysql://localhost:3306/webstudy
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver

initialSize=10
maxActive=10

2. 在utils包下创建一个工具类JdbcUtils.java文件,用来连接数据库

package server.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtils {
    private static DataSource source;
    static{
        try {
            Properties properties = new Properties();
            //读取jdbc.properties属性
            InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //从流中加载数据
            properties.load(is);
            //创建数据库连接池
            source = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = source.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //关闭连接
    public static void closeResource(Connection conn){
        try {
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

四. Dao —— 操作数据库

1. 在dao.impl包下编写BaseDao类,用来操作数据库(更新)

package dao.impl;

import org.apache.commons.dbutils.QueryRunner;
import utils.JdbcUtils;

import java.sql.Connection;

public abstract class BaseDao {
    //使用dbutils操作数据库
    private QueryRunner queryRunner = new QueryRunner();

    //更新数据
    public int updateData(String sql, Object ... args) {
        Connection conn = JdbcUtils.getConnection();
        try {
            return queryRunner.update(conn, sql, args);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.closeResource(conn);
        }
        return -1;
    }
}

2. 在dao包下编写UserDao接口,用来将用户信息保存到数据库中

package dao;

import pojo.User;

public interface UserDao {
    //将用户信息保存到数据库中
    public int saveUser(User user);
}

 3. 在dao.impl包下编写一个UserDaoImpl类,继承BaseDao类并实现UserDao接口

package dao.impl;

import dao.UserDao;
import pojo.User;

public class UserDaoImpl extends BaseDao implements UserDao {
    @Override
    public int saveUser(User user) {
        String sql = "insert into user(username,password,sex,country) values(?,?,?,?)";
        return updateData(sql,user.getUsername(),user.getPassword(),user.getSex(),user.getCountry());
    }
}

四. 编写Servlet程序来接收客户端请求的数据,并将其保存到数据库中

package ServletStudy;

import dao.UserDao;
import dao.impl.UserDaoImpl;
import pojo.User;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet extends HttpServlet {
    private UserDao userDao = new UserDaoImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        String country = req.getParameter("country");

        userDao.saveUser(new User(null, username, password, sex, country));
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Servlet</servlet-name>   <!-- 编写的Servlet程序的类名 -->
        <servlet-class>ServletStudy.Servlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>  <!-- 编写的Servlet程序的类名 -->
        <url-pattern>/servlet</url-pattern>   <!-- 通常是类名的小写,该地址将指向编写的Servlet程序 -->
    </servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action = "http://localhost:8080/WebStudy_war_exploded/servlet" method = "post">
        姓名:<input type = "text" name = "username"/> <br/>
        密码:<input type = "password" name = "password"/> <br/>
        性别:<input type = "radio" name = "sex" value= "man"> 男
             <input type = "radio" name = "sex" value= "woman"/> 女 <br/>
        国家:<select name = "country">
                <option>请选择</option>
                <option value= "China">中国</option>
                <option value= "USA">美国</option>
                <option value= "UK">英国</option>
             </select> <br/>
        <input type = "submit" value = "提交"/>
    </form>
</body>
</html>
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值