zoukankan      html  css  js  c++  java
  • Servlet登录小案例

    需求:
    登录功能 
    登录页面输入用户名和密码, 到数据库进行验证 ,如果成功跳转到success.html页面,失败跳转到error.html页面
    数据库 mysql,数据表 t_user表【表中的字段 :name 用户名,pwd 密码】
    实现:
    mysql 存储数据建表 
    jdbc操作java代码连接查询数据库里对应的字段
    servlet将 html和java连接起来,用login来登录转发到成功或者失败页面。
    实现步骤:
    jdbc 
    依赖 jar包,数据库连接的util DBUtil数据库连接工具类
    mysql 连接
    db.properties 数据库连接配置
    核心代码实现:(DAO层)
    sql语句 查询:String sql = "select * from t_user  where name=? and pwd =? ";
    创建一个实体类和数据库表对应,dao层 用户名和密码验证,返回一个结果 对象 
    servlet调用DAO层:如果用户存在 ,不为空,跳转到ok.html页面 ;如果不存在,对象为空, 登录失败 error.html

    前台页面:
    login.html【登录界面】

     1 <!DOCTYPE html>
     2 <html>
     3   <head>
     4     <title>login.html</title>
     5     <meta charset="utf-8">
     6     <meta name="keywords" content="keyword1,keyword2,keyword3">
     7     <meta name="description" content="this is my page">
     8     <meta name="content-type" content="text/html; charset=UTF-8">
     9     
    10     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    11 
    12   </head>
    13   
    14   <body>
    15       <form action="UserLogin">
    16           用户名:<input type="text" name="uname" id="uname" /><br>
    17           密码:<input type="password" name="pwd" id="pwd" /><br>
    18           <input value="登录" type="submit"/>
    19       </form>
    20   </body>
    21 </html>
    View Code

    success.html【登录成功界面】

     1 <!DOCTYPE html>
     2 <html>
     3   <head>
     4     <title>success.html</title>
     5     <meta charset="utf-8">
     6     <meta name="keywords" content="keyword1,keyword2,keyword3">
     7     <meta name="description" content="this is my page">
     8     <meta name="content-type" content="text/html; charset=UTF-8">
     9     
    10     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    11 
    12   </head>
    13   
    14   <body>
    15     This is 登录成功  page.看到女神<br>
    16     <div>
    17     <img src="imges/success.jpg"  width="800px" height="500px"/>
    18     </div>
    19   </body>
    20 </html>
    View Code

    error.html【登录失败界面】

     1 <!DOCTYPE html>
     2 <html>
     3   <head>
     4     <title>error.html</title>
     5     <meta charset="utf-8">
     6     <meta name="keywords" content="keyword1,keyword2,keyword3">
     7     <meta name="description" content="this is my page">
     8     <meta name="content-type" content="text/html; charset=UTF-8">
     9     
    10     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    11 
    12   </head>
    13   
    14   <body>
    15     This is 登录失败  page.一直在转悠转悠 <br>
    16     <div>
    17         <img src="imges/error.gif" />
    18     </div>
    19   </body>
    20 </html>
    View Code

    entity层【实体类】

     1 package boom.servlet.entity;
     2 /**
     3  * 实体类
     4  * @author Administrator
     5  *
     6  */
     7 public class T_user {
     8     // 对应着数据库表的字段
     9     private int id;
    10     private String name;
    11     private String pwd;
    12     // 无参构造方法
    13     public T_user() {
    14     }
    15     // 有参构造方法
    16     public T_user(int id, String name, String pwd) {
    17         super();
    18         this.id = id;
    19         this.name = name;
    20         this.pwd = pwd;
    21     }
    22     // getter setter
    23     public int getId() {
    24         return id;
    25     }
    26     public void setId(int id) {
    27         this.id = id;
    28     }
    29     public String getName() {
    30         return name;
    31     }
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35     public String getPwd() {
    36         return pwd;
    37     }
    38     public void setPwd(String pwd) {
    39         this.pwd = pwd;
    40     }
    41     // 重写toString
    42     @Override
    43     public String toString() {
    44         return "T_user [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
    45     }
    46     
    47 }
    View Code

    util层【封装的JDBC数据库连接】

      1 package boom.servlet.util;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.sql.Connection;
      6 import java.sql.DriverManager;
      7 import java.sql.PreparedStatement;
      8 import java.sql.ResultSet;
      9 import java.sql.SQLException;
     10 import java.sql.Statement;
     11 import java.util.Properties;
     12 /**
     13  * 连接数据库的工具类
     14  * @author Administrator
     15  *
     16  */
     17 public class DBUtil {
     18     private static String driver;
     19     private static String url;
     20     private static String username;
     21     private static String password;
     22 
     23     static {
     24         // 创建properties对象获取属性文件的内容
     25         Properties p = new Properties();
     26         // 获取属性配置文件的读取流对象
     27         InputStream is = DBUtil.class.getResourceAsStream("/db.properties");
     28         try {
     29             // 加载属性配置文件
     30             p.load(is);
     31             // 获取jdbc参数
     32             driver = p.getProperty("driver");
     33             url = p.getProperty("url");
     34             username = p.getProperty("username");
     35             password = p.getProperty("password");
     36             // 加载驱动
     37             Class.forName(driver);
     38         } catch (IOException e) {
     39             e.printStackTrace();
     40         } catch (ClassNotFoundException e) {
     41             // TODO Auto-generated catch block
     42             e.printStackTrace();
     43         }
     44     }
     45 
     46     // 获取Connection对象
     47     public static Connection getConnection() {
     48         Connection conn = null;
     49         try {
     50             conn = DriverManager.getConnection(url, username, password);
     51         } catch (SQLException e) {
     52             e.printStackTrace();
     53         }
     54         return conn;
     55     }
     56 
     57     // 封装获取PreparedStatement对象
     58     public static PreparedStatement getPreparedStatement(String sql,
     59             Connection conn) {
     60 
     61         PreparedStatement ps = null;
     62         try {
     63             ps = conn.prepareStatement(sql);
     64         } catch (SQLException e) {
     65             // TODO Auto-generated catch block
     66             e.printStackTrace();
     67         }
     68         return ps;
     69 
     70     }
     71 
     72     // 封装获取Statement对象
     73     public static Statement getStatement(Connection conn) {
     74         Statement stmt = null;
     75         try {
     76             stmt = conn.createStatement();
     77         } catch (SQLException e) {
     78             e.printStackTrace();
     79         }
     80         return stmt;
     81 
     82     }
     83 
     84     // 关闭资源
     85     //父类可以调用 子类继承过的父类方法
     86     public static void closeAll(ResultSet rs, Statement ps, Connection conn) {
     87         try {
     88             if(rs!=null ){
     89                 rs.close();
     90             }
     91         } catch (SQLException e1) {
     92             e1.printStackTrace();
     93         }
     94         try {
     95             if(ps!=null ){
     96                 ps.close();
     97             }
     98         } catch (SQLException e) {
     99                 e.printStackTrace();
    100         }
    101         try {
    102             if(conn!=null){
    103                 conn.close();
    104             }
    105         } catch (SQLException e) {
    106             e.printStackTrace();
    107         }
    108     }
    109     // 封装DML
    110     public static int executeDML(String sql, Object... objs) {
    111         // 创建连接对象
    112         Connection conn = getConnection();
    113         // 创建sql命令对象
    114         PreparedStatement ps = DBUtil.getPreparedStatement(sql, conn);
    115         // 给占位符赋值
    116         try {
    117             conn.setAutoCommit(false);
    118             for (int i = 0; i < objs.length; i++) {
    119                 ps.setObject(i + 1, objs[i]);
    120             }
    121             int i = ps.executeUpdate();
    122             conn.commit();
    123             return i;
    124         } catch (Exception e) {
    125             try {
    126                 conn.rollback();
    127             } catch (SQLException e1) {
    128                 // TODO Auto-generated catch block
    129                 e1.printStackTrace();
    130             }
    131         } finally {
    132             // 关闭资源
    133             DBUtil.closeAll(null, ps, conn);
    134         }
    135         // 返回结果
    136         return -1;
    137     }
    138     // 测试数据库是否连接成功
    139     public static void main(String[] args) {
    140         Connection conn = DBUtil.getConnection();
    141         System.out.println(conn);
    142     }
    143 }
    View Code

    dao层【user实现类】

     1 package boom.servlet.dao;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 
     8 import boom.servlet.entity.T_user;
     9 import boom.servlet.util.DBUtil;
    10 
    11 /**
    12  * 登录查询实现类
    13  * @author Administrator
    14  *select * from t_user where name='admin' and pwd='admin'
    15  */
    16 public class UserDaoImpl {
    17     // 返回对象
    18     public T_user getUser(String name,String pwd){
    19         String sql = "select * from t_user  where name=? and pwd =? ";
    20         Connection conn = null;
    21         PreparedStatement  ps = null;
    22         ResultSet rs = null;
    23         T_user user=  null;
    24         //1.创建连接
    25         conn = DBUtil.getConnection();
    26         try {
    27               //2.获取预处理块对象  preparestatement
    28               ps = conn.prepareStatement(sql);
    29               //3.绑定参数
    30               ps.setString(1, name);
    31               ps.setString(2, pwd);
    32               //4.执行SQL语句  5.获取结果集
    33                rs = ps.executeQuery();
    34               //6.遍历结果集存放到 user对象中
    35                while(rs.next()){
    36                    int id = rs.getInt("id");
    37                    String name2 = rs.getString("name");
    38                    String pwd2 = rs.getString("pwd");
    39                    //将数据放到对象中
    40                    user = new T_user(id,name2,pwd2);
    41                }
    42         } catch (SQLException e) {
    43             e.printStackTrace();
    44         }finally{
    45             //7.关闭资源
    46             DBUtil.closeAll(rs, ps, conn);
    47         }
    48         return user;
    49     }
    50 }
    View Code

    servlet层【获取前端页面登录验证】

     1 package boom.servlet.servlet;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.http.HttpServlet;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 
    10 import boom.servlet.dao.UserDaoImpl;
    11 import boom.servlet.entity.T_user;
    12 /**
    13  * 获取前端页面登录验证
    14  * @author Administrator
    15  *
    16  */
    17 public class UserLogin extends HttpServlet {
    18     @Override
    19     protected void service(HttpServletRequest request,
    20             HttpServletResponse response) throws ServletException, IOException {
    21         // 1、获取login用户提交的数据【账户,密码】
    22         String uname = request.getParameter("uname");
    23         String pwd = request.getParameter("pwd");
    24         // 2、调用业务逻辑层。简化后调用dao层
    25         UserDaoImpl daoImpl = new UserDaoImpl();
    26         T_user user = daoImpl.getUser(uname, pwd);
    27         String path = "/login.html";
    28         if (user != null) {
    29             path = "/success.html";
    30         } else {
    31             path = "/error.html";
    32         }
    33         // 3 根据dao的查询结果 ,跳转到成功或失败页面
    34         request.getRequestDispatcher(path).forward(request, response);
    35 
    36     }
    37 }
    View Code

    test层【测试dao层是否连接成功】

     1 package boom.servlet.test;
     2 
     3 import boom.servlet.dao.UserDaoImpl;
     4 import boom.servlet.entity.T_user;
     5 
     6 /**
     7  * 测试dao层
     8  * @author Administrator
     9  *
    10  */
    11 public class TestUserDao {
    12     public static void main(String[] args) {
    13         UserDaoImpl daoImpl = new UserDaoImpl();
    14         T_user user = daoImpl.getUser("boom", "123");
    15         if(user != null){
    16             System.out.println("登录成功");
    17         }else{
    18             System.out.println("登录失败");
    19         }
    20     }
    21 }
    View Code

    数据库配置文件【db.properties】

    演示界面:



  • 相关阅读:
    Java 匿名内部类
    【嘎】数组-搜索插入位置
    【嘎】数组-1266. 访问所有点的最小时间
    【嘎】数组-1313. 解压缩编码列表
    【嘎】数组-1431. 拥有最多糖果的孩子
    element-ui下拉多选报错Error in event handler for "handleOptionClick": "TypeError: value.push is not a function"
    【嘎】数组-有效的山脉数组
    【嘎】数组-打家劫舍
    【嘎】字符串-字符串中的第一个唯一字符
    linux
  • 原文地址:https://www.cnblogs.com/cao-yin/p/9899665.html
Copyright © 2011-2022 走看看