Filter、Listener、AJAX、Vue、Element

news2024/11/28 14:57:44

 Filter

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

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

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

快速入门

  1. 定义类,实现Filter接口, 并重写其所有方法
  2. 配置Filter拦截资源的路径:在类上定义@WebFilter注解
  3. 在doFilter方法中输出一句话,并放行
WebFilter("/*") // "/*"表示拦截所有资源路径
ublic class StudyFilter implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
       
   }
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       System.out.println("file");
       System.out.println("file");
       //放行(放行前一般会对request进行处理)
       filterChain.doFilter(servletRequest,servletResponse);
       //放行后一般会对response数据进行处理
   }
   @Override
   public void destroy() {
   }

执行流程

        放行后访问对应资源,资源访问完成后,还会回到Filter中继续执行放行后的逻辑 

 

使用细节

拦截路径配置

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

拦截具体的资源:/index.jsp  只有访问index.jsp时才会被拦截。

目录拦截:/user:/*  访问/user下的所有资源,都会被拦截

后缀名拦截:*.jsp  访问后缀名为jsp的资源,都会被拦截

拦截所有:/*  访问所有资源,都会被拦截

过滤器链

        一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

        注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序


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接口
  2. 在类上添加@WebListener注解
@WebListener
public class StudyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //加载资源
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        //释放资源
    }
}


AJAX

概述 

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

AJAX作用: 

        1.与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据(使用了AJAX和服务器进行通信,就可以使用HTML+ AJAX来替换JSP页面了 )

         2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等...

*同步和异步

快速入门

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

public class StudyAjax extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //相应数据
        resp.getWriter().write("hello");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

2.创建XMLHttpRequest对象:用于和服务器交换数据

var xhttp;
if (window.XMLHttpRequest){
    //新版浏览器
    xhttp = new XMLHttpRequest();
}else {
    //旧版浏览器
    xhttp = new ActiveXObject("Microsoft.XMLHTTP")
}

3.向服务器发送请求

方法描述
open(methodurlasync)

规定请求的类型

        method:请求的类型:GET 还是 POST

        url:服务器(文件)位置

        async:true(异步)或 false(同步),默认为true

send()向服务器发送请求(用于 GET)
send(string)向服务器发送请求(用于 POST)
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();

4.获取服务器响应数据

xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        alert(this.responseText);
    }
};
属性描述
onreadystatechange定义了当 readyState 属性发生改变时所调用的函数。
readyState

保存了 XMLHttpRequest 的状态。

        0: 请求未初始化

        1: 服务器连接已建立

        2: 请求已接收

        3: 正在处理请求

        4: 请求已完成且响应已就绪

status

200: "OK"

403: "Forbidden"

404: "Page not found"

statusText返回状态文本(例如 "OK" 或 "Not Found")

Axios异步框架

        Axios对原生的AJAX进行封装,简化书写

        官网:https://www.axios-http.cn

快速入门

        1.引入axios的js文件

<script src="js/axios-0.18.0.js"></script> //该标签不可写代码,代码要写到其它标签里

        2.使用axios发送请求,并获取响应结果

//get请求方式
axios({
    method:"get",
    url:"http://localhost:8080/studyServlet/Ajax?username=glaty"
})then(function (resp) {
    alert(resp.data);
})

//post请求方式
axios({
    method:"get",
    url:"http://localhost:8080/studyServlet/Ajax",
    data:"username=glaty"
})then(function (resp) {
    alert(resp.data);
})

Axios请求方式别名

        为了方便起见,Axios 已经为所有支持的请求方法提供了别名。

方法名作用
get(url)发起GET方式请求
post(url,请求参数)发起POST方式请求

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

//发送post请求
axios.post("url","参数")
    .then(function (resp){
        alert(resp.data);
});

JSON

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

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

基础语法

        value的数据类型为:

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或false)

数组(在方括号中)

对象(在花括号中)

null

        定义:

var变量名= {"key1": value1,

                    "key2": value2,

                    ...

                    };

var json = {
    "name": "zhangsan",
    "age": 23,
    "addr": ["北京","上海", "西安"]
};

        获取数据:

变量名key

json.name

JSON数据和Java对象转换

        请求数据:JSON字符串转为Java对象

        响应数据:Java对象转为JSON字符串

        Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。

使用:

        1.导入坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

        2.Java对象转JSON

Thing thing = new Thing();
thing.setId(132);
thing.setName("name");

String jsonString = JSON.toJSONString(thing);

        3.JSON字符串转Java对象

Thing thing1 = JSON.parseObject("{\"id\":132,\"name\":\"name\"}", Thing.class);

 


Vue

        Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写

        基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上

        官网:https://cn.vuejs.org

 

快速入门

        新建HTML页面,引入Vue.js文件

  <script src="js/vue.js"></script> //该标签不可写代码,代码要写到其它标签里

        在JS代码区域,创建Vue核心对象,进行数据绑定

new Vue({
  el:"#app",
  data(){
    return{
      username:""
    }
  }
})

        编写视图

<div id="app">
  <input name="username" v-model="username">
  {{username}}
</div>

 

常用指令

        指令:HTML标签上带有V- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for...

指令作用
v-bind为HTML标签绑定属性值,如设置href,css样式等
v-model在表单元素上创建双向数据绑定
v-on 为HTML标签绑定事件
v-if条件性的渲染某元素,判定为true时渲染,否则不渲染。与v-shou渲染不一样,但效果一样
v-else
v-else-if
v-show根据条件展示某元素,区别在于切换的是display属性的值
v-for列表渲染,遍历容器的元素或者对象的属性
<div id="app">
    <input name="username" v-model="username">
    {{username}}
    <a v-bind:href="url">超链接</a>
    <a :href="url">超链接</a>    <!--简写-->
    <input name="username" v-model="url" size="50">
    <input type="button" value="click" v-on:click="textFunction">
    <input type="button" value="click" @click="textFunction">    <!--简写-->
    <div v-if="count == 3">1</div>
    <div v-else-if="count == 4">2</div>
    <div v-else="count == 5">3</div>
    <input v-model="count">
    <div v-show="count==3">show</div>
    <div v-for="num in nums">
        {{num}}
    </div>
    <div v-for="(num, i) in nums">
        {{num}} -> {{i}}
    </div>
</div>
<script src="js/vue.js"></script>
<script>
new Vue({
  el:"#app",
  data(){
    return{
      username:"",
      url:"http://localhost:8080/studyServlet/hello.html",
      count:3,
      nums:[1, 5, 7, 9, 4]
    }
  },
    methods:{
      textFunction(){
          alert("hello")
      }
    }
})

 

生命周期

        生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)

状态阶段周期
beforeCreate创建前
created创建后
beforeMount载入前
mounted挂载完成
beforeUpdate更新前
updated更新后
beforeDestroy销毁前
destroyed销毁后

        mounted:挂载完成,Vue初始化成功,HTML页面渲染成功。

                ➢发送异步请求, 加载数据

new Vue({
    el: "#app",
    mounted(){
        alert("^_^加载完毕,发送异步请求")
    }
})


Element

        Element:是饿了么公司前端开发团队提供的一套基于Vue的网站组件库,用于快速构建网页

        组件:组成网页的部件,例如超链接、按钮、图片、表格等等~

        Element官网:https://element.eleme.cn/#/zh-CNListener

 

快速入门

1.引入Element的CSS、js文件 和Vue.js

<script src="js/vue.js"></script>
<script src="element-ui/lib/index.js"></script>
<link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">

2.创建Vue核心对象

new Vue({
    el:"#studyElement",
})

3.官网复制Element组件代码

 

布局 

Element中有两种布局方式:

        ➢Layout布局:通过基础的24分栏, 迅速简便地创建布局

        ➢Container 布局容器:用于布局的容器组件,方便快速搭建页面的基本结构

        常用组件:表单、对话框和表单、分页工具条...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gitea 的详细介绍

什么是 Gitea&#xff1f; Gitea 是一个开源、轻量级的自托管 Git 服务&#xff0c;它允许用户搭建类似于 GitHub 或 GitLab 的代码托管平台。由于采用 Go 语言开发&#xff0c;Gitea 具有高效的性能和跨平台特性&#xff0c;适合个人开发者或小团队使用。 Gitea 的特点 轻量…

pycharm修改主题颜色和注释颜色

目录 一、修改主题颜色 二、修改注释颜色 一、修改主题颜色 总结的来说就是&#xff1a;File-Settings-Appearance-Theme。 有三种主题&#xff1a; Darcula&#xff1a;默认主题&#xff0c;可以看作是黑的&#xff1a; IntelliJ Light:可以看作是白的&#xff1a; High con…

在新能源充电桩、智能充电枪、储能等产品领域得到广泛应用的两款微功耗轨至轨运算放大器芯片——D8541和D8542

D8541和D8542是我们推荐的两款微功耗轨至轨运算放大器芯片&#xff0c;其中D8541为单运放&#xff0c; D8542为双运放&#xff0c;它特别适用于NTC温度采集电路、ADC基准电压电路、有源滤波器、电压跟随器、信号放大器等电路应用&#xff0c;在新能源充电桩、智能充电枪、…

JavaScript练手小技巧:仿米哈游官网人物跟随鼠标位移效果

最近&#xff0c;有同学找到我&#xff0c;说&#xff1a;老师&#xff0c;我想模仿米哈游官网。 我说&#xff1a;可以&#xff0c;很不错的。 她说&#xff1a;有些效果有点难&#xff0c;能不能帮我看下。 于是&#xff0c;我就简单大概粗糙的讲解了下大致的原理&#xf…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中&#xff0c;工具--获取工具与功能。 2. 安装图中工具&#xff0c;原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示&#xff1a; 4 在unity中运行游戏&#xff0c;vs这边确实成功断住了&#xff01;

柔数组的介绍

柔数组简单介绍 这个词你可能没有听过但是他的确是存在的。 1.在c99中结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员 2这就代表了它存在与结构体中&#xff0c;很重要的一点是&#xff0c;他只能是结构体的最后的一个成员&#xff0c;这是…

面向对象特征二:继承

继承的概述 生活中的继承 财产继承&#xff1a; 绿化&#xff1a;前人栽树&#xff0c;后人乘凉 “绿水青山&#xff0c;就是金山银山” 样貌&#xff1a; 继承之外&#xff0c;是不是还可以"进化"&#xff1a; 继承有延续&#xff08;下一代延续上一代的基因、财…

动态内存管理【malloc,calloc,realloc和free的理解】【柔性数组的概念】

一.为什么要有动态内存分配 我们知道&#xff0c;当我们创建变量的时候&#xff0c;我们会向系统申请一定大小的空间内存。比如int a10或者int arr[10]&#xff1b;我就向内存申请了4或者40个字节的大小来存放数据。但是当我们一旦申请好这个空间&#xff0c;大小就无法调整了…

Linux部署Kafka2.8.1

安装Jdk 首先确保你的机器上安装了Jdk&#xff0c;Kafka需要Java运行环境&#xff0c;低版本的Kafka还需要Zookeeper&#xff0c;我此次要安装的Kafka版本为2.8.1&#xff0c;已经内置了一个Zookeeper环境&#xff0c;所以我们可以不部署Zookeeper直接使用。 1、解压Jdk包 t…

缓存和缓存的常用使用场景

想象一下,一家公司在芬兰 Google Cloud 数据中心的服务器上托管一个网站。对于欧洲用户来说,加载可能需要大约 100 毫秒,但对于墨西哥用户来说,加载需要 3-5 秒。幸运的是,有一些策略可以最大限度地减少远程用户的请求延迟。 这些策略称为缓存和内容交付网络 (CDN),它们是…

HarmonyOS实战开发-使用List组件实现导航与内容联动的效果。

1 卡片介绍 使用ArkTS语言&#xff0c;实现一个导航与内容二级联动的效果。 2 标题 二级联动&#xff08;ArkTS&#xff09; 3 介绍 本篇Codelab是主要介绍了如何基于List组件实现一个导航和内容的二级联动效果。样例主要包含以下功能&#xff1a; 切换左侧导航&#xff…

OSCP靶场--Sorcerer

OSCP靶场–Sorcerer 考点(feroxbuster目录扫描zip包隐藏文件发现公钥私钥公钥覆盖私钥登陆suid start-stop-daemon提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.100 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.or…

nodejs下载安装以及npm、yarn安装及配置教程

1、nodejs下载安装 ​ 1.1、使用nodejs版本管理工具下载安装&#xff0c;可一键安装、切换不同nodejs版本&#xff0c; nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 本次演示的是安装版。 1、双击安装文件 nvm-setup.exe 选择nvm安装路径 例如&#xff1a;E:\Soft…

STL中容器、算法、迭代器

STL标准模板库封装了常用的数据结构和算法&#xff0c;让程序员无需太关心真实的数据结构实现。 容器 容器&#xff1a;用来存放数据的。 STL容器就是将运用最广泛的的一些数据结构实现出来。 常用的数据结构有&#xff1a;数组、链表、树、栈、队列、集合、映射表。 这些…

印度神体系与编程思维

印度神体系中存在三大主神&#xff1a;至高神梵天、毗湿奴以及湿婆。 1.神的类型抽象与神性优先级&#xff1a; 每一个神都掌握着世间中所存在的规律&#xff0c;比如天界里因陀罗&#xff08;帝释天&#xff09;等神掌控风火水电。换句话说&#xff0c;每一个可以抽象出来的世…

怎么把照片容量变小?图片压缩技巧分享

照片文件通常占据大量存储空间&#xff0c;特别是在拍摄高分辨率照片或大量照片的情况下&#xff0c;通过减小照片文件大小&#xff0c;可以节省设备内部存储或外部存储介质上的空间&#xff0c;使您能够容纳更多的照片。 打开压缩网站&#xff0c;点击选择图片压缩&#xff0…

JUC高并发编程详解

大家好&#xff0c;欢迎来到这篇关于JUC&#xff08;Java Util Concurrent&#xff09;高并发编程的博客&#xff01;在这个数字时代&#xff0c;我们的软件需求越来越庞大&#xff0c;而对于高并发编程的需求也日益迫切。在Java的世界里&#xff0c;JUC就像一位强大的武士&…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces(论文笔记)

What can I say? 2024年我还能说什么&#xff1f; Mamba out! 曼巴出来了&#xff01; 原文链接&#xff1a; [2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces (arxiv.org) 原文笔记&#xff1a; What&#xff1a; Mamba: Linear-Time …

线程池-2:runWorker分析-1

为何runWorker中在task被当前worker中的当前线程获取到准备执行task时需要进行worker.lock()? 如下图&#xff1a; 1、某个worker中的run逻辑只会被worker中包装的线程进行执行&#xff1b; 2、按理说&#xff1a;不会存在多个线程并发执行同一个worker中的runWorker()逻辑&a…

蓝桥杯真题Day41 倒计时13天 纯练题,该开始复习知识点了!

蓝桥杯第十二届省赛真题-分果果 题目描述 小蓝要在自己的生日宴会上将 n 包糖果分给 m 个小朋友。每包糖果都要分出去&#xff0c;每个小朋友至少要分一包&#xff0c;也可以分多包。 小蓝将糖果从 1 到 n 编号&#xff0c;第 i 包糖果重 wi。小朋友从 1 到 m 编号。每个小朋…