文章目录
01-AJAX概述(掌握)
- 概述
- AJAX即“Asynchronous Javascript And XML” :异步的JavaScript和XML。
- 作用
- ①可以发起异步请求
- ②可以局部刷新页面
- 可以局部更新页面内容
- ①可以发起异步请求
02-XMLHttpRequest对象详细介绍(了解)
- 常用属性
- onreadystatechange
- 用于设置监听异步对象的状态改变
- status
- 用于获取服务器响应状态码(200、404、500…)
- readyState : 用于获取异步对象状态
- 0 : 异步对象未初始化
- 1 : 异步对象开始发送请求
- 2 : 异步对象发送请求完成
- 3 : 异步对象开始读取响应
- 4 : 异步对象读取响应完成
- responseText :用于获取响应正文
- onreadystatechange
- 常用方法
- open(请求方式,url,flag)
- 请求方式:get/post
- url : 请求路径
- flag : true=异步请求,false=同步请求
- send() : 发送数据
- 请求方式=get,请求参数在url后面
- 请求方式=post,请求参数在send方法中
- setRequestHeader() : 设置请求头
- open(请求方式,url,flag)
03-AJAX入门案例(了解)
-
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>03-AJAX入门案例</title> </head> <body> <button onclick="fn1()">AJAX</button> </body> <script> function fn1() { //①创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); //②监听XMLHttpRequest对象状态改变 xhr.onreadystatechange = function () { if (xhr.status == 200 && xhr.readyState == 4) { //异步请求成功 var responseText = xhr.responseText; console.log(responseText); } } //③打开连接 xhr.open("get","/day12/demo01?username=root&password=root",true); //④发送参数 xhr.send(); } </script> </html>
/** * 03-AJAX入门案例 */ @WebServlet("/demo01") public class Demo01Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); System.out.println("username = " + username); String password = req.getParameter("password"); System.out.println("password = " + password); resp.setContentType("text/html;charset=utf-8"); resp.getWriter().write("你好世界"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
04-axios概述(掌握)
- 概述
- 使用原生的JavaScript程序执行Ajax极其繁琐,所以一定要使用框架来完成。而Axios就是目前最流行 的前端Ajax框架。
- 官网
05-axios发送普通参数(掌握)
-
概述
- 请求参数在url后面,以键值对的形式。
-
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>05-axios发送普通参数</title> </head> <body> <button onclick="fn1()">axios发送普通参数</button> </body> <script src="/day12/js/axios.js"></script> <script> function fn1() { axios({ url: "/day12/demo02", method: "get", params: { username: "root", password: "root" }, responseType: 'json', }).then(function (res) { console.log(res); //json字符串 -> js对象 var jsObj = res.data; console.log(jsObj.msg); }) } </script> </html>
@WebServlet("/demo02") public class Demo02Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); System.out.println("username = " + username); String password = req.getParameter("password"); System.out.println("password = " + password); resp.setContentType("application/json;charset=utf-8"); ResultVO resultVO = new ResultVO(true,"操作成功!",null); String jsonStr = JsonUtils.javaBean2JsonStr(resultVO); resp.getWriter().write(jsonStr); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
06-axios发送请求体json(掌握)
-
概述
- 发送请求正文,数据类型是json。
-
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>06-axios发送请求体json</title> </head> <body> <button onclick="fn1()">axios发送请求体json</button> </body> <script src="/day12/js/axios.js"></script> <script> function fn1() { axios({ url: "/day12/demo03", method: "post", data: { username: "root", password: "root" }, responseType: 'json', }).then(function (res) { console.log(res); //json字符串 -> js对象 var jsObj = res.data; console.log(jsObj.msg); }) } </script> </html>
/** * 06-axios发送请求体json */ @WebServlet("/demo03") public class Demo03Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //①获取请求正文中的json字符串 BufferedReader bufferedReader = req.getReader(); String content = null; StringBuilder sb = new StringBuilder(); while ((content = bufferedReader.readLine()) != null) { sb.append(content); } String inputJsonStr = sb.toString(); System.out.println("inputJsonStr = " + inputJsonStr); //②将json字符串转换为javabean对象 Map map = JsonUtils.jsonStr2JavaBean(inputJsonStr, Map.class); String username = (String) map.get("username"); System.out.println("username = " + username); String password = (String) map.get("password"); System.out.println("password = " + password); //①将javabean对象转换为json字符串 resp.setContentType("application/json;charset=utf-8"); ResultVO resultVO = new ResultVO(true, "操作成功!", null); String jsonStr = JsonUtils.javaBean2JsonStr(resultVO); //②将json字符串作为响应正文返回给浏览器 resp.getWriter().write(jsonStr); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
07-JsonUtils工具类优化(掌握)
-
JsonUtils
- ①将json字符串转换为javabean对象
- ②将javabean对象转换为json字符串
- ③获取请求正文中的json字符串,将json字符串转换为javabean对象
- ④将javabean对象转换为json字符串,将json字符串作为响应正文
-
代码实现
public class JsonUtils { /** * 将javabean对象转换为json字符串 * * @param obj * @param <T> * @return */ public static <T> String javaBean2JsonStr(T obj) { try { return new ObjectMapper().writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } /** * 将json字符串转换为javabean对象 * * @param jsonStr * @param clazz * @param <T> * @return */ public static <T> T jsonStr2JavaBean(String jsonStr, Class<T> clazz) { try { return new ObjectMapper().readValue(jsonStr, clazz); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 获取请求正文中的json字符串,将json字符串转换为javabean对象 * @param request * @param clazz * @param <T> * @return */ public static <T> T request2JavaBean(HttpServletRequest request, Class<T> clazz) { try { //①获取请求正文中的json字符串 BufferedReader bufferedReader = request.getReader(); String content = null; StringBuilder sb = new StringBuilder(); while ((content = bufferedReader.readLine()) != null) { sb.append(content); } String inputJsonStr = sb.toString(); System.out.println("inputJsonStr = " + inputJsonStr); //②将json字符串转换为javabean对象 T t = JsonUtils.jsonStr2JavaBean(inputJsonStr, clazz); return t; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 将javabean对象转换为json字符串,将json字符串作为响应正文 * @param t * @param response * @param <T> */ public static<T> void javaBean2ResponseText(HttpServletResponse response ,T t ){ try { response.setContentType("application/json;charset=utf-8"); //①将javabean对象转换为json字符串 String jsonStr = JsonUtils.javaBean2JsonStr(t); //②将json字符串作为响应正文 response.getWriter().write(jsonStr); } catch (IOException e) { e.printStackTrace(); } } }
@WebServlet("/demo04") public class Demo04Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Map map = JsonUtils.request2JavaBean(req, Map.class); String username = (String) map.get("username"); System.out.println("username = " + username); String password = (String) map.get("password"); System.out.println("password = " + password); ResultVO resultVO = new ResultVO(true, "操作成功!", null); JsonUtils.javaBean2ResponseText(resp, resultVO); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
08-axios练习(掌握)
-
需求
-
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>08-axios练习</title> </head> <body> <div id="app"> 员工编号:<input type="text" v-model="userId"><br> <button @click="selectUser()">查询</button> <br> 结果如下:<br> <div v-if="isDisplay"> 编号:<span v-text="user.userId"></span><br> 姓名:<span v-text="user.userName"></span><br> 年龄:<span v-text="user.age"></span><br> </div> <div v-if="!isDisplay"> 没有找到! </div> </div> </body> <script src="/day12/js/axios.js"></script> <script src="/day12/js/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { userId: 1, isDisplay:true, user: { userId: 1, userName: "", age: 0 } }, methods: { selectUser() { console.log("selectUser"); var _this = this; axios({ url: "/day12/demo05", method: "get", params: { userId: this.userId } }).then(function (res) { console.log(res); var jsObj = res.data; if (jsObj.flag) { _this.isDisplay = true; _this.user = jsObj.data; } else { _this.isDisplay = false; } }) } } }) </script> </html>
@WebServlet("/demo05") public class Demo05Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userId = req.getParameter("userId"); User user = null; if (userId.equals("1")) { //小邱 user = new User(1, "小邱", 18); } else if (userId.equals("2")) { //中邱 user = new User(2, "中邱", 28); } else if (userId.equals("3")) { //老邱 user = new User(3, "老邱", 38); } ResultVO<User> resultVO = null; if (user == null) { resultVO = new ResultVO<>(false, "查询失败!", user); } else { resultVO = new ResultVO<>(true, "查询成功!", user); } JsonUtils.javaBean2ResponseText(resp, resultVO); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
09-服务器渲染和浏览器渲染(掌握)
- 服务器渲染
- thymeleaf是服务器渲染
- 服务器渲染要求服务器返回给浏览器的是页面文件
- 浏览器渲染
- vue是浏览器渲染
- 浏览器渲染要求服务器返回给浏览器的是json字符串 32W EEW3223WE3223322222222222222222
- vue是浏览器渲染