Ajax的使用

AJAX

概念(Asynchronous JavaScript And XML):AJAX:异步的JavaScript和xml

  • 作用:与服务器进行数据交换:通过ajax可以给服务器发送请求,并获取服务器响应的数据
  • 好处:提高用户体验(用户的操作是连续的,没有被打断)
  • 异步请求:发送请求后,无需等待服务器响应完成,就可以继续操作,并局部刷新网页。
  • 同步与异步的区别:同步需要等待,异步不需要等待

0. ajax开发快速入门

  1. 编写AjaxServlet,并使用response输出字符串

     response.getWriter().print("true");//响应结果
    
  2. 创建 XMLHttpRequest 对象:用于和服务器交换数据

    var xmlhttp;
    if (window.XMLHttpRequest) {
    	// code for IE7+, Firefox, Chrome, Opera, Safari
    	xmlhttp = new XMLHttpRequest();
    } else {
    	// code for IE6, IE5
    	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
  3. 向服务器发送请求

    xmlhttp.open("GET",“url");
    xmlhttp.send();//发送请求
    
  4. 获取服务器响应数据

    xmlhttp.onreadystatechange = function () {
    	if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
    		alert(xmlhttp.responseText);
    	}
    }
    

异步请求的好处?

  • 大大提高用户体验, 不打断用户的操作,页面悄悄发送请求,局部更新,页面响应更快!

Ajax开发分哪2个部分

  • 后台

    获取参数,request.getReader(); request.getParameter(“”)

    封装参数, JSON.parseObject()

    调用service,执行方法,

    响应结果,json字符串

  • 前台

    1. 何时发送异步请求?事件绑定

      页面加载完成

    2. 如何发?

      1. 创建核心的异步对象

      2. 发送异步请求

      3. 获取服务器响应数据

异步请求的调试

  1. 判断是前台问题,还是后台的问题?

    • F12 看请求是否发送成功,参数是否正确?看响应数据是否正确

    • 如果响应数据ok,就是前台问题(回调函数的问题,js,debug)?

    • 如果是响应数据有问题,就是后台问题?(debug,Servlet)

1. Axios 异步框架

  • Axios 对原生的AJAX进行封装,简化书写
  1. 引入 axios 的 js 文件
<script src="js/axios-0.18.0.js"></script>
  1. 使用axios 发送请求,并获取响应结果
axios({
	method:"get",
	url:"http://localhost:8080/ajax-demo1/ajaxServlet2?username=zhangsan"
}).then(function (resp){
	alert(resp.data);
})
axios({
	method:"post",
    url:"http://localhost:8080/ajax-demo1/ajaxServlet2",
    data:"username=zhangsan"
}).then(function (resp){
    alert(resp.data);
});
  • Axios 请求方式别名(简化)
  1. 发送get请求

    axios.get("url").then(function (resp){
    	alert(resp.data);
    });
    
  2. 发送 post请求

    axios.post("url","参数").then(function (resp){
    	alert(resp.data);
    });
    

2. JSON

概念:JavaScript Object Notation。JavaScript 对象表示法

由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输

2.1 JSON 基础语法

  1. 定义js对象
var obj = {name:"zhangsan",age:18};
alert(obj);
  1. 定义JSON字符串
var jsonStr = '{"name":"zhangsan","age":18}';
alert(jsonStr);
  1. 将JSON字符串转为JS对象
let jsonObj = JSON.parse(jsonStr);
alert(jsonObj);
  1. 将JS对象转换JSON字符串
let s = JSON.stringify(jsonObj);
alert(s);
  1. 定义JS对象,axios可以自动将js对象转换成json发送给服务器,只能通过POST请求传递json数据,json数据只能在请求体中传输
let args = {username:"zhangsan"};
axios.post("/day12-filter-ajax/ajaxServlet2",args);

2.2 JSON 数据和Java对象转换

Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库

  • 请求数据:JSON字符串转为Java对象
  • 响应数据:Java对象转为JSON字符串
  1. 导入坐标
<!--fastjson-->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.62</version>
</dependency>
  1. Java对象转JSON
String jsonStr = JSON.toJSONString(user)
//{"id":1,"password":"123","username":"张三"}
  1. JSON字符串转Java对象
User user = JSON.parseObject(jsonStr, User.class);

3. 执行流程

查询所有

  • web层——>响应 brand.html

    • SelectAllServlet
      1. 调用service查询
      2. 将List集合转为JSON
      3. 响应JSON数据
  • 页面brand.html——>请求web层

    1.页面加载完成后发送异步请求,获取列表数据

    2.遍历集合数据,展示表格

逻辑视图

 /*
逻辑视图
 */
 public String getStatusStr() {
     if (this.status == null || this.status == 0) {
         return "禁用";
     }
     return "启用";
 }

Filter过滤器

  • 概念:Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。

  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

  • 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等…

  • Filter快速入门

  1. 定义类,实现 Filter接口,并重写其所有方法
public class FilterDemo1 implements Filter {
	public void init(FilterConfig filterConfig)
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
	public void destroy(){}
}
  1. 配置Filter拦截资源的路径:在类上定义 @WebFilter 注解
@WebFilter("/*")
public class FilterDemo1 implements Filter {
  1. 在doFilter方法中输出一句话,并放行
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain){
	System.out.println("Filter执行。。。放行前");
	//放行
	chain.doFilter(request, response);
}
  • 执行流程

执行放行前逻辑===>放行===> 访问资源===>执行放行后逻辑

  • Filter使用细节

Filter 拦截路径配置

  • Filter 可以根据需求,配置不同的拦截资源路径

    @WebFilter("/*")
    public class FilterDemo		
    
    • 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截。
    • 目录拦截:/user/*:访问/user下的所有资源,都会被拦截
    • 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
    • 拦截所有:/*:访问所有资源,都会被拦截
  • 过滤器链

    • 一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链
    • 注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.han、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值