第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON

第88节:Java中的Ajax和Jquery

ajax是什么?有什么用?原理,怎么用?

ajax是asynchronous javascript and xml(异步javascript和xml),是指一种创建交互式网页应用的网页开发技术。

如用户注册,输入的用户名,提示已经被注册了。

AJAX

Asynchronous JavaScript and XML

ajax是一种不用重新加载整个网页的情况下,能够更新部分网页的技术。

什么是ajax?

是 异步 JavaScript 和 XML,是一种用于快速动态网页的技术,能够在后台与服务器进行少量的数据交换,就可以实现网页的异步更新了,就不用重新加载整个网页,让部分需要进行更新的内容进行更新了。

AJAX 实例

<html>
<body>
// div 来自服务器的信息
<div id="myDiv">
<h3>dashucoding</h3>
</div>

<button type="button" onclick="loadXMLDoc()">Change Content</button>

</body>
</html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX  ...
}
</script>
</head>

创建 XMLHttpRequest 对象

XMLHttpRequestAJAX 的基础
XMLHttpRequest 用于在后台与服务器交换数据
IE5 和 IE6 使用 ActiveXObject

创建对象:

variable=new XMLHttpRequest();
var xmlhttp;
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  { // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

XMLHttpRequest 对象用于和服务器交换数据

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();

open(method,url,async)
method GET 或 POST 请求的类型
url
async true(异步)或 false(同步)

send(string) 将请求发送到服务器
仅用于 POST 请求

GET 和 POST:

GET更快更简单。使用POST的情况:

  1. 无法使用缓冲文件
  2. 向服务器发送大量数据
  3. 发送未知字符

GET 请求

xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();

xmlhttp.open("GET","demo_get2.asp?fname=dashu&lname=coding",true);
xmlhttp.send();

POST 请求

xmlhttp.open("POST","demo_post.asp",true);
xmlhttp.send();
xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=dashu&lname=Coding");

// setRequestHeader(header,value)
header: 规定头的名称
value: 规定头的值 

url - 服务器上的文件

xmlhttp.open("GET","ajax_test.asp",true);
// 可以是任何类型的文件

True 或 False

异步 JavaScript 和 XML

xmlhttp.open("GET","ajax_test.asp",true);
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();

异步false

xmlhttp.open("GET","test1.txt",false);
// 不推荐使用

xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

服务器响应

属性 描述
responseText 获取字符串式的响应数据
responseXML 获取xml式的响应数据

responseText属性:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
  {
  txt=txt + x[i].childNodes[0].nodeValue + "<br />";
  }
document.getElementById("myDiv").innerHTML=txt;

onreadystatechange 事件

readyState 被改变时,会触发 onreadystatechange事件,readyState属性存有XMLHttpRequest的信息。

onreadystatechange 存储函数
readyState
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status
200: "OK"
404: 未找到页面
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
function showHint(str)
{
var xmlhttp;
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","gethint.asp?q="+str,true);
xmlhttp.send();
}

ASP.NET

ASP.NET 是一个开发框架

TCP/IP 教程

XmlHttp

abort取消当前请求,语法:

oXMLHttpRequest.abort();

getAllResponseHeaders
获取响应的所有http头

语法:

strValue = oXMLHttpRequest.getAllResponseHeaders();
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.getAllResponseHeaders());

getResponseHeader:
从响应信息中获取指定的http头

语法:

strValue = oXMLHttpRequest.getResponseHeader(bstrHeader);
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.getResponseHeader("Server"));

onreadystatechange
指定当readyState属性改变时的事件处理句柄

语法:

oXMLHttpRequest.onreadystatechange = funcMyHandler;

介绍 JSON

一种轻量级的数据交换格式

一个对象以“{” 开始,“}” 结束

每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔

数组是值的有序集合

以“[”开始,“]”结束,值之间使用“,”分隔

Ajax

获取文本内容
document.getElementById("username").value
通过XmlHttpRequest请求,XML+http+Request

请求

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript">

    function  ajaxFunction(){
       var xmlHttp;
       try{
            xmlHttp=new XMLHttpRequest();
        }
        catch (e){
           try{
                 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
              }
            catch (e){
              try{
                 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
              catch (e){}
              }
        }

        return xmlHttp;
     }

    //执行get请求
    function get() {

        //1. 创建xmlhttprequest 对象
        var request = ajaxFunction();

        //2. 发送请求。

//      request.open("GET" ,"/DemoServlet01" ,true );
        request.open("GET" ,"/DemoServlet01?name=dashu&age=18" ,true );
        request.send();
    }

    //执行get请求
    function get() {

        //创建xmlhttprequest 对象
        var request = ajaxFunction();

        //发送请求
        request.open("GET" ,"/DemoServlet01?name=dashu&age=18" ,true );

        //获取响应数据
        request.onreadystatechange = function(){

            if(request.readyState == 4 && request.status == 200){
                //弹出响应的信息
                alert(request.responseText);
            }
        }
        request.send();
    }

</script>

</head>
<body>

    <h3><a href="" onclick="get()">使用Ajax方式发送Get请求</a></h3>

</body>
</html>

Post

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript">

    //创建对象
    function  ajaxFunction(){
       var xmlHttp;
       try{
            xmlHttp=new XMLHttpRequest();
        }
        catch (e){
           try{
                 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
              }
            catch (e){
              try{
                 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
              catch (e){}
              }
        }

        return xmlHttp;
     }

    function post() {
        //创建对象
        var request = ajaxFunction();

        //发送请求
        request.open( "POST", "/DemoServlet01", true );

        //获取服务器传送过来的数据
        request.onreadystatechange=function(){
            if(request.readyState==4 && request.status == 200){
                alert("post:"+request.responseText);
            }
        }

        request.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        //带数据过去  , 在send方法里面写表单数据。
        request.send("name=dashucoding&age=19");
    }

</script>

</head>
<body>
    <h3>
        <a href="" onclick="post()">使用Ajax方式发送Post请求</a>
    </h3>
</body>
</html>

数据请求,创建对象:

校验用户名

dao

import java.sql.SQLException;
public interface UserDao {
    /**
     * 用于检测用户名是否存在
     */
    boolean checkUserName(String username) throws SQLException;
}

util:

public class JDBCUtil02 {

    static ComboPooledDataSource dataSource = null;
    static{
        dataSource = new ComboPooledDataSource();
    }

    public static DataSource getDataSource(){
        return dataSource;
    }

    /**
     * 获取连接对象
     * @return
     * @throws SQLException
     */
    public static Connection getConn() throws SQLException{
        return dataSource.getConnection();
    }

    /**
     * 释放资源
     * @param conn
     * @param st
     * @param rs
     */
    public static void release(Connection conn , Statement st , ResultSet rs){
        closeRs(rs);
        closeSt(st);
        closeConn(conn);
    }
    public static void release(Connection conn , Statement st){
        closeSt(st);
        closeConn(conn);
    }

    private static void closeRs(ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }

    private static void closeSt(Statement st){
        try {
            if(st != null){
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            st = null;
        }
    }

    private static void closeConn(Connection conn){
        try {
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}
public class TextUtils {

    /**
     * 判断某一个字符串是否为空。
     */
    public static boolean isEmpty(CharSequence s){
        return s==null || s.length() == 0;
    }
}

servlet

try{
 request.setCharacterEncoding("UTF-8");
 String name = request.getParameter("name");
 UserDao dao = new UserDaoImpl();
 boolean isExist = dao.checkUserName(name);

 if(isExist){
  response.getWriter().println(1);// 存在
 }else{
  response.getWriter().println(2); // 反之
 }
}catch(SQLException e){
 e.printStackTrace();
}
xxx.jsp
<input type="text" name="name" id="name"  onblur="checkUserName()"><span id="span01"></span>

<script type="text/javascript">
    function checkUserName() {
        //获取输入框的值
        var name = document.getElementById("name").value;
        //创建对象
        var request = ajaxFunction();

        //发送请求
        request.open("POST"  ,"/CheckUserNameServlet" , true );

        //注册状态,获取服务器传过来的数据
        request.onreadystatechange = function(){
            if(request.readyState == 4 && request.status == 200){
                var data = request.responseText;
                if(data == 1){
                    document.getElementById("span01").innerHTML = "<font color='red'>用户名已存在!</font>";
                }else{
                    document.getElementById("span01").innerHTML = "<font color='green'>用户名可用!</font>";
                }
            }

        }

        request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        // 输入框发送name
        request.send("name="+name);
    }

</script>

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

原文地址:https://www.cnblogs.com/dashucoding/p/10364639.html

时间: 2024-10-12 19:25:28

第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON的相关文章

第61节:Java中的DOM和Javascript技术

Java中的DOM和Javascript技术 DOM是一门技术,是文档对象模型.所需的文档只有标记型文档,如我们所学的html文档(文档中的所有标签都封装成为对象了) DOM: 为Document Object Model, 文档对象模型, 是用来将标记文档以及文档中的标签等所有内容都封装成对象. 把标签文档中所有的标签封装成对象, 文档也封装成对象,DOM技术(标记型文档封装成对象) DOM技术存在浏览器中,内置了DOM技术解析器,变对象是需要进行解析的,描述进行封装.在内存当中进行解析,为D

第78节:Java中的网络编程(上)

前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: 应用层 传输层 网际层 主机到网络层 OSI模型:(封装) 网络1封包->网络2拆包 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 网络通讯要素: ip地址 端口号 传输协议 主机名和ip地址是对应的,默认的主机名:localhost java.net 类 InetAddress java.lang.Object ->

第80节:Java中的MVC设计模式

前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn.rollBack 隔离级别分别有: 读未提交有脏读 读已提交有不可重复读 可重复读有幻读 可串行化可以解决脏读,幻读,不可重复读 数据库连接池用于创建和管理连接对象. DBCP和C3P0,分别了解代码设置和配置文件设置 DBUtils可以简化数据的增删改查. QueryRunner runner = new QueryRunner()

Java网络编程:OSI七层模型和TCP/IP模型介绍

OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路由器是三层交换设备,常规的交换机是二层交换设备.OSI七层模型是一种框架性的设计方法,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能就是帮助不同类型的主机实现数据传输.它的最大优点是将服务.接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的

java 第50节 Java中的异常链

2016-06-30 1 异常链 两个或多个不同的异常出现在同一个程序中,并且会发生嵌套抛出,我们称之为异常链. package com.java1995; /** * 异常链 * @author Administrator * */ public class ExceptionChainTest { public static void main(String[] args) { Calculator c=new Calculator(); try{ c.chufa(1, 0); }catch

第70节:Java中xml和tomcat

前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that every driver class must implement. The Java SQL framework allows for multiple database drivers. Each driver should supply a class that implements the Driver interface. The Dr

第77节:Java中的事务和数据库连接池和DBUtiles

前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功就算失败,导致回滚就是指所有的数据都会回到最初的状态. 有事务,是为了保证逻辑一定要成功,如银行转账. 回顾一下 什么是jsp,jsp的三大指令. page: 定义当前页面的信息 include: 包含其他页面 taglib: 引入标签库 三大动作标签: <jsp:forward page="">

第82节:Java中的学生管理系统

学生管理系统的删除功能 删除,点击超链接,点击弹出对话框式是否进行删除,如果确定,就删除,超链接执行的是js方法,在js里访问,跳转servlet,,servlet中调用dao方法. <a href="#" onclick="doDelete(${stu.sid})">删除</a> <script type="text/javascript"> function doDelete(sid) { // 弹出对话框

第83节:Java中的学生管理系统分页功能

分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其特点是对内存中数据量存储不大,只是缺点就是要对数据库不断的进行访问:而对逻辑分页来说,就有所不同,它是一下子就把所有的数据全部查询出来,然后放入到内存中,访问速度快,缺点就是对内存空间不足,数据量过大. select * from stu limit 5; // offset 偏移前面的多少条,offset 1 跳过前面的一条 select