Ajax
简介
Asynchronous JavaScript And XML,直译为,异步的JS和XML。
- AJAX也可以简单的理解为通过JS向服务器发送异步请求。
- 不发生页面跳转、异步载入内容并改写页面内容的技术。
异步请求&同步请求
同步处理问题;
- 请求:发送二次请求时,只能等上次请求响应后,才能执行
- 效率:就算我们需要刷新局部,也必须刷新整个页面
异步解决问题
- 请求:aJax请求不会影响其他请求
- 效率:局部刷新
使用
js->ajax(基本不怎么使用了)
jQuery->ajax(常用)
语法
$.ajax({
type: "请求方式:get|post",
url: "请求路径",
data: "参数",
dataType:预期服务器返回的数据类型,如:xml|json|text
success:fn(回调函数:请求成功时回调),
error:fn(回调函数:请求失败时回调)
});
Ajax简写
$.post(url, [data], [callback], [dataType])
$.get(url, [data], [callback], [dataType])
$.getJSON(url,[data],[callback]);
$(function(){
$("#btn").click(function(){
$.post("AjaxDemo","name=John&location=Boston",function(){
alert( "Data Saved: " );
});
$.ajax({
type: "POST",
url: "AjaxDemo",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
});
$("#btnGet").click(function(){
//var json = {key:value,key2:value2,key3:value3}
$.getJSON("AjaxDemo",{"name":"zhangsan","age":18},function(msg){
alert("msg:"+msg.name);
});
// $.get("AjaxDemo",{"name":"zhangsan","age":18},function(msg){
// alert("msg:"+msg.name);
// },"json");
// $.ajax({
// type:"get",
// url:"AjaxDemo",
// data:{"name":"zhangsan","age":18},
// dataType:"json",
// success:function(msg){
// alert("msg:"+msg.name);
// },
// error:function(){
// alert("error!!!");
// }
// });
});
});
JSON
简介:
JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式。
JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
使用
Gson gson = new Gson()
常用方法
- String toJson(Object o)
- fromJson(String jsonStr,Class)
- fromJson(String jsonStr,Type)
- Type获取方式
- new TypeToken<List>() {}.getType()
- Type获取方式
@Test
public void testJsonStrObject() {
Gson gson = new Gson();
Student stu = new Student("zs", 18);
//student->jsonString
String jsonStr = gson.toJson(stu);//{"name":"zs","age":18}
System.out.println(jsonStr);
//jsonString->student
Student student = gson.fromJson(jsonStr, Student.class);
System.out.println(student);
}
@Test
public void testJsonStrList() {
List<Student> stuList = new ArrayList<>();
stuList.add(new Student("zs", 18));
stuList.add(new Student("lisi", 19));
//stuList->jsonString
Gson gson = new Gson();
String jsonStr = gson.toJson(stuList);//[{"name":"zs","age":18},{"name":"zs","age":18}]
System.out.println(jsonStr);
//jsonString->List<Student>
// List<Student> list = gson.fromJson(jsonStr, List.class);
// System.out.println(list.get(0));
//使用typeToken
List<Student> list = gson.fromJson(jsonStr, new TypeToken<List<Student>>() {}.getType());
System.out.println(list.get(0).getName());
}
@Test
public void testJsonStrMap() {
Map<String,Student> map = new HashMap<>();
map.put("zs", new Student("zs", 18));
map.put("ls", new Student("ls", 20));
//map -> jsonString
Gson gson = new Gson();
String jsonString = gson.toJson(map);//{{"zs":{"name":"zs"},"age":18},{"ls":{"name":"ls"}}
System.out.println(jsonString);
//jsonString-> map
Map<String,Student> mapStu = gson.fromJson(jsonString, new TypeToken<Map<String,Student>>(){}.getType());
System.out.println(mapStu.get("zs").getAge());
}
文件的上传和下载
文件上传&下载
文件上传
准备:
- 导入commons-fileupload-1.3.1.jar和commons-io-2.5.jar两个jar文件
- form属性 method=“post”
- enctype=“multipart/form-data”
- <input type=“file” name=“fileupload”>
- 步骤如下
- 创建工厂类:DiskFileItemFactory
- 创建解析器ServletFileUpload
- 使用解析器中parseRequest(request)方法,将request对象解析为List
- 迭代集合,找到文件类型为File的FileItem
- 使用FileItem中的write()方法,写到服务器。
优化文件上传
-
使用UUID优化同名无法上传问题
- String uuid = UUID.randomUUID().toString().replace("-", “”);
-
设置上传文件的大小
- 设置单个文件的上传大小:upload.setFileSizeMax(2*1024);
- 设置总文件的上传大小:upload.setSizeMax(2*1024);
文件下载
准备:
- 超链接<a href="资源路径>资源
- 下载Servlet
-
获取下载资源
- 获取下载资源的名字
- 通过名字获取资源真实路径
-
文件下载设置项
- 设置浏览器响应体文件类型
- 解决文件名中文乱码问题
- 设置浏览器响应体内容格式,为附件格式。(告诉浏览器别播放,下载)
-
读取目标资源,同时写到客户端(下载)