Javaweb(Filter、Listener、AJAX、JSON)

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异步框架

(1)Axios快速入门

  1. 引入 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&quot;
}).then(function (resp)
alert(resp.data);
});
java 复制代码
axios({
method:"post"
url:"http://localhost:8080/ajax-demo1/aJAXDemo1&quot;,
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>
  1. Java对象转JSON
java 复制代码
String jsonStr = JSON.toJSONString(obj);
  1. JSON字符串转Java对象
java 复制代码
User user = JSON.parseObject(jsonStr, User.class);

相关推荐
Refrain_zc17 分钟前
Android 音视频通话核心 —— 音频编码(AAC)完整解析
java
xiaoshuaishuai827 分钟前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
Xin_ye1008627 分钟前
C# 零基础到精通教程 - 第十八章:部署与发布——让应用上线
开发语言·c#
我是唐青枫1 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·数据库·spring
思麟呀1 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows
Lumbrologist1 小时前
【C++】零基础入门 · 第 13 节:类与对象基础
java·c++·算法
码不停蹄的玄黓1 小时前
Java 生产者-消费者模型详解
java·开发语言·python
爱讲故事的1 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
笨蛋不要掉眼泪1 小时前
Java并发编程:Executors框架类深度解析
java·开发语言·并发
南极企鹅2 小时前
深入理解 MVCC:数据库并发控制的基石
java·数据库·mysql