第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
对象
XMLHttpRequest
是 AJAX
的基础
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的情况:
- 无法使用缓冲文件
- 向服务器发送大量数据
- 发送未知字符
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 点赞
相关文章
- 应用程序连接hbase报错:java.net.SocketTimeoutException: callTimeout=60000
- Which is better, ASP.NET, Java or PHP?
- ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
- bootstrap-data-target触发模态弹出窗元素的data使用 data-toggle与data-target的作用 深入ASP.NET MVC之九:Ajax支持 Asp.Net MVC4系列--进阶篇之AJAX
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- 【JAVA】JSP操作数据库简单实例和mysql-connector-java-5.0.3-bin.jar项目配置方法
- 大杂烩 -- Java内存布局【图】以及java各种存储区【详解】
- 【Java集合源代码剖析】Hashtable源代码剖析
- 【java细节】Java代码忽略https证书:No subject alternative names present
- .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
- 把Java生成的RSA公钥、私钥转换成.NET使用的XML格式
- Java Design Demo -简单的队列-异步多任务队列(java android)
- 在java中使用JMH(Java Microbenchmark Harness)做性能测试
- atitit.提升开发效率---使用server控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比較
- Unity 报错之 java.net.MalformedURLException: unknown protocol
- How to improve Java's I/O performance( 提升 java i/o 性能)
- Java/JavaScript有哪些图形图像处理的框架?
- Java 报错 Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
- 多种方式解决Java控制台报错 java.util.LinkedHashMap cannot be cast to.....