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

相关推荐
Lhappy嘻嘻2 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
科技道人3 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
伊玛目的门徒3 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
逝水无殇5 小时前
C# 异常处理详解
开发语言·后端·c#
懒鸟一枚6 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
玖玥拾6 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾7 小时前
Rust 学习目录
开发语言·学习·rust
我命由我123457 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑7 小时前
Sentinel安装
java·后端·微服务
云泽8087 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范