用户注册登录测试版(jsp+servlet+mysql)51CTO博客 - 千亿集团

用户注册登录测试版(jsp+servlet+mysql)51CTO博客

2019年04月26日12时08分45秒 | 作者: 尊龙 | 标签: 用户,注册,登录 | 浏览: 1364

整体内容不算杂乱,主要是运用jsp+servlet+mysql去完成web端的注册/登录/显现当时用户/退出功用

先看看作用图:

注册:

注册成功后登录:

登录成功后显现用户信息,一起也能够挑选用户退出功用


好了,言归正传,完成这样一个简略模块主要是用到servlet技能去处理用户的注册登录等信息,当然咱们能够在这基础上能够参加其它需求的东西比方加个验证码、忘掉暗码、ajax技能等,当然servlet是根本元素,这个是需求把握的。能够经过下面几个过程去总结一下,期望能给刚入门java web的同学起到抛砖引玉的作用:

1.理清思路(要规划一个什么东西),规划数据库,数据表:

CREATE TABLE tb_user (
id int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(50) NOT NULL,
password varchar(50) NOT NULL,
sex varchar(10) NOT NULL,
tel varchar(50) NOT NULL,
photo TINYBLOB NOT NULL, 
email varchar(100) NOT NULL
)

这儿需求留意photo类型要运用TINYBLOB,而不是varchar否则会提示犯错信息:      Data too long for column photo at row 1


2.规划4个包用于放置java文件:

com.lxy(用户实体信息)

com.lxy.dao(数据库操作文件)

com.lxy.servlet(servlet文件)

com.lxy.code(编码文件)


3.编写用户实体类user.java(package:com.lxy)

public class User {
  private int id;   // 标识
  private String username;// 用户名
  private String password;// 暗码
  private String sex;   // 性别
  private String tel;   // 电话
  private String photo; // 头像
  private String email; // 电子邮箱
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
下面省掉getXXX()和setXXX()办法,请自行编写


4.编写数据库衔接ConnectDB(package:com.lxy.dao)一起导入mysql的jar包

public static Connection getConnection(){
    Connection conn = null;
    try {
    // 加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    // 数据库衔接url
    String url = "jdbc:mysql://localhost:3306/db_test1";
    // 获取数据库衔接
    conn = DriverManager.getConnection(url, "root", "lixiyu");
    } catch (Exception e) {
    e.printStackTrace();
    }
    return conn;
  }
  /**
   * 封闭数据库衔接
   * @param conn Connection目标
   */
  public static void closeConnection(Connection conn){
    // 判别conn是否为空
    if(conn != null){
    try {
      conn.close(); // 封闭数据库衔接
    } catch (SQLException e) {
      e.printStackTrace();
    }
    }
  }

编写用户操作类UserDao(com.lxy.dao):

public void saveUser(User user){
    // 获取数据库衔接Connection目标
    Connection conn = ConnectDB.getConnection();
    // 刺进用户注册信息的SQL句子
    String sql = "insert into tb_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";
    try {
    // 获取PreparedStatement目标
    PreparedStatement ps = conn.prepareStatement(sql);
    // 对SQL句子的占位符参数进行动态赋值
    ps.setString(1, user.getUsername());
    ps.setString(2, user.getPassword());
    ps.setString(3, user.getSex());
    ps.setString(4, user.getTel());
    ps.setString(5, user.getPhoto());
    ps.setString(6, user.getEmail());
    // 履行更新操作
    ps.executeUpdate();
    // 开释此 PreparedStatement 目标的数据库和 JDBC 资源
    ps.close();
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    // 封闭数据库衔接
    ConnectDB.closeConnection(conn);
    }
  }
  /**
   * 用户登录
   * @param username 用户名
   * @param password 暗码
   * @return 用户目标
   */
  public User login(String username, String password){
    User user = null;
    // 获取数据库衔接Connection目标
    Connection conn = ConnectDB.getConnection();
    // 依据用户名及暗码查询用户信息
    String sql = "select * from tb_user where username = ? and password = ?";
    try {
    // 获取PreparedStatement目标
    PreparedStatement ps = conn.prepareStatement(sql);
    // 对SQL句子的占位符参数进行动态赋值
    ps.setString(1, username);
    ps.setString(2, password);
    // 履行查询获取成果集
    ResultSet rs = ps.executeQuery();
    // 判别成果集是否有用
    if(rs.next()){
      // 实例化一个用户目标
      user = new User();
      // 对用户目标特点赋值
      user.setId(rs.getInt("id"));
      user.setUsername(rs.getString("username"));
      user.setPassword(rs.getString("password"));
      user.setSex(rs.getString("sex"));
      user.setTel(rs.getString("tel"));
      user.setPhoto(rs.getString("photo"));
      user.setEmail(rs.getString("email"));
    }
    // 开释此 ResultSet 目标的数据库和 JDBC 资源
    rs.close();
    // 开释此 PreparedStatement 目标的数据库和 JDBC 资源
    ps.close();
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    // 封闭数据库衔接
    ConnectDB.closeConnection(conn);
    }
    return user;
  }
  /**
   * 判别用户名在数据库中是否存在
   * @param username 用户名
   * @return 布尔值
   */
  public boolean userIsExist(String username){
    // 获取数据库衔接Connection目标
    Connection conn = ConnectDB.getConnection();
    // 依据指定用户名查询用户信息
    String sql = "select * from tb_user where username = ?";
    try {
    // 获取PreparedStatement目标
    PreparedStatement ps = conn.prepareStatement(sql);
    // 对用户目标特点赋值
    ps.setString(1, username);
    // 履行查询获取成果集
    ResultSet rs = ps.executeQuery();
    // 判别成果集是否有用
    if(!rs.next()){
      // 假如无效则证明此用户名可用
      return true;
    }
    // 开释此 ResultSet 目标的数据库和 JDBC 资源
    rs.close();
    // 开释此 PreparedStatement 目标的数据库和 JDBC 资源
    ps.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }finally{
    // 封闭数据库衔接
    ConnectDB.closeConnection(conn);
    }
    return false;
  }
}


5.编写注册/登录/退出的jsp和servlet(篇幅太长,这儿只给出注册的要害代码,事例源码我会在后面同享出来)

注册reg.jsp:

写个javascripe去做判别:

<script type="text/javascript">
     function reg(form){
     if(form.username.value  ""){
       alert("用户不能为空!");
       return false;
     }
     if(form.password.value  ""){
       alert("暗码不能为空!");
       return false;
     }
     if(form.repassword.value  ""){
       alert("承认暗码不能为空!");
       return false;
     }
     if(form.password.value != form.repassword.value){
       alert("两次暗码输入不一致!");
       return false;
     }
     if(form.tel.value  ""){
       alert("联系电话不能为空!");
       return false;
     }
     if(form.email.value  ""){
       alert("电子邮箱不能为空!");
       return false;
     }
     }
     function change(){
     var photo = document.getElementById("photo");
     var photoImg = document.getElementById("photoImg");
     photoImg.src = photo.value;
     }
   </script>

下面在jsp中规划你所以想要的表单的作用比方我的这个用个table去写:

<form action="RegServlet" method="post" onsubmit="return reg(this);">
         <table align="center" width="450" border="0">
           <tr>
             <td align="right">用户名:</td>
             <td>
             <input type="text" name="username">
             </td>
           </tr>
           <tr>
             <td align="right">密 码:</td>
             <td>
             <input type="password" name="password">
             </td>
           </tr>
           <tr>
             <td align="right">承认暗码:</td>
             <td>
             <input type="password" name="repassword">
             </td>
           </tr>
           <tr>
             <td align="right">性 别:</td>
             <td>
             <input type="radio" name="sex" value="男" checked="checked">男
             <input type="radio" name="sex" value="女">女
             </td>
           </tr>
           <tr>
             <td align="right">头 像:</td>
             <td>
             <select name="photo" id="photo" onchange="change();">
               <option value="images/boy.png" selected="selected">头像boy</option>
               <option value="images/girl.png">头像girl</option>
             </select>
             <img id="photoImg" src="images/boy.png">
             </td>
           </tr>
           <tr>
             <td align="right">联系电话:</td>
             <td>
             <input type="text" name="tel">
             </td>
           </tr>
           <tr>
             <td align="right">电子邮箱:</td>
             <td>
             <input type="text" name="email">
             </td>
           </tr>
           <tr>
             <td colspan="2" align="center">
             <input type="submit" value="注 册">
             <input type="reset" value="重 置">
             </td>
           </tr>
         </table>
         </form>

写注册的RegServlet:

public class RegServlet extends HttpServlet {
  private static final long serialVersionUID = 5280356329609002908L;
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // 获取用户名
    String username = request.getParameter("username");
    // 获取暗码
    String password = request.getParameter("password");
    // 获取性别
    String sex = request.getParameter("sex");
    // 获取头像
    String photo = request.getParameter("photo");
    // 获取联系电话
    String tel = request.getParameter("tel");
    // 获取电子邮箱
    String email = request.getParameter("email");
    // 实例化UserDao目标
    UserDao userDao = new UserDao();
    if(username != null && !username.isEmpty()){
    if(userDao.userIsExist(username)){
      // 实例化一个User目标
      User user = new User(); 
      // 对用户目标中的特点赋值
      user.setUsername(username);
      user.setPassword(password);
      user.setSex(sex);
      user.setPhoto(photo);
      user.setTel(tel);
      user.setEmail(email);
      // 保存用户注册信息
      userDao.saveUser(user);
      request.setAttribute("info", "祝贺,注册成功!<br>");
    }else{
      request.setAttribute("info", "过错:此用户名已存在!");
    }
    }
    // 转发到message.jsp页面
    request.getRequestDispatcher("message.jsp").forward(request, response);
  }
}

在xml中声明及映射servlet目标:

<! 用户注册 >
  <servlet>
    <servlet-name>RegServlet</servlet-name>
    <servlet-class>com.lxy.servlet.RegServlet</servlet-class>
  </servlet>
<! Servlet映射 >
  <servlet-mapping>
    <servlet-name>RegServlet</servlet-name>
    <url-pattern>/RegServlet</url-pattern>
  </servlet-mapping>


登录那块过程也是类似的,就不逐个展开了。源码里边注释较多,看下学习下根本上能懂得。

—————————————————分割线—————————————————————

聚沙成塔,积少成多

源码请见附件


附件:http://down.51cto.com/data/2364029
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章