AJAX
ajax - ASynchronous JavaScript And XML 异步的JavaScript 和 XML
异步和同步
客户端和服务器端相互通信的基础上
客户端必须等待服务器的响应。在等待的期间客户端不能做其他操作
客户端必须要等待服务器的响应。在服务器处理请求的过程中,客户端可以进行其他的操作
Ajax是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术
通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
提升用户的体验
实现方式
原生的JS实现方式
package com. ytzl. servlet ;
import javax. servlet. * ;
import javax. servlet. http. * ;
import javax. servlet. annotation. * ;
import java. io. IOException ;
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
@Override
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
String username = request. getParameter ( "username" ) ;
try {
Thread . sleep ( 5000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
System . out. println ( username) ;
response. getWriter ( ) . write ( "hello\t" + username) ;
}
@Override
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
this . doPost ( request, response) ;
}
}
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 将来的我比现在好,这一点我已经有了把握</ title>
</ head>
< script type = " text/javascript" >
function fun ( ) {
var xmlhttp;
if ( window. XMLHttpRequest) {
xmlhttp = new XMLHttpRequest ( ) ;
} else {
xmlhttp = new ActiveXObject ( "Microsoft.XMLHTTP" ) ;
}
xmlhttp. open ( "GET" , "ajaxServlet?username=tom" , true ) ;
xmlhttp. send ( )
xmlhttp. onreadystatechange = function ( )
{
if ( xmlhttp. readyState== 4 && xmlhttp. status== 200 )
{
var responseText = xmlhttp. responseText;
alert ( responseText)
}
}
}
</ script>
< body>
< input type = " button" value = " 发送异步请求" onclick = " fun ( ) " >
< input type = " text" >
</ body>
</ html>
JQuery实现方式
package com. ytzl. servlet ;
import javax. servlet. * ;
import javax. servlet. http. * ;
import javax. servlet. annotation. * ;
import java. io. IOException ;
@WebServlet ( "/ajaxServlet" )
public class AjaxServlet extends HttpServlet {
@Override
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
String username = request. getParameter ( "username" ) ;
System . out. println ( username) ;
response. getWriter ( ) . write ( "hello " + username) ;
}
@Override
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
this . doPost ( request, response) ;
}
}
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 将来的我比现在好,这一点我已经有了把握</ title>
</ head>
< script src = " lib/jquery.min.js" > </ script>
< script type = " text/javascript" >
function fun ( ) {
$. ajax ( {
url : "ajaxServlet" ,
type : "post" ,
data : {
"username" : "jack" ,
"age" : 18 ,
} ,
success : function ( data ) {
alert ( data)
} ,
} )
}
</ script>
< body>
< input type = " button" value = " 发送异步请求" onclick = " fun ( ) " >
< input type = " text" >
</ body>
</ html>
$.ajax()
$.ajax({键值对})
属性 说明 url 请求路径 type 请求方式 data 请求参数 success:function(){} 响应成功后的回调函数 error:function (){} 出错后的回调函数
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 将来的我比现在好,这一点我已经有了把握</ title>
</ head>
< script src = " lib/jquery.min.js" > </ script>
< script type = " text/javascript" >
function fun ( ) {
console. log ( "fun" )
$. ajax ( {
url : "ajaxServlet " ,
type : "post" ,
data : {
"username" : "jack" ,
"age" : 18 ,
} ,
success : function ( data ) {
console. log ( data)
} ,
error : function ( ) {
alert ( "出错啦" )
} ,
dataType : "text" ,
} )
}
</ script>
< body>
< input type = " button" value = " 发送异步请求" onclick = " fun ( ) " >
< input type = " text" >
</ body>
</ html>
$.get()
语法 $.get(url,[data],[callback],[type]) 属性 说明 url 请求路径 data 请求参数 callback 回调函数 type 响应结果的类型
$.post()
语法 $.post(url,[data],[callback],[type]) 属性 说明 url 请求路径 data 请求参数 callback 回调函数 type 响应结果的类型
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 将来的我比现在好,这一点我已经有了把握</ title>
</ head>
< script src = " lib/jquery.min.js" > </ script>
< script type = " text/javascript" >
function fun ( ) {
console. log ( "fun" )
$. post ( "ajaxServlet" , { username : "rose" } , function ( data ) {
console. log ( data)
} , "text" )
}
</ script>
< body>
< input type = " button" value = " 发送异步请求" onclick = " fun ( ) " >
< input type = " text" >
</ body>
</ html>
JSON
概念:JavaScript Object Notation JavaScript对象表示法 json多用于存储和交换文本信息的语法 JSON 比 XML 更小、更快、更易解析
语法
语法 基本规则 数据在名称/值对中 json数据是由键值对构成的 |值得取值类型: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或false) 数组(在方括号中){“persons”:[{},{}]} 对象(在花括号中){“address”:{“province”:“南京”…}} null 数据由逗号分隔 多个键值对由逗号分隔 花括号保存对象 使用{}定义json格式 方括号保存数组 []
获取数据: json对象.键名 json对象[“键名”] 数组对象[索引] 遍历:
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< script src = " lib/jquery.min.js" > </ script>
< script type = " text/javascript" >
var person = { "name" : "张三" , "age" : 23 , 'gender' : true }
console. log ( person)
var name = person. name
var age = person[ "age" ]
console. log ( name)
console. log ( age)
var person1 = { "person1" : [
{ "name" : "张三" , "age" : 18 , 'gender' : true } ,
{ "name" : "李四" , "age" : 19 , 'gender' : false } ,
{ "name" : "王五" , "age" : 20 , 'gender' : true }
]
}
console. log ( person1)
let name1 = person1. person1[ 2 ] . name;
console. log ( name1)
var ps = [
{ "name" : "张三" , "age" : 18 , 'gender' : true } ,
{ "name" : "李四" , "age" : 19 , 'gender' : false } ,
{ "name" : "王五" , "age" : 20 , 'gender' : true }
]
console. log ( ps[ 1 ] . gender)
</ script>
< body>
</ body>
</ html>
遍历
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< script src = " lib/jquery.min.js" > </ script>
< script type = " text/javascript" >
var person = { "name" : "张三" , "age" : 18 , 'gender' : true }
var ps = [
{ "name" : "张三" , "age" : 18 , 'gender' : true } ,
{ "name" : "李四" , "age" : 19 , 'gender' : false } ,
{ "name" : "王五" , "age" : 20 , 'gender' : true }
]
for ( var key in person) {
console. log ( key+ ":" + person[ key] )
}
for ( let i = 0 ; i < ps. length; i++ ) {
var p = ps[ i]
for ( const pKey in p) {
console. log ( pKey+ ":" + p[ pKey] )
}
}
</ script>
< body>
</ body>
</ html>
JSON数据和JAVA对象的相互转换
JSON解析器
常见的解析器
Jsonlib Gson fastjson jackson
JAVA对象转换JSON
使用步骤
导入jackson的相关jar包 创建Jackson核心对象 ObjectMapper 调用ObjectMapper的相关方法进行转换
转换方法
创建Jackson的核心对象 ObjectMapper mapper = new ObjectMapper(); writerValue(参数1,obj) File 将obj对象转换为json字符串,并保存到指定的文件中 Writer 将obj对象转换为JSON字符串,并将json数据填充到字符输入流中 OutputStream obj对象转换为JSON字符串,并将json数据填充到字节输入流中 实例: mapper.writeValue(new FileWriter(“.txt”),obj);
package com. ytzl. doman ;
import com. fasterxml. jackson. core. JsonProcessingException ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. junit. Test ;
import java. io. File ;
import java. io. FileWriter ;
import java. io. IOException ;
public class JacksonTest {
@Test
public void test1 ( ) throws IOException {
Person p = new Person ( ) ;
p. setName ( "杨柯新" ) ;
p. setAge ( 18 ) ;
p. setGender ( "男" ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
String json = mapper. writeValueAsString ( p) ;
System . out. println ( json) ;
mapper. writeValue ( new FileWriter ( "C:\\Users\\Administrator\\Desktop\\json.txt" ) , p) ;
}
}
注解
注解 说明 @JsonIgnore 排除属性 @JsonFormat 属性值的格式化 @JsonFormat(pattern = “yyyy-MM-dd”)
package com. ytzl. doman ;
import com. fasterxml. jackson. core. JsonProcessingException ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. junit. Test ;
import java. util. * ;
public class JacksonTest2 {
@Test
public void test1 ( ) throws JsonProcessingException {
Person p = new Person ( ) ;
p. setName ( "杨柯新" ) ;
p. setAge ( 18 ) ;
p. setGender ( "男" ) ;
p. setBirthday ( new Date ( ) ) ;
Person p1 = new Person ( ) ;
p1. setName ( "杨柯新" ) ;
p1. setAge ( 18 ) ;
p1. setGender ( "男" ) ;
p1. setBirthday ( new Date ( ) ) ;
Person p2 = new Person ( ) ;
p2. setName ( "杨柯新" ) ;
p2. setAge ( 18 ) ;
p2. setGender ( "男" ) ;
p2. setBirthday ( new Date ( ) ) ;
Person p3 = new Person ( ) ;
p3. setName ( "杨柯新" ) ;
p3. setAge ( 18 ) ;
p3. setGender ( "男" ) ;
p3. setBirthday ( new Date ( ) ) ;
List < Person > people = new ArrayList < > ( ) ;
people. add ( p) ;
people. add ( p1) ;
people. add ( p2) ;
people. add ( p3) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
String json = mapper. writeValueAsString ( people) ;
System . out. println ( json) ;
}
@Test
public void test2 ( ) throws JsonProcessingException {
Map < String , Object > map = new HashMap < > ( ) ;
map. put ( "name" , "张三" ) ;
map. put ( "age" , "18" ) ;
map. put ( "gender" , "男" ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
String json = mapper. writeValueAsString ( map) ;
System . out. println ( json) ;
}
}
JSON转为JAVA对象
导入jackson的相关jar包 创建Jackson核心对象 ObjectMapper 调用ObjectMapper的相关方法进行转换
readValue(json字符串数据,Class)
package com. ytzl. doman ;
import com. fasterxml. jackson. core. JsonProcessingException ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import org. junit. Test ;
import java. io. IOException ;
import java. util. * ;
public class JacksonTest3 {
@Test
public void test1 ( ) throws IOException {
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":18}" ;
ObjectMapper mapper = new ObjectMapper ( ) ;
Person person = mapper. readValue ( json, Person . class ) ;
System . out. println ( person) ;
}
}