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);

相关推荐
盛世宏博北京2 小时前
以太网温湿度传感器运维技巧,提升设备稳定性与使用寿命
开发语言·php·以太网温湿度传感器
朝新_2 小时前
【Spring AI 】核心知识体系梳理:从入门到实战
java·人工智能·spring
一 乐2 小时前
旅游|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
java·vue.js·spring boot·论文·旅游·毕设·旅游信息推荐系统
代码改善世界2 小时前
【MATLAB初阶】矩阵操作(一)
开发语言·matlab·矩阵
覆东流2 小时前
第1天:Python环境搭建 & 第一个程序
开发语言·后端·python
我命由我123453 小时前
Android 开发中,关于 Gradle 的 distributionUrl 的一些问题
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
橙露3 小时前
SpringBoot 全局异常处理:优雅封装统一返回格式
java·spring boot·后端
awei09163 小时前
MinIO配置自定义crossdomain.xml跨域策略(Nginx反向代理实现)
xml·java·nginx
谁怕平生太急3 小时前
面试题记录:在线数据迁移
java·数据库·spring