1.Filter的概述&快速入门&执行流程
(1)Filter
- 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
- 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
- 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等

(2)Filter快速入门
1.定义类,实现Filter接口,并重写其所有方法
java
public class FilterDemo implements Filter {
public void init(FilterConfig filterConfig)
public void doFilter(ServletRequest request
public void destroy()
}
2.配置Filter拦截资源的路径:在类上定义@WebFilter注解
java
@WebFilter("/*")
public class FilterDemo implements Filter {
3.在doFilter方法中输出一句话,并放行
java
public void doFilter(ServletRequest request, Ser
System.out.println("filter被执行了..");
//放行
chain.doFilter(request,response);
}
(3)Filter执行流程

1.放行后访问对应资源,资源访问完成后,还会回到Filter中吗?会
2.如果回到Filter中,是重头执行还是执行放行后的逻辑呢?放行后逻辑
执行放行前逻辑-->放行-->访问资源-->执行放行后逻辑



2.Filter使用细节(Filter拦截路径配置&过滤器链)
(1)Filter拦截路径配置
- Filter可以根据需求,配置不同的拦截资源路径
java
@WebFilter("/*)
public class FilterDemo
拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*:访问所有资源,都会被拦截
(2)过滤器链
- 一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

- 注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序
3.Listener
- 概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
- 监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件
- Listener分类:JavaWeb中提供了8个监听器
| 监听器分类 | 监听器名称 | 作用 |
|---|---|---|
| ServletContext监听 | ServletContextListener | 用于对ServletContext对象进行监听(创建、销毁) |
| ServletContextAttributeListener | 对ServletContext对象中属性的监听(增删改属性) | |
| Session监听 | HttpSessionListener | 对Session对象的整体状态的监听(创建、销毁) |
| HttpSessionAttributeListener | 对Session对象中的属性监听(增删改属性) | |
| HttpSessionBindingListener | 监听对象于Session的绑定和解除 | |
| HttpSessionActivationListener | 对Session数据的钝化和活化的监听 | |
| Request监听 | ServletRequestListener | 对Request对象进行监听(创建、销毁) |
| ServletRequestAttributeListener | 对Request对象中属性的监听(增删改属性) |
ServletContextListener 使用
1.定义类,实现ServletContextListener接口
java
public class ContextLoaderListener implements ServletContextListener {
/**
*ServletContext对象被创建:整个web应用发布成功
* @paramsce
*/
public void contextInitialized(ServletContextEvent sce) {}
/**
*ServletContext对象被销毁:整个web应用卸载
* @param
sce
*/
public void contextDestroyed(ServletContextEvent sce) {}
2.在类上添加@WebListener注解

4.AJAX
(1)概述
- 概念:AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML
- AJAX作用:
1.与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
使用了AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了
2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等...

同步和异步

(2)AJAX快速入门
1.编写AjaxServlet,并使用response输出字符串
2.创建XMLHttpRequest对象:用于和服务器交换数据
java
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.向服务器发送请求
java
xmlhttp.open("GET","url");
xmlhttp.send();//发送请求
4.获取服务器响应数据
java
xmlhttp.onreadystatechange = function ({
if (xmlhttp.readyState ==4&& xmlhttp.status == 200)
alert(xmlhttp.response Text);}}
5.Axios异步框架
- Axios对原生的AJAX进行封装,简化书写
- 官网:https://www.axios-http.cn
(1)Axios快速入门
- 引入 axios 的 js文件
java
<script src="js/axios-0.18.0.js"></script>
2.使用axios发送请求,并获取响应结果
java
axios({
method:"get",
url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
}).then(function (resp)
alert(resp.data);
});
java
axios({
method:"post"
url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
data:"username=zhangsan"
}).then(function (resp)
alert(resp.data);
});
(2)Axios请求方式别名
- 为了方便起见,Axios已经为所有支持的请求方法提供了别名。
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url, config])
axios.options(url[, config])
axios.post(url[, data], config]])
axios.put(url[, data], config]])
axios.patch(url[, data[, config]])

- 发送get请求
java
axios.get("url")
.then(function (resp)
alert(resp.data);
});
- 发送post请求
java
axios.post("url","参数")
.then(function (resp)
alert(resp.data);
});
6.JSON
(1)JSON概念和基础语法
- 概念:JavaScript Object Notation。JavaScript 对象表示法
- 由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输


JSON基础语法
- 定义:
java
var 变量名 ={"key1": value1,
"key2": value2,
....
};
value的数据类型为:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true或 false)
数组(在方括号中)
对象(在花括号中)
null
示例:
java
var json = ("name": "zhangsan",
"age": 23,
"addr": ["北京", "上海", "西安"]
};
- 获取数据:
变量名.key
java
json.name

(2)JSON数据和Java对象转换
- 请求数据:JSON字符串转为Java对象
- 响应数据:Java对象转为JSON字符串

Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。
使用:
1.导入坐标
java
<dependency>
<groupld>com.alibaba</groupld>
<artifactld>fastjson</artifactld>
<version>1.2.62</version>
</dependency>
- Java对象转JSON
java
String jsonStr = JSON.toJSONString(obj);
- JSON字符串转Java对象
java
User user = JSON.parseObject(jsonStr, User.class);



