欢迎光临散文网 会员登陆 & 注册

Java Web:自己想出的连接数据库的AJAX重名验证实例源码,PPT,学习笔记【诗书画唱】

2020-11-08 21:26 作者:诗书画唱  | 我要投稿

很多东西要从记录小且简单的例子开始——诗书画唱

下面是我自己想出的判断数据库中查询用户名,是否重名的判断方法:



create table user(

id int primary key auto_increment,


act varchar(100) unique,


trueName varchar(100),

pwd varchar(100) ,

sex varchar(100) ,


sfid varchar(100),

phone varchar(100),


Email varchar(100) ,


tid int,

ShippingAddress varchar(100),

ZcTime timestamp default now(),

touXiangImg varchar(100)

);





insert into User(


act ,


trueName ,

pwd ,

sex,


sfid ,

phone ,


Email ,


tid,

ShippingAddress,touXiangImg) values 

 ("1","真实姓名","1","男","11010519491231002X","16666666666","2531894166@qq.com",1,'北京市 北京市辖区 东城区','imgLogo/MyLogo.jpg'),

 ("2","真实姓名","2","男","11010519491231002X","16666666666","2531894166@qq.com",2,'北京市 北京市辖区 东城区','imgLogo/MyLogo.jpg'),

("SSHC520","真实姓名","123456Aa","男","11010519491231002X","16666666666","2531894166@qq.com",1,'北京市 北京市辖区 东城区','imgLogo/MyLogo.jpg'),

 ("SSHC666","真实姓名","123456Aa","男","11010519491231002X","16666666666","2531894166@qq.com",2,'北京市 北京市辖区 东城区','imgLogo/MyLogo.jpg');


package bean;


import java.sql.Timestamp;

import java.util.Date;


public class User {

private Integer id;

private String act;

private String pwd;

private Integer tid;

private String  trueName; 


private String sfid;

private String  phone;


private String  sex;


private String  Email;

private String ShippingAddress;

private Timestamp  ZcTime;

private String TouXiangImg;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getAct() {

return act;

}

public void setAct(String act) {

this.act = act;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public Integer getTid() {

return tid;

}

public void setTid(Integer tid) {

this.tid = tid;

}

public String getTrueName() {

return trueName;

}

public void setTrueName(String trueName) {

this.trueName = trueName;

}

public String getSfid() {

return sfid;

}

public void setSfid(String sfid) {

this.sfid = sfid;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getEmail() {

return Email;

}

public void setEmail(String email) {

Email = email;

}

public String getShippingAddress() {

return ShippingAddress;

}

public void setShippingAddress(String shippingAddress) {

ShippingAddress = shippingAddress;

}

public Timestamp getZcTime() {

return ZcTime;

}

public void setZcTime(Timestamp zcTime) {

ZcTime = zcTime;

}

public String getTouXiangImg() {

return TouXiangImg;

}

public void setTouXiangImg(String touXiangImg) {

TouXiangImg = touXiangImg;

}


}


package com.SSHC.servlet;


import java.io.IOException;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import DAO.UserDao;

import bean.User;


/**

 * Servlet implementation class DupServlet

 */

@WebServlet("/loginServlet")

public class loginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public loginServlet() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, 

* HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, 

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


/**

* @see HttpServlet#doPost(HttpServletRequest 

* request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request,

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

//——————

//获取账号和密码

String act = request.getParameter("act");

String pwd = request.getParameter("pwd");

UserDao ud = new UserDao();



 List<Object> list;


try {

list = ud.selectAll(User.class,null);

String msg = "";

 int i=1;

  for(Object o : list) {


 User u = (User)o;

System.out.println(u.getAct());

//重名验证

if(u.getAct().equals(act)) {

i=i*0;

} else if(act.length()==0&&!u.getAct().equals(act)){

i=i;

}


else if(act.length()>0&&!u.getAct().equals(act)){

i=i*2;

}



  }

  

  if(i==0) {

msg = "该账号名已被使用";

} else if(i==1){

msg = "请输入账号名,账号名不能为空";

}


else if(i%2==0){

msg = "该账号名可以使用";

}

  //中文乱码处理

response.setCharacterEncoding("utf-8");

//将msg返回到jsp页面中去

//servlet中的数据只能在ajax的回调函数中才能拿到

response.getWriter().write(msg);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}






}


}

package DAO;


import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Timestamp;

import java.util.ArrayList;

import java.util.List;


import utils.DBUtils;




//万能Dao

//T不是一个具体的java类,他是一个泛型参数


public class BaseDao<T> {


    public<T> List<T>selectAll(Class cls,String SQL) throws Exception{

    Connection conn = null;

    PreparedStatement pstm = null;

    ResultSet rs = null;

    List<T>list = new ArrayList<T>();

    //通过反射技术获取表的名字,表的名字刚好和bean的名字一样

    //获取类的类名

    String tableName = cls.getSimpleName();

    String sql=null;

    if(SQL==null){

    sql = "select * from " + tableName;}

    else if(SQL!=null){

        sql = "select * from " + tableName

        +SQL;}

    System.out.println(sql);

   

    conn = DBUtils.getConn();

    pstm = conn.prepareStatement(sql);

    rs = pstm.executeQuery();

    //获取bean中的所有属性名

Field []fs = cls.getDeclaredFields();

    while(rs.next()) {

    //通过反射创建出cls对象的实例

    Object obj = cls.newInstance();

    for(int i = 0;i < fs.length;i ++) {

    //bean中的属性名

    String fname = fs[i].getName();

    //获取bean中的属性的类型

    Class type = fs[i].getType();

    Object o = rs.getObject(fname);

    //System.out.println(o); 

    //将属性对应的set方法名拼接出来

    //取出属性名的首字母,将它变成大写

   String methodName = "set" 

    + fname.substring(0,1).toUpperCase() 

    + fname.substring(1);

    //System.out.println(methodName);

    //通过反射调用set方法

  Method m = cls.getDeclaredMethod(methodName, type);

    System.out.println(m);

    m.invoke(obj, o);   

    }

list.add((T)obj);

    }

    return list;

    }

    

    

    

    

    

public static Integer countAdd;

    public Integer add(T t) throws Exception{

    Connection conn = null;

    PreparedStatement pstm = null;

Integer count = -1;

    String tableName = t.getClass().getSimpleName();

 //System.out.println(tableName);

StringBuilder sql = new StringBuilder("insert into "

 + tableName + " (");

 //取出t对象中的所有的属性名

    Field []fs = t.getClass().getDeclaredFields();

    String dot = "";

    for(int i = 0;i < fs.length;i ++) {

    sql.append(dot);

    String fname = fs[i].getName();

    sql.append(fname);

    dot = ",";

    }

    sql.append(")values(");

    String dot1 = "";

    for(int i = 0;i < fs.length;i ++) {

    sql.append(dot1);

    sql.append("?");

    dot1 = ",";

    }

    sql.append(")");

    //System.out.println(sql);

   

    conn = DBUtils.getConn();

    pstm = conn.prepareStatement(sql.toString());

    //调用t对象中所有的get方法

    for(int i = 0;i < fs.length;i ++) {

    //取出属性名

    String fname = fs[i].getName();

    //拼接get方法

String methodName = "get" 

    + fname.substring(0,1).toUpperCase()

    + fname.substring(1);

    //取出需要调用的方法

Method m = t.getClass().getDeclaredMethod(methodName);

    //反射调用get方法

    Object val = m.invoke(t);

    System.out.println("新增的数据是:" + val);

    //设置占位符

    pstm.setObject(i + 1, val);

    }

    count = pstm.executeUpdate();

    countAdd=count;

    System.out.println(countAdd);

    return count;

    }

    public static Integer countUpdate;

    public Integer update(T t,String SQL) throws Exception{

   

    System.out.println("这时传过来的SQL为:"+SQL);

    Connection conn = null;

PreparedStatement pstm = null;

Integer count = -1;


StringBuilder sql = new StringBuilder("update ");

//获取表名,就是获取t对象的类名

Class cls = t.getClass();

String tableName = cls.getSimpleName();

sql.append(tableName + " set ");

//获取t对象的所有属性名

Field[]fs = cls.getDeclaredFields();

//每个javabean的第一个属性必须是id

//下标是从1开始的,也就是排除了id属性

String dot = "";

//定义一个List存放所有的修改的值

List<Object>params = new ArrayList<Object>();

for(int i = 0;i < fs.length;i ++) {

Field f = fs[i];

//获取属性名

String fname = f.getName();

System.out.println("下标为"+i+"的属性名:"+fname);

//调用getXXX方法来获取t中的属性值

String methodName = "get" 

+ fname.substring(0,1).toUpperCase()

+ fname.substring(1);

System.out.println(methodName);

//通过反射获取方法对象

Method m = cls.getDeclaredMethod(methodName);

//反射调用getXXX方法

Object obj = m.invoke(t);

            

//当获取到的值不为空时,才能进行修改

if(obj != null) {

sql.append(dot);

sql.append(fname + " = ? ");



dot = ",";

params.add(obj);

}

}

//将id也放到params容器中去

// Method m1 = cls.getDeclaredMethod("getId");

Method m1 = cls.getDeclaredMethod(

"get" 

+fs[0].getName().substring(0,1)

.toUpperCase()

+ fs[0].getName().substring(1));

Object id = m1.invoke(t);

params.add(id);

//拼接where条件

fs[0].getName();

System.out.println("这个表的第一列的列名"

+ "(一般都为编号名)为:"+fs[0].getName());

// sql.append("where id = ? ");


if(SQL==null){

sql.append("where "+fs[0].getName()+" = ? ");}

System.out.println(sql);


conn = DBUtils.getConn();

System.out.println("SQL:"+SQL);

if(SQL!=null){


sql.append(SQL); 

}

System.out.println("这时执行的修改语句为:"+sql);

pstm = conn.prepareStatement(sql.toString());

//设置占位符的值


if(SQL==null){

for(int i = 0;i < params.size();i ++) {

pstm.setObject(i + 1, params.get(i));

}}


if(SQL!=null){



pstm.setObject(1, "已支付");




}

System.out.println("这时执行的修改语句为:"+sql);

count = pstm.executeUpdate();

countUpdate=count;

    return count;

    }

//    public Integer delete(Integer id){

//    return 0;

//    }

  //万能Dao删除方法

    public static Integer countDelete;

    public Integer delete(Integer id,Class cls) 

    throws Exception{

    Connection conn = null;

PreparedStatement pstm = null;

Integer count = -1;

String tableName = cls.getSimpleName();

Field[]fs = cls.getDeclaredFields();

for(int i = 0;i < fs.length;i ++) {

Field f = fs[i];

//获取属性名:fs[i].getName();

String fname = f.getName();

System.out.println("下标为"+i+"的属性名:"+fname);

//调用getXXX方法来获取t中的属性值

String methodName = "get" 

+ fname.substring(0,1).toUpperCase()

+ fname.substring(1);

System.out.println(methodName);

//通过反射获取方法对象

Method m = cls.getDeclaredMethod(methodName);

//反射调用getXXX方法

//当获取到的值不为空时,才能进行修改


}



// String sql = "delete from " + tableName

// + " where id = ?";

String sql = "delete from " + tableName

+ " where "+fs[0].getName()+" = ?";

conn = DBUtils.getConn();

pstm = conn.prepareStatement(sql);

pstm.setInt(1, id);

count = pstm.executeUpdate();

countDelete=count;

    return count;

    }

    public static void main(String[] args) throws Exception {

 

   

       }

     

      

     

   


}

package utils;


import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Properties;


public class DBUtils {

    private static String driverName;

    private static String url;

    private static String userName;

    private static String pwd;

    //静态块,随着类加载而运行的

    static{

    //读取db.properties文件中的内容:

    Properties prop = new Properties();

    InputStream is = DBUtils.class.getClassLoader()

    .getResourceAsStream("db.properties");

    try {

prop.load(is);

driverName = prop.getProperty("dn");

url = prop.getProperty("url");

userName = prop.getProperty("un");

pwd = prop.getProperty("up");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

    }

    

    public static Connection getConn(){

    Connection conn = null;

    try {

Class.forName(driverName);

conn = DriverManager.getConnection(url,userName,pwd);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

    return conn;

    }

    

    public static void close(ResultSet rs,

    PreparedStatement pstm

    ,Connection conn){

    try {

    if(rs != null) {

    rs.close();

    }

    if(pstm != null) {

    pstm.close();

    }

    if(conn != null) {

    conn.close();

    }

    } catch(Exception e) {

    e.printStackTrace();

    }

    }

}

dn=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/firstjsp?useUnicode=true&characterEncoding=utf-8

un=root

up=root



<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <base hreff="<%=basePath%>">

        <title></title>

        <meta http-equiv="pragma" content="no-cache">

        <meta http-equiv="cache-control" content="no-cache">

        <meta http-equiv="expires" content="0">

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

        <meta http-equiv="description" content="This is my page">

        <script type="text/javascript">

            function dup(){

            //获取输入文本框中的内容

            var act = document.getElementById('act').value;

            //console.log(act);

           

            var xhr = null;//ajax的核心对象

            if(window.XMLHttpRequest) {//判断window对象中是否有XMLHttpRequest属性

            xhr = new XMLHttpRequest();

            } else {//如果没有XMLHttpRequest属性,就使用ActiveXObject创建

            xhr = new ActiveXObject("Microsoft.XMLHTTP");

            }

            //将act传递到servlet中,也就是说要从js代码跳转到java代码中去

            if(xhr) {//判断xhr是否为null

            //设置ajax请求方式是post和提交的url路径

            xhr.open('post','loginServlet');

                //设置ajax请求头

            xhr.setRequestHeader("content-type", 

        "application/x-www-form-urlencoded");

                //设置回调函数

                xhr.onreadystatechange = function(){

                if (xhr.readyState == 4 && xhr.status == 200){

                //获取servlet中传递过来的数据msg

                    document.getElementById('ctx').innerHTML 

                        = xhr.responseText;

                }

                }

                //提交到servlet中去

                //将act的值传递到servlet中去

                xhr.send('act=' + act + '&pwd=123');

            }

            }

        </script>

    </head>

    <body>

        <form action="" method="post">

            <input type="text" name="act" id="act" placeholder="请输入账号"

                onpropertychange="dup();" oninput="dup();" />

            <div id="ctx"></div>

           

            <input type="submit" value="登录" />

        </form>

    </body>

</html>



小例子:不从数据库查就是

这些是基础代码,我写的代码就是在这个基础上升级,自己想出来的。


个人理解:AJAX可以增加运行流畅度。

个人理解:AJAX可以在输入用户名,判断是否重名等的局部刷新同时,可以做别的操作,比如输入密码,而且辛苦写的密码不会因为因为刷新而要重写。





AJAX的PPT:




AJAX简介

AJAX即Asynchronous Javascript And XML(异步的javascript和XML),由HTML、Javascript、DHTML和DOM组成。它是一种交互式的应用程序,也是一种构建网站的强大方法,它的出现使高效的WEB程序开发称为现实。



应用程序的基本选择

●桌面应用程序:可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。与用户进行交互时响应很快。

●WEB应用程序:Web 应用程序运行在某处的 Web 服务器上 ,要通过 Web 浏览器访问这种应用程序。与用户进行交互式时需要等待服务器响应和屏幕刷新,速度比较慢。



AJAX帮我们做什么?

AJAX 尝试建立桌面应用程序的功能和交互性与不断更新的 Web 应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和漂亮的控件,不过是在 Web 应用程序中。



开发AJAX应用程序需要掌握的技术

●HTML:用于建立 Web 表单并确定应用程序其他部分使用的字段。

●JavaScript :是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。

●DHTML 或 Dynamic HTML:用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记 HTML。

●文档对象模型 DOM :用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。


XMLHttpRequest对象

       在一般的 Web 应用程序中,用户填写表单字段并单击 Submit 按钮后就进入了等待处理阶段,此时网页呈现出空白状态,在服务器的响应没有完成前,用户不能做任何事情,这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。

      而AJAX使用XMLHttpRequest对象,对提交的请求进行幕后的处理,即网页不会出现闪烁、消失或者延迟,用户甚至不知道请求的发出。更棒的是,由于请求是异步发出的,你甚至可以不用等待服务器的响应,继续输入数据、滚动屏幕和使用应用程序。

      最后,服务器将数据返回给前台javascript代码,后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。

编写第一个AJAX程序

对于JAVA方向,AJAX的后台响应代码可以写在JSP页面里,也可以是一个servlet或者是struts框架中的action。

编写第一个AJAX程序(续)


在用户交互页面的script块中,创建XMLHttpRequest对象

编写第一个AJAX程序(续)

在用户交互页面的script块中,进行AJAX请求,注意回调函数ajaxCallback,在后面会进行定义。

编写第一个AJAX程序(续)

在用户交互页面的script块中,创建回调函数,对服务器发送来的响应信息进行处理。




HTTP 就绪状态

HTTP 就绪状态表示请求的状态或情形。它用于确定该请求是否已经开始、是否得到了响应或者请求/响应模型是否已经完成。它还可以帮助确定读取服务器提供的响应文本或数据是否安全。在 Ajax 应用程序中需要了解五种就绪状态:

HTTP 状态码

有可能服务器履行了请求(即 HTTP 就绪状态是 4)但是没有返回客户机预期的数据(例如找不到指定的页面)。因此除了就绪状态外,还需要检查 HTTP状态。我们期望的状态码是 200,它表示一切顺利。下表列出了几种常见的HTTP状态码

AJAX作业

设计一个注册表单,只要求输入账号和密码即可进行注册,要求当用户输入账号名重复时,马上显示一行“您注册的账号已存在,请重新输入”。



Java Web:自己想出的连接数据库的AJAX重名验证实例源码,PPT,学习笔记【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律