• Servlet案例4:用户注册


    数据库准备:

    CREATE DATABASE web;
    USE web;
    CREATE TABLE `user` (
      `uid` VARCHAR(64) NOT NULL,
      `username` VARCHAR(20) DEFAULT NULL,
      `password` VARCHAR(20) DEFAULT NULL,
      `name` VARCHAR(20) DEFAULT NULL,
      `email` VARCHAR(30) DEFAULT NULL,
      `telephone` VARCHAR(20) DEFAULT NULL,
      `birthday` VARCHAR(20) DEFAULT NULL,
      `sex` VARCHAR(10) DEFAULT NULL,
      `state` INT(11) DEFAULT NULL,
      `code` VARCHAR(64) DEFAULT NULL,
      PRIMARY KEY (`uid`)
    )
    View Code

    对应的类:

    package register;
    
    public class User {
        private String uid;
        private String username;
        private String password;
        private String name;
        private String email;
        private String sex;
        private String birthday;
    
        public String getUid() {
            return uid;
        }
    
        public void setUid(String uid) {
            this.uid = uid;
        }
    
        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 getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    
        @Override
        public String toString() {
            return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", name=" + name + ", email="
                    + email + ", sex=" + sex + ", birthday=" + birthday + "]";
        }
    
    }
    View Code

    注册登录页面很简单,一个表单即可,这里省略

    servlet:

    package register;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.sql.SQLException;
    import java.util.Map;
    import java.util.UUID;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.dbutils.QueryRunner;
    
    public class RegisterServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
            //中文乱码的解决
            request.setCharacterEncoding("UTF-8");
            
            //中文乱码的解决原理
            /*
            String username = request.getParameter("username");
            username = new String(username.getBytes("iso8859-1"),"UTF-8");
            */
            
            
            // 获取数据
            // 将数据封装(使用BeanUtils自动封装)
            Map<String, String[]> properties = request.getParameterMap();
            User user = new User();
            try {
                BeanUtils.populate(user, properties);
            } catch (IllegalAccessException | InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // users对象封装完毕,手动封装主键uid(使用uuid)
            user.setUid(UUID.randomUUID().toString());
            // 注册的方法
            regist(user);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        public void regist(User user) {
            QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
            String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";
            try {
                runner.update(sql, user.getUid(), user.getUsername(), user.getPassword(), user.getName(), user.getEmail(),
                        null, user.getBirthday(), user.getSex(), null, null);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    View Code

    抽取的连接池工具类:

    package register;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DataSourceUtils {
    
        private static DataSource dataSource = new ComboPooledDataSource();
    
        private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    
        // 直接可以获取一个连接池
        public static DataSource getDataSource() {
            return dataSource;
        }
    
        // 获取连接对象
        public static Connection getConnection() throws SQLException {
    
            Connection con = tl.get();
            if (con == null) {
                con = dataSource.getConnection();
                tl.set(con);
            }
            return con;
        }
    
        // 开启事务
        public static void startTransaction() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.setAutoCommit(false);
            }
        }
    
        // 事务回滚
        public static void rollback() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.rollback();
            }
        }
    
        // 提交并且 关闭资源及从ThreadLocall中释放
        public static void commitAndRelease() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.commit(); // 事务提交
                con.close();// 关闭资源
                tl.remove();// 从线程绑定中移除
            }
        }
    
        // 关闭资源方法
        public static void closeConnection() throws SQLException {
            Connection con = getConnection();
            if (con != null) {
                con.close();
            }
        }
    
        public static void closeStatement(Statement st) throws SQLException {
            if (st != null) {
                st.close();
            }
        }
    
        public static void closeResultSet(ResultSet rs) throws SQLException {
            if (rs != null) {
                rs.close();
            }
        }
    
    }
    View Code

    c3p0-config.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="user">root</property>
            <property name="password">xuyiqing</property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///web</property>
        </default-config> 
    </c3p0-config> 
    View Code

    注意导入相关jar包

    web.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>WEB5</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <description></description>
        <display-name>RegisterServlet</display-name>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>register.RegisterServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/register</url-pattern>
      </servlet-mapping>
    </web-app>
    View Code
  • 相关阅读:
    坐标
    firewallcmd常用命令
    sublime text 配置Latex
    winformDataGridView常用设置
    OutLook配置腾讯企业邮箱
    C#4种定时器Timer的用法
    C#监控Enter和Esc事件
    c#使用SqlSugar动态切换数据库
    WinformDataGridViewDataGridViewComboBoxColumn无法获取值问题
    C#无法将“******.dll”复制到“..*****.dll”。超出了重试计数 10。失败。文件被Mirosoft vs2017(10932)锁定
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8412782.html
Copyright © 2020-2023  润新知