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");//是否携带cookie
        filterChain.doFilter(servletRequest, servletResponse);//让请求和响应通向下一个过滤器
    }
}

2.编码过滤器

        解决编码问题。

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter{

    String encod;
    String respencod;

    @Override
    public 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");
    }

    /*
           用来执行过滤操作
         */
    @Override
    public 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.mfbz.cn/a/555078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频拍摄知识+AIGC数据预处理

视角 参考链接&#xff1a;https://www.polarpro.com/blogs/polarpro/filmmaking-101-types-of-camera-shots-and-angles Low Angle Shot 低角度拍摄、horizontal Shot 平视、Dutch Angle Shot 荷兰角斜拍、High Angle Shot 高角度拍摄、Bird’s-eye / Aerial Shot 鸟瞰 / 航…

【Mysql数据库进阶01】窗口函数

窗口函数 1 定义2 聚合窗口函数2.1 默认效果/累计效果2.2 前面两行当前一行2.3 前面一行当前一行后面一行 3 排名窗口函数3.1 排名函数3.1.1 排名函数案例 3.2 累积分布 4 取值窗口函数 1 定义 完整的窗口函数定义如下: window_function([expression]) over(partition byorde…

计算机网络 -- 网络编程基础

一 学习准备 1.1 IP地址 在 前文中我们提到过: IP 是全球网络的基础&#xff0c;使用 IP 地址来标识公网环境下主机的唯一性&#xff0c;我们可以根据 目的IP地址 进行跨路由器的远端通信。 但是我们也提到了&#xff0c;通过 IP 地址&#xff0c;只能寻找到目标主机&#xff…

Transformer - Teacher Forcing

Transformer - Teacher Forcing flyfish 在训练过程中&#xff0c;将目标序列输入给解码器的方法称为&#xff08;Teacher Forcing&#xff09;。这个术语又代表什么意思呢&#xff1f; 这里的目标序列就是Ground Truth&#xff0c;也就是我们已知的正确答案 一句话就是我们…

系统思考—战略

“有策略而无战术&#xff0c;是取胜之最慢之道。有战术而无策略&#xff0c;是败亡之前的嘈杂。”—孙子 最近接触的中小企业&#xff0c;充分能感受到在经济下行的情况下&#xff0c;组织与战略是不可分割的两个方面。有时候公司组织出现了问题&#xff0c;可能是因为战略不…

高效便捷!解锁阿里云跨账号专线互联的全新实施方案

作者&#xff1a;小丫、琉璃 背景 为持续提升金融云环境的合规标准以及可用区内产品服务的性能和稳定性&#xff0c;阿里云将对杭州地域BCD三个金融云可用区进行基础设施架构升级与改造&#xff0c;对应可用区云产品将于 2024 年后停止服务&#xff0c;需要将业务迁移到新可用…

HarmonyOS实战开发-如何实现一个简单的健康生活应用

功能概述 成就页面展示用户可以获取的所有勋章&#xff0c;当用户满足一定的条件时&#xff0c;将点亮本页面对应的勋章&#xff0c;没有得到的成就勋章处于熄灭状态。共有六种勋章&#xff0c;当用户连续完成任务打卡3天、7天、30天、50天、73天、99天时&#xff0c;可以获得…

42-软件部署实战(下):IAM系统安全加固、水平扩缩容实战

IAM应用安全性加固 iam-apiserver、iam-authz-server、MariaDB、Redis和MongoDB这些服务&#xff0c;都提供了绑定监听网卡的功能。将服务绑定到内网网卡上。 我们也可以通过iptables来实现类似的功能&#xff0c;通过将安全问题统一收敛到iptables规则&#xff0c;可以使我…

利用FFmpeg 转换课程vtt 字幕到 srt字幕

字幕转换工具 经常学习udemy 视频课程的&#xff0c;可能知道&#xff0c;从网络下载的udemy 课程文件里面有时候字幕是vtt 格式的&#xff0c;有时候想导入到百度网盘里面&#xff0c;怎奈百度网盘&#xff0c;不支持vtt 字幕格式。有字幕的时候&#xff0c;会比较好多了。既可…

【python】super()函数的用法详解!

今天分享一个我在实际项目中用到过的super()函数&#xff0c;来说说该函数的主要功能是什么&#xff0c;简单来说&#xff0c;super()函数是用来做调用父类的一个方法。 super() 是用来解决多重继承问题的&#xff0c;直接用类名调用父类方法在使用单继承的时候没问题&#xf…

第十五届蓝桥杯复盘python大学A组——试题C 数字诗意

思路 数字可以分为 有诗意的数字可以写成 (ij)(j-i1)/2 &#xff08; i、j都是正整数 &#xff09; ij 、j-i1 的奇偶性不同&#xff08;因为i、j都是正整数&#xff09; 因此&#xff0c; 如果一个数是奇数就一定有诗意 eg.312 ,523,734,945… 原因&#xff1a;根据上述分…

什么是yum、以及yum源

文章目录 yum介绍软件安装/卸载生态 yum Linux中需要对对工具、指令、程序进行安装、检查、卸载等工作&#xff0c;需要使用到yum。 Linux中安装软件的方式 源代码安装rpm包直接安装yum安装 / apt-get安装 介绍 yum是Linux预装的一个指令&#xff0c;搜索、下载、安装对应…

2.6 类型安全配置属性

无论是Propertes配置还是YAML配置&#xff0c;最终都会被加载到Spring Environment中。 Spring提供了注解Value以及EnvironmentAware接口来将Spring Environment 中的数据注入到属性上&#xff0c;SpringBoot对此进一步提出了类型安全配置属性(Type-safeConfiguration Propert…

从计算机视觉到生命科学

人工智能技术的快速发展正在深刻影响和重塑我们的生活。作为AI领域的前沿方向,多模态大模型凭借其强大的跨域学习和推理能力,在众多行业和科学领域展现出广阔的应用前景。多模态AI指的是能够同时处理和整合文本、图像、音频、视频等不同模态数据的智能系统。这种融合不同信息源…

uni-admin中引入uni-cms的缺少schema及uni-media-library缺少云函数的问题

1. 在管理端运行提示一些表找不到&#xff0c;因为是uni-admin关联的uni-starter的服务空间&#xff0c;在uni-admin的uniCloud中没有内容&#xff0c;在uni-starter的uniCloud中也没有发现对应的表&#xff0c;后面干脆在云端找到对应的表之后新建了&#xff0c;然后再下载到本…

网工内推 | 14薪!安全服务工程师,上市公司,CISP认证优先

01 远江盛邦 招聘岗位&#xff1a;安全服务工程师 职责描述&#xff1a; 1、负责对客户网络、系统进行渗透测试&#xff0c;漏洞验证、安全评估和安全加固&#xff1b; 2、负责对监督单位的系统安全问题进行监督&#xff0c;并督察改进&#xff1b; 3、对监管单位的安全告警、…

机器人流量激增:恶意机器人活动升级与新型规避技术挑战企业安全防御

近日&#xff0c;根据Cyber News引用Thales Imperva Bad Bot发布的最新研究报告&#xff0c;揭示了一个令人警醒的现象&#xff1a;2023年&#xff0c;互联网总流量中的49.6%由机器人贡献&#xff0c;相较于上一年增长了2%&#xff0c;创下了自2013年监测以来的历史新高。这一显…

【性能测试】接口测试各知识第4篇:Jmeter 八大元件及执行顺序,学习目标【附代码文档】

接口测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;接口测试&#xff0c;学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标&#xff0c;RESTFUL1. 理解接口的概念,2.什么是接口测试…

我的2024年暑期三下乡实践宣传投稿之旅

身为2024年暑期大学生三下乡社会实践活动的一员,我肩负着学院赋予的对外信息宣传投稿考核任务。在这条特殊的宣传之路上,我经历了从之初摸着石头过河,一家家联系媒体的艰辛,到后来使用智慧软文发布系统网站进行投稿发文章的轻松转变。 刚开始,我对媒体投稿几乎一无所知。为了完…

力扣136. 只出现一次的数字

Problem: 136. 只出现一次的数字 文章目录 题目描述思路复杂度Code 题目描述 思路 由于题目要求使用线性时间复杂度和常量级的空间复杂度&#xff0c;再加上找重复元素这个特性&#xff0c;我们可以想到使用位运算来求解&#xff1a; 1.任何数与其本身异或得0&#xff0c;任何…
最新文章