Servlet(简单模拟表单提交及ajax提交)模拟页面登陆-连接数据库-11

Servlet模拟页面登陆-连接数据库

1.mysql的jar包放入WEB-INF-lib

image.png

2. 新建文件夹放数据库配置文件db.properties

image.png

3.在mysql数据库中建表tb_user

image.png

4. 在java中创建数据库工具类打开数据库连接

image.png

package com.shsxt.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

/**
 * 数据库工具类
 *  1、打开数据库连接
 *  2、关闭资源
 * 
 *  常见的报错情况:
 *      1、数据库的jar包未拷贝到lib目录下
 *          java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
 *      2、数据库的密码可能不正确:
 *          java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
 *      3、数据库名称不正确
 *          com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'java29'
 * 
 * 
 * @author Lisa Li
 *
 */
public class DBUtil {

    // 得到配置文件对象
    private static Properties properties = new Properties();
    
    static {
        try {
            // 得到db.properties的输入流对象
            InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
            // 通过properties的load()方法,加载配置文件的输入流
            properties.load(inputStream);
        } catch (Exception e) {
            // 打印异常
            e.printStackTrace();
        }
    }
    
    /**
     * 得到数据库连接
     *  1、加载驱动
     *  2、通过地址、账号、密码得到数据库连接
     * @return
     */
    public static Connection getConnection() {
        Connection connection = null;
        
        // 从配置对象中获取参数   getProperty()
        String jdbcName = properties.getProperty("jdbcName");
        String dbUrl = properties.getProperty("dbUrl");
        String dbName = properties.getProperty("dbName");
        String dbPwd = properties.getProperty("dbPwd");
        
        try {
            //  1、加载驱动
            Class.forName(jdbcName);
            // 2、通过地址、账号、密码得到数据库连接
            connection = DriverManager.getConnection(dbUrl, dbName, dbPwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }
    
    /**
     * 关闭资源
     * @param connection
     * @param preparedStatement
     * @param resultSet
     */
    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
        // 关闭资源
        try {
            // 先判断不为空,再关闭
            if (resultSet != null) {
                resultSet.close();
            }
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    
    public static void main(String[] args) {
        System.out.println(getConnection());
    }
    
    
}


字符串工具类判断字符串是否为空

package com.shsxt.util;

/**
 * 字符串工具类
 * @author Lisa Li
 *
 */
public class StringUtil {

    
    /**
     * 判断字符串是否为空
     *  为空,返回true;否则返回false
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        if (str == null || "".equals(str.trim())) {
            return true;
        }
        return false;
    }
    
}


5.准备User类 用户类 javabean

image.png

package com.shsxt.model;

/**
 * 用户类
 * @author Lisa Li
 *
 */
public class User {

    private Integer userId; // 主键,用户ID
    private String userName; // 用户名
    private String userPwd; // 用户密码
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + "]";
    }
    
}


6.用户登陆服务器端

通过用户名和密码查询用户对象

* 1)、得到数据库连接

* 2)、准备[sql]{.underline}语句

* 3)、预编译[sql]{.underline}语句

* 4)、设置参数,下标从1开,按照参数的顺序设置

* 5)、执行查询,返回resultSet结果集

* 6)、判断并分析结果集,得到user对象

* 7)、关闭资源


image.png
package com.shsxt.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.shsxt.model.User;
import com.shsxt.util.DBUtil;
import com.shsxt.util.StringUtil;

/**
 * 用户登录
 */
public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 接收参数 (用来区分当前是什么操作)
        String actionName = request.getParameter("actionName");
        // actionName=form表示表单提交;actionName=ajax表示ajax提交
        if ("form".equals(actionName)) {
            
            // 表单登录
            formSubmit(request, response);
            
        } else if ("ajax".equals(actionName)) {
            
            // ajax登录
            ajaxSubmit(request, response);
            
        }
        
    }
    
    /**
     * ajax登录
     * @param request
     * @param response
     * @throws IOException 
     */
    private void ajaxSubmit(HttpServletRequest request, HttpServletResponse response) throws IOException {

        // 接收参数
        String uname = request.getParameter("userName");
        String upwd = request.getParameter("userPwd");
        
        // 设置响应类型及编码
        response.setContentType("text/html;charset=UTF-8");
        
        // 得到输出流
        PrintWriter out = response.getWriter();
        
        // 非空判断
        if (StringUtil.isEmpty(uname) || StringUtil.isEmpty(upwd)) {
            out.write("用户名或密码不能为空!");
            out.close();
            return;
        }
        
        // 从数据库中查询用户对象是否存在
        User user = findUserByUnameAndUpwd(uname, upwd);
        // 判断用户对象是否存在
        if (user == null) {
            out.write("用户名称或密码不正确!");
            out.close();
            return;
        }
        
        // 登录成功
        out.write("Success");
        out.close();
        
    }


    /**
     * 表单登录
     * @param request
     * @param response
     * @throws IOException 
     */
    public void formSubmit(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 接收参数
        String uname = request.getParameter("uname");
        String upwd = request.getParameter("upwd");
        
        // 设置响应类型及编码
        response.setContentType("text/html;charset=UTF-8");
        
        // 得到输出流
        PrintWriter out = response.getWriter();
        
        // 非空判断
        if (StringUtil.isEmpty(uname) || StringUtil.isEmpty(upwd)) {
            out.write("<h3>用户名或密码不能为空!</h3><h4><a href='login.html'>返回登录</a></h4>");
            out.close();
            return;
        }
        
        // 从数据库中查询用户对象是否存在
        User user = findUserByUnameAndUpwd(uname, upwd);
        // 判断用户对象是否存在
        if (user == null) {
            out.write("<h3>用户名称或密码不正确!</h3><h4><a href='login.html'>返回登录</a></h4>");
            out.close();
            return;
        }
        
        // 登录成功跳转到首页
        response.sendRedirect("index.html");
    }
    
    
    
    
    /**
     * 通过用户名和密码查询用户对象
     *  1、得到数据库连接
     *  2、准备sql语句
     *  3、预编译sql语句
     *  4、设置参数,下标从1开,按照参数的顺序设置
     *  5、执行查询,返回resultSet结果集
     *  6、判断并分析结果集,得到user对象
     *  7、关闭资源
     * @param userName
     * @param userPwd
     * @return
     */
    public User findUserByUnameAndUpwd (String userName, String userPwd) {
        User user = null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        
        try {
            // 1、得到数据库连接
            connection = DBUtil.getConnection();
            // 2、准备sql语句
            String sql = "select * from tb_user where userName = ? and userPwd = ? ";
            // 3、预编译sql语句
            preparedStatement = connection.prepareStatement(sql);
            // 4、设置参数,下标从1开,按照参数的顺序设置
            preparedStatement.setString(1, userName);
            preparedStatement.setString(2, userPwd);
            // 5、执行查询,返回resultSet结果集
            resultSet = preparedStatement.executeQuery();
            // 6、判断并分析结果集,得到user对象
            /*while (resultSet.next()) {
                
            }*/
            if (resultSet.next()) { // 如果返回true,表示查询到数据;否则未查询到数据
                user = new User();
                user.setUserId(resultSet.getInt("userId"));
                user.setUserName(resultSet.getString("userName"));
                user.setUserPwd(userPwd);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7、关闭资源
            DBUtil.close(connection, preparedStatement, resultSet);
        }
        return user;        
    }
    
    
    public static void main(String[] args) {
        System.out.println(new UserServlet().findUserByUnameAndUpwd("zhangsan", "123456"));
    }

}


配置WEB.xml文件

image.png
<?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>loginProject</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>UserServlet</display-name>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.shsxt.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/userServlet</url-pattern>
  </servlet-mapping>
</web-app>


7。前台页面 模拟表单登陆

image.png
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
    <form action="userServlet" method="post">
        姓名:<input type="text" name="uname" id="uname" /> <br/>
        密码:<input type="password" name="upwd" id="upwd" /> <br/>
        <input type="button" value="登录" onclick="checkForm()" />
        <span id="msg" style="font-size:12px;color:red"></span>
        <input type="hidden" name="actionName" value="form" />
    </form>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
    /*
     * 验证表单
     */
    function checkForm(){
        // 获取用户名
        var uname = $("#uname").val();
        // 判断是否为空
        if (uname.length < 1) {
            $("#msg").html("姓名不能为空!");
            return;
        }
        //  获取密码
        var upwd = $("#upwd").val();
        // 判断是否为空
        if (upwd.length < 1) {
            $("#msg").html("密码不能为空!");
            return;
        }
        
        // 提交表单
        $("form").submit();
    }
</script>
</html>


登陆成功页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>登录成功!</h2>
</body>
</html>


image.png

image.png

8。前台页面 模拟* ajax登录 异步登陆

image.png

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
        姓名:<input type="text" name="uname" id="uname" /> <br/>
        密码:<input type="password" name="upwd" id="upwd" /> <br/>
        <input type="button" value="登录" onclick="checkForm()" />
        <span id="msg" style="font-size:12px;color:red"></span>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
    /*
     * 验证表单
     */
    function checkForm(){
        // 获取用户名
        var uname = $("#uname").val();
        // 判断是否为空
        if (uname.length < 1) {
            $("#msg").html("姓名不能为空!");
            return;
        } 
        //  获取密码
        var upwd = $("#upwd").val();
        // 判断是否为空
        if (upwd.length < 1) {
            $("#msg").html("密码不能为空!");
            return;
        } 
        
        // 发送ajax请求
        $.ajax({
            type:"post",
            url:"userServlet",
            data:{
                userName:uname,
                userPwd:upwd,
                actionName:"ajax"
            },
            success:function(result) {
                if (result == "Success") {
                    // js跳转
                    window.location.href = "index.html";
                } else {
                    $("#msg").html(result); 
                }
            }
                
        });
        
    
    }
</script>
</html>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,147评论 2 22
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 1,945评论 0 5
  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 750评论 0 3
  • 最原始的数据库连接就是我们打开一个连接,使用过后再关闭该链接来释放资源。频繁的新建打开再关闭连接对jvm和数据库都...
    野柳阅读 6,237评论 1 11
  • 常用语句: sql/plus sqlplus 'amdocs/Amdocs.Jx.China.110#@ysdb1...
    好好学习的蜗牛阅读 2,858评论 0 0