javaEE知识点记录

一、过滤器

        在JavaEE中,过滤器(Filter)是一种用于在Web应用程序中对请求和响应进行预处理和后处理的组件。它可以对进入或离开应用程序的请求/响应进行拦截和修改。

        过滤器主要用于以下几个方面:

  1. 认证和授权:可以使用过滤器来验证用户的身份并授予访问权限。通过拦截请求,在进入应用程序之前检查用户的凭证,从而实现安全访问控制。

  2. 日志记录和统计:通过使用过滤器,可以记录和统计应用程序中的请求和响应信息。可以记录请求的URL、参数、响应时间等,从而进行性能监控和问题排查。

  3. 数据压缩和加密:过滤器可以对请求和响应进行压缩和加密,以减少网络传输的数据量和提高传输安全性。

  4. 请求转发和重定向:可以使用过滤器来检查请求并决定是否重定向或转发请求到其他资源,实现请求的转发和重定向。

       在JavaEE中,过滤器是通过实现javax.servlet.Filter接口来创建的。过滤器可以配置在web.xml文件中,也可以使用注解来配置。过滤器可以通过过滤器链(Filter Chain)按照顺序依次执行,也可以使用过滤器映射(Filter Mapping)指定过滤器的作用范围。

       过滤器在Web开发中非常重要,它可以实现对请求和响应的统一处理和拦截,提高应用程序的安全性和性能。使用过滤器可以将公共的逻辑抽象出来,减少代码的冗余,并且可以灵活地配置和管理过滤器的行为。

这里展示两种常用的过滤器:

1.跨域过滤器

        后端解决浏览器跨域问题。

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class CorsFilter implements Filter {public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;//允许携带Cookie时不能设置为* 否则前端报错httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookiefilterChain.doFilter(servletRequest, servletResponse);//让请求和响应通向下一个过滤器}
}

2.编码过滤器

        解决编码问题。

import javax.servlet.*;
import java.io.IOException;public class EncodingFilter implements Filter{String encod;String respencod;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {//初始化获取参数信息
//                <init-param>
//            <param-name>encod</param-name>
//            <param-value>utf-8</param-value>
//        </init-param>
//        <init-param>
//            <param-name>respencod</param-name>
//            <param-value>text/html;charset=utf-8</param-value>
//        </init-param>encod =  filterConfig.getInitParameter("encod");respencod =  filterConfig.getInitParameter("respencod");}/*用来执行过滤操作*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("编码过滤器");servletRequest.setCharacterEncoding(encod);//设置请求解码格式servletResponse.setContentType(respencod);//设置响应体内容格式filterChain.doFilter(servletRequest,servletResponse);//让请求离开过滤器,继续向后执行,后一个可能是下一个过滤器,也可能是servlet}
}

二、跨域问题

        跨域问题(Cross-Origin Resource Sharing,简称CORS)是指在浏览器中,通过XMLHttpRequest或Fetch API等方式发送Ajax请求时,只能从同源网站(协议、域名、端口号相同)发送请求,而不能向其他域名或端口发送请求。

       跨域问题是由浏览器的同源策略(Same-Origin Policy)导致的。同源策略限制了一个网页中加载的资源只能来自同一域名下,这是为了保护用户的安全和隐私。如果浏览器没有同源策略,那么恶意的网站可以通过跨域请求获取到其他网站上的敏感信息。

跨域问题可以分为以下几种情况:

  1. 域名不同:当请求的URL中的域名部分与当前页面的域名不同,例如从www.example.com发送请求到api.example.com,就会触发跨域问题。

  2. 协议不同:当请求的URL的协议部分与当前页面的协议不同,例如从http://example.com发送请求到https://example.com,也会触发跨域问题。

  3. 端口号不同:当请求的URL的端口号与当前页面的端口号不同,例如从http://example.com:8080发送请求到http://example.com:8888,同样会触发跨域问题。

上述的跨域过滤器就可以解决跨域问题。

三、异步发送请求

1.原生发送

(1)使用XMLHttpRequest对象

post请求:

var xhr = new XMLHttpRequest();
xhr.open('POST', '服务器地址', true);
xhr.setRequestHeader('Content-Type', 'application/json');xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {var response = JSON.parse(xhr.responseText);console.log(response);} else {console.error('Request failed with status: ' + xhr.status);}
};xhr.onerror = function() {console.error('Request failed');
};var data = {key1: 'value1',key2: 'value2'
};xhr.send(JSON.stringify(data));

get请求:

var xhr = new XMLHttpRequest();
xhr.open('GET', '服务器地址', true);xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {var response = JSON.parse(xhr.responseText);console.log(response);} else {console.error('Request failed with status: ' + xhr.status);}
};xhr.onerror = function() {console.error('Request failed');
};xhr.send();

(2)使用Fetch API发送

get请求:

fetch('服务器地址').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();}).then(data => {console.log(data);}).catch(error => {console.error('There was a problem with the fetch operation:', error);});

post请求:

fetch('服务器地址', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({key1: 'value1',key2: 'value2'})
})
.then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json();
})
.then(data => {console.log(data);
})
.catch(error => {console.error('There was a problem with the fetch operation:', error);
});

2.axios发送

        axios是现在应用最多的前后端异步交互方式,适用与原生和vue,其官方文档十分详细,官网链接如下:Axios中文文档 | Axios中文网 (axios-http.cn)

        这里对其使用进行简单演示:

(1)get请求:

// 引入Axios
import axios from 'axios';// Vue组件中的示例代码
export default {data() {return {responseData: null};},methods: {fetchData() {axios.get('服务器地址').then(response => {this.responseData = response.data;}).catch(error => {console.error('Error fetching data:', error);});}}
}

(2)post请求:

// 引入Axios
import axios from 'axios';// Vue组件中的示例代码
export default {data() {return {postData: {key1: 'value1',key2: 'value2'}};},methods: {sendData() {axios.post('服务器地址', this.postData).then(response => {console.log('Post request successful:', response.data);}).catch(error => {console.error('Error sending data:', error);});}}
}

        除了直接引入外,还可以将axios全局引入:

创建一个名为axios.js的文件,并在其中配置Axios:

// axios.js 
import axios from 'axios'; 
const instance = axios.create({ baseURL: '服务器地址', // 设置基础URL timeout: 5000, // 设置超时时间 headers: { 'Content-Type': 'application/json' } 
}); 
export default instance;

在上面的代码中,我们创建了一个名为instance的Axios实例,并配置了基础URL、超时时间和请求头。您可以根据需要进行自定义配置。

在Vue项目的入口文件(通常是main.js)中引入并挂载Axios实例:

// main.js 
import Vue from 'vue'; 
import App from './App.vue'; 
import axios from './axios'; // 引入axios.js文件 
Vue.prototype.$http = axios; // 将Axios实例挂载到Vue原型上 
new Vue({ render: h => h(App),
}).$mount('#app');

通过以上步骤,在整个Vue应用程序中都可以通过this.$http来访问Axios实例,从而发送HTTP请求。例如,在Vue组件中可以这样使用:

this.$http.get('servlet路径') .then(response => { console.log(response.data);}).catch(error => { console.error('Error:', error); 
});

四、json文件

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端之间的数据传输和存储。它以简洁、易读的方式表示数据结构,具有良好的可扩展性和跨平台兼容性。

JSON文件是使用JSON格式编写的文件,通常以".json"为文件扩展名。它的内容是一个由键值对组成的数据结构,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。

JSON文件的特点包括:

  1. 简洁易读:JSON采用类似于JavaScript对象的语法,使数据结构的表达方式简洁明了,易于阅读和理解。

  2. 可扩展性:JSON文件允许嵌套复杂的数据结构,可以表示多层次的对象和数组,以满足不同的数据需求。

  3. 跨平台兼容性:JSON是一种通用的数据格式,几乎所有现代编程语言都支持解析和生成JSON数据,使得在不同平台之间进行数据交换和共享变得更加容易。

JSON文件通常用于以下方面:

  1. 网络数据传输:前后端之间通过JSON格式进行数据交互,例如使用Ajax请求获取服务器返回的JSON数据。

  2. 配置文件:应用程序可以使用JSON文件来存储和读取配置信息,例如数据库连接信息、API密钥等。

  3. 数据存储:将数据以JSON格式存储到文件或数据库中,以便后续读取和处理。

在使用JSON文件时,可以使用各种编程语言提供的JSON解析库或内置函数来读取和解析JSON数据,并对数据进行操作和处理。

总而言之,JSON文件是一种常用的数据交换格式,具有简洁易读、可扩展和跨平台兼容等特点,方便在不同平台和应用程序之间进行数据的传输和存储。

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

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

相关文章

Gitea 简单介绍、用法以及使用注意事项!

Gitea 是一个轻量级的代码托管解决方案&#xff0c;它提供了一个简单而强大的平台&#xff0c;用于托管和协作开发项目。基于 Go 语言编写&#xff0c;与 GitLab 和 GitHub Enterprise 类似&#xff0c;但专为自托管而设计。以下是对 Gitea 的详细介绍&#xff0c;包括常用命令…

在react配置使用less的最优解

在react配置使用less的最优解 react默认支持用scss&#xff0c;不支持less&#xff0c;直接使用less时会报错&#xff0c;因此当使用less的时候需要进行额外配置。至于技术选型选择less或scss完全取决于你的个人偏好。你当然可以采取别的方式去实现对less的配置。但是我这里只…

anaconda配置的环境对应的地址查看,环境安装位置

打开conda指令窗口 这个和上面的都一样&#xff0c;哪个都行 点开后&#xff0c;输入 conda env list 这里显示的就是自己的每个环境对应的地址了

游戏黑灰产识别和溯源取证

参考&#xff1a;游戏黑灰产识别和溯源取证 1. 游戏中的黑灰产 1. 黑灰产简介 黑色产业&#xff1a;从事具有违法性活动且以此来牟取利润的产业&#xff1b; 灰色产业&#xff1a;不明显触犯法律和违背道德&#xff0c;游走于法律和道德边缘&#xff0c;以打擦边球的方式为“…

巧用断点设置查找bug【debug】

默认设置的断点&#xff0c;当代码运行到断点处MCU就会被挂起&#xff0c;从而停在断点处。 但在某些情况下&#xff0c;如调试FCCU时&#xff0c;如果设置断点&#xff0c;MCU停下后将会导致 FCCU 配置WDG超时。或在调试类似电机控制类的应用时&#xff0c;不适当的断点会导 致…

复合升降机器人教学科研平台——技术方案

一&#xff1a;功能概述 1.1 功能简介 复合升降机器人是一款集成移动底盘、机械臂、末端执行器、边缘计算平台等机构形成的教学科研平台&#xff0c;可实现机器人建图导航、路径规划&#xff0c;机械臂运动学、动力学、轨迹规划、视觉识别等算法功能和应用&#xff0c;提供例如…

C语音——不要解引用未初始化的指针

解引用&#xff1a;*pt得到指针指向地址上储存的值。 int *pt&#xff1b;*pt 5&#xff1b; 创建一个指针时&#xff0c;系统只分配了储存指针本身的内存&#xff0c;并未分配储存数据的内存。若直接用5赋值*pt&#xff0c;由于pt未初始化地址&#xff0c;其地址是随机值&a…

Python中列表数据的保存与读取:以txt文件为例

目录 引言 一、列表数据的保存 二、列表数据的读取 三、进阶用法与注意事项 1. 处理嵌套列表 2. 处理大量数据 3. 注意事项 四、总结 引言 在Python编程中&#xff0c;我们经常需要处理各种类型的数据&#xff0c;包括列表。列表是一种非常灵活的数据结构&#xff0c;…

边缘计算的优势

边缘计算的优势 边缘计算是一种在数据生成地点附近处理数据的技术&#xff0c;而非传统的将数据发送到远端数据中心或云进行处理。这种计算模式对于需要快速响应的场景特别有效&#xff0c;以下详述了边缘计算的核心优势。 1. 降低延迟 边缘计算通过在数据源近处处理数据&…

npm config set registry切换npm镜像源

要切换 npm 镜像源&#xff0c;可以使用 npm config set registry 命令。以下是切换到官方的 npm 镜像源的步骤&#xff1a; 查看当前 npm 镜像源&#xff1a; npm config get registry如果当前的镜像源不是官方的 npm 镜像源&#xff08;https://registry.npmjs.org/&#xff…

java学习笔记3

5. 多重循环和程序调试 5.1 多重循环 多重循环是指循环中嵌套循环结构 多重循环注意事项 各种循环可以互相嵌套一般不要超过三层嵌套外层循环变化一次,内层循环要全部执行完代码 **需求1:**使用循环嵌套输出10*10的矩形 public static void demo() {for (int i = 0; i <…

imx6ull设备树驱动--pinctl、ioctl

添加pinctl节点 进入arch/arm/boot/dts目录下dts文件 在iomuxc下添加pinctlled节点 将 GPIO1_IO03 这个 PIN 复用为 GPIO1_IO03&#xff0c;电气属性&#xff08;配置GPIO一些列寄存器&#xff09;值为 0X10B0 添加led设备节点 与上一节一样&#xff0c;在 / 下面添加设备节…

数电期末复习(四)组合逻辑电路

这里写目录标题 4.1 概述4.2 组合逻辑电路的分析方法4.3 组合逻辑电路的设计方法4.4 若干常用组合逻辑电路4.4.1 编码器&#xff08;encoder&#xff09;4.4.2 译码器(decoder)4.4.3 数据选择器 (data selector)4.3.4 加法器&#xff08;Adder&#xff09;4.4.4 数值比较器&…

4.21总结

由于之前的项目没有使用服务器搭建&#xff0c;这两天进行了一些修改&#xff0c;以服务器为中端进行搭建&#xff0c;登录注册等功能从直接与数据库关联改为由服务器进行&#xff08;直接关联只能在自己的端口进行修改&#xff0c;放在别人电脑上就无法进行&#xff09; 顺遍…

kubectl常用命令行介绍

1、kubectl用法概述 kubectl命令⾏的语法如下&#xff1a; $ kubectl [command] [type] [name] [flags] command&#xff1a;命令&#xff0c;用于操作Kubernetes集群资源对象的命令&#xff0c;例如create、delete、describe、get、apply等TYPE&#xff1a;资源对象的类型&am…

OpenHarmony UI开发-ohos-svg

简介 ohos-svg是一个SVG图片的解析器和渲染器&#xff0c;解析SVG图片并渲染到页面上。它支持大部分 SVG 1.1 规范&#xff0c;包括基本形状、路径、文本、样式和渐变,它能够渲染大多数标准的 SVG 图像。ohos-svg的优点是性能好、内存占用低。 效果展示 SVG图片解析并绘制: …

Python基本类型

1、Java基本类型 在java里&#xff0c;总共有8种基本类型&#xff0c;分别是&#xff1a; boolean&#xff1a;布尔类型&#xff0c;只有两个值true和false。char&#xff1a;字符类型&#xff0c;占用2个字节&#xff0c;用来表示一个单一的字符。byte&#xff1a;字节类型&…

uni-app HBuilderX通过easycom省略import自动导入自定义组件

快速尝试 自HBuilderX 2.5.5起支持easycom组件模式。更新HBuilderX即可尝试。 easycom默认已启用&#xff0c;并对项目下的components和uni_modules目录开启自动扫描&#xff0c;对符合下面路径和命名规则的组件自动导入。 components/组件名/组件名.vue uni_modules/组件名/…

使用飞桨快速部署stable diffusion模型

这可以说是最快的部署stable diffusion模型的方法了&#xff0c;而且星河社区还有免费的GPU算力提供&#xff0c;这样再也不用担心没有算力了&#xff01; 操作方法&#xff1a; # 安装相关库 pip install docarray0.21.0 pip install paddlehub# 初始化 from PIL import Imag…

踊跃参与,您有机会尊享300000水晶奖励!【AI书童】代言形象大投票活动开启~~~

【AI书童】运营官 未来智慧人工智能 2024-04-19 09:55 ✧ 快来选出你心目中的【AI书童】 ✦ 我们想为【AI书童】选择一个形象代言&#xff0c;使用【AI书童】软件生成了一部分形象照片。大家觉得哪个书童最合适呢&#xff1f;希望你们能给出宝贵的建议&#xff01; 【AI书童…