Http请求响应 Ajax 过滤器

10/10/2023

近期总结:

        最近学的后端部署,web服务器运行,各种请求响应,内容很多,学的很乱,还是需要好好整理,前面JavaSE内容还没有完全掌握,再加上一边刷题,感觉压力很大哈哈。看群友们都在说找工作难,又会被打击,不过感觉一切都以实力说话,提升自己比什么都有说服力,继续加油!

一、HTTP请求

从前端网页中可以向后端发送HTTP请求:
1,在浏览器地址栏输入后端地址;

2,超链接向后端发送http请求;

3,表单向后端发送http请求。

一个http请求包括:请求头,请求行,请求体

http请求方式:

  • POST请求(从客户端向后端发送大量数据。数据在请求体中存放,相对安全,数据无大小限制)
  • GET请求(向后端发送请求,携带少量数据,从后端获取大量数据,不安全,传输数据量有限,1~2Kb) 

http请求方法:

servletRequest.setCharacterEncoding("utf-8");//设置请求正文的字符编码。它确保服务器使用 UTF-8 字符编码正确解释传入数据
String account=req.getParameter("account");//接收请求中我们自己提交的数据
req.getMethod();//获得请求方法
req.getRequestURL();//获得客户端请求地址
req.getHeader();//获得请求头
req.getRemoteAddr();//获得客户端ip

二、HTTP响应(响应行 响应头 响应体)

响应状态码

200 请求成功

404 请求资源不存在

500 服务器内部错误(代码异常) 

http响应方法:

servletResponse.setContentType("text/html;charset=utf-8");//不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示
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

三、过滤器(Filter)

作用:在请求进入到Servlet之前,让请求进入过滤器进行统一处理。

例如:可以对编码进行统一处理(请求,响应),可以对权限验证进行统一处理....

以对编码处理过滤为例:

 

1,创建一个专门编写过滤器的文件夹,创建.java文件,编写专门处理编码问题的代码。

import javax.servlet.*;
import java.io.IOException;public class Encoding implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");//设置请求正文的字符编码。它确保服务器使用 UTF-8 字符编码正确解释传入数据servletResponse.setContentType("text/html;charset=utf-8");//不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示filterChain.doFilter(servletRequest,servletResponse);//继续向后执行,后一个可能是下一个过滤器,也可能是Servlet}
}

2,对web.xml进行配置,为什么要配置web.xml(原因很简单,因为每次启动servlet时,服务器都会首先读取web.xml文件,这样过滤器才能被读取)

<filter><filter-name>Encoding</filter-name><filter-class>com.ffyc.webserver.filter.Encoding</filter-class></filter><filter-mapping><filter-name>Encoding</filter-name><url-pattern>/*</url-pattern>
<!--        /*代表所有地址均可进入过滤器   --></filter-mapping>

四、前端向后端发送请求方式:

1,同步方式

在前端向后端发送请求后,后端返回的内容会打断前端用户操作。

2,异步方式(不同步)

后端响应回来的内容不会打断前端用户操作

异步请求已经成为前后端交互的标配


 如何从前端向后端发送异步请求?

1,使用原生的js发送异步请求

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title></head><script src="js/axios.min.js"></script><body><form method="post"><input type="text" placeholder="账号" name="account" onblur="checkAccount(this.value)"><span id="msgid"></span><br><input type="password" placeholder="密码" name="password"><br><input type="submit" value="登录"/></form><script>function checkAccount(account){var reqobj=new XMLHttpRequest();reqobj.open("get","http://localhost:8088/webServer/LoginServlet?account="+account);//准备请求reqobj.send();//发送请求reqobj.onreadystatechange=function(){document.getElementById("msgid").innerHTML=reqobj.responseText;}}</script></body>
</html>

 2,使用ajax框架(网络请求库)例如axious

Ajax:可以无刷新状态更新页面,解决了打断前端用户操作的问题,实现了异步提交。

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title></head><script src="js/axios.min.js"></script><body><form method="post"><input type="text" placeholder="账号" name="account" onblur="checkAccount(this.value)"><span id="msgid"></span><br><input type="password" placeholder="密码" name="password"><br><input type="submit" value="登录"/></form><script>function checkAccount(account){axios.get("http://localhost:8088/webServer/LoginServlet?account="+account).then(a=>{document.getElementById("msgid").innerHTML=a.data;})}</script></body>
</html>

注意:记得在后端添加过滤器

package com.ffyc.webserver.filter;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);}
}

配置web.xml

    <filter><filter-name>corss</filter-name><filter-class>com.ffyc.webserver.filter.CorsFilter</filter-class></filter><filter-mapping><filter-name>corss</filter-name><url-pattern>/*</url-pattern></filter-mapping>

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

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

相关文章

Postman接口测试学习之常用断言

什么是断言&#xff1f; 断言——就是结果中的特定属性或值与预期做对比&#xff0c;如果一致&#xff0c;则用例通过&#xff0c;如果不一致&#xff0c;断言失败&#xff0c;用例失败。断言&#xff0c;是一个完整测试用例所不可或缺的一部分&#xff0c;没有断言的测试用例…

MAX30102心率血氧传感器

MAX30102心率血氧传感器介绍 背景基本功能基本结构基本原理采集方法直通式采集方法反射式采集方法 血氧采集原理Beer-Lambert 定理皮肤组织模型血氧测量过程AC / DC 的计算 心率采集原理 实验结果代码走读资源链接 背景 目前&#xff0c;基本上所有的可穿戴式设备都集成了心率…

【Java 进阶篇】CSS盒子模型详解

CSS盒子模型是网页布局的基础之一&#xff0c;它定义了HTML元素在页面上的占用空间和相互关系。理解CSS盒子模型对于构建各种类型的网页布局至关重要。在本文中&#xff0c;我们将深入探讨CSS盒子模型的各个方面&#xff0c;包括盒子模型的概念、属性和如何使用它们来控制元素的…

[idekCTF 2022]Paywall - LFI+伪协议+filter_chain

[idekCTF 2022]Paywall 一、解题流程&#xff08;一&#xff09;、分析&#xff08;二&#xff09;、解题 二、思考总结 一、解题流程 &#xff08;一&#xff09;、分析 点击source可以看到源码&#xff0c;其中关键部分&#xff1a;if (isset($_GET[p])) {$article_content…

JVM 参数

JVM 参数类型大致分为以下几类&#xff1a; 标准参数&#xff08;-&#xff09;&#xff1a;保证在所有的 JVM 实现都支持的参数非标准参数&#xff08;-X&#xff09;&#xff1a;通用的&#xff0c;特定于 HotSpot 虚拟机的参数&#xff0c;这些参数不保证在所有 JVM 实现中…

【【萌新的SOC学习之重新起航SOC】】

萌新的SOC学习之重新起航SOC ZYNQ PL 部分等价于 Xilinx 7 系列 FPGA PS端&#xff1a;Zynq 实际上是一个以处理器为核心的系统&#xff0c;PL 部分可以看作是它的一个外设。 我们可以通过使用AXI(Advanced eXtensible Interface)接口的方式调用 IP 核&#xff0c;系统通过 AX…

1700*C. Mixing Water(数学 | 二分)

Problem - 1359C - Codeforces 解析&#xff1a; 因为每次先加热水&#xff0c;再加凉水&#xff0c;所以温度的范围肯定在 [ ( hc ) / 2 , h ] 所以当 t 为 h时&#xff0c;结果为 1 当 t 小于( hc ) / 2时&#xff0c;肯定为2 &#xff08;一杯热水和一杯冷水&#xff09; …

聊聊分布式架构06——[NIO入门]简单的Netty NIO示例

目录 Java NIO和Netty NIO比较 Java NIO&#xff1a; Netty&#xff1a; Netty NIO中的主要模块 Transport&#xff08;传输层&#xff09; Buffer&#xff08;缓冲区&#xff09; Codec&#xff08;编解码器&#xff09; Handler&#xff08;处理器&#xff09; Even…

Android NFC开发详解:NFC读卡实例解析及总结

文章目录 前言一、什么是NFC&#xff1f;二、基础知识1.什么是NDEF&#xff1f;2.NFC技术的操作模式3.标签的技术类型4.实现方式的分类5.流程三、获取标签内容1.检查环境2.获取NFC标签2.1 Manifest中注册的方式获取Tag2.1 前台Activity捕获的方式获取Tag四、解析标签数据1. M1…

配置Hive使用Spark执行引擎

配置Hive使用Spark执行引擎 Hive引擎概述兼容问题安装SparkSpark配置Hive配置HDFS上传Spark的jar包执行测试速度对比 Hive引擎 概述 在Hive中&#xff0c;可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括&#xff1a;默认MR、tez、spark MapReduce引擎&#xff1a; 早…

英码边缘计算盒子IVP03X——32T超强算力,搭载BM1684X算能TPU处理器

产品8大优势&#xff1a; 高效节能&#xff1a;相较异构产品&#xff0c;IVP03X数据调配效率更高&#xff0c;资源利用率更高&#xff0c;平均功耗更低&#xff1b;升级换代&#xff1a;相较算能BM1684平台&#xff0c;IVP03X算力、编码&#xff0c;模型转换性能均翻倍提升&am…

Easysearch Chart 0.2.0都有哪些变化

Easysearch Chart 包更新了&#xff0c;让我们来看看都有哪些变化&#xff1a; Docker 镜像升级 Service 名称调整&#xff0c;支持 NodePort 模式部署 现在让我们用 NodePort 模式部署一下&#xff1a; # helm search repo infinilabs NAME CHART VERSION …

VS2022+qt5.15.2+cmake3.23.2配置VTK9.1.0版本

VS2022qt5.15.2cmake3.23.2VTK9.1.0 尝试了好多次&#xff0c;终于成了~ 软件安装 先把需要的软件都安装好&#xff01; VS2022安装教程: https://blog.csdn.net/qq_44005305/article/details/132295064 qt5.15.2安装教程&#xff1a;https://blog.csdn.net/Qi_1337/article…

PLC之间无线通信-不用编程实现多品牌PLC无线通讯的解决方案

本文是PLC设备之间基于IGT-DSER系列智能网关实现WIFI无线通讯的案例。采用西门子S7-1500系列的PLC作为主站&#xff0c;与其它品牌的PLC之间进行网络通讯。案例包括智能网关AP方式、现场WIFI信号两种方式。有线以太网方式实现PLC之间通讯的案例 一、智能网关AP方式 将网络中的其…

SpringBatch适配不同数据库的两种方法

一、配置JobRepository Configuration EnableBatchProcessing public class TaskArrangeConfig extends DefaultBatchConfigurer {Autowiredprivate DataSource dataSource;Autowiredprivate JobLauncher jobLauncher;Autowiredprivate JobExplorer jobExplorer;Autowiredpriv…

李沐深度学习记录4:12.权重衰减/L2正则化

权重衰减从零开始实现 #高维线性回归 %matplotlib inline import torch from torch import nn from d2l import torch as d2l#整个流程是&#xff0c;1.生成标准数据集&#xff0c;包括训练数据和测试数据 # 2.定义线性模型训练 # 模型初始化&#xff08;函…

springboot 捕获特点异常信息并处理

前端获取效果图 springboot 捕获特点异常信息并处理 import com.one.utils.JSONResult; //JSONResult定义处理结果对象 import org.springframework.web.bind.annotation.ExceptionHandler

35.树与二叉树练习(1)(王道第5章综合练习)

【所用的树&#xff0c;队列&#xff0c;栈的基本操作详见上一节代码】 试题1&#xff08;王道5.3.3节第3题&#xff09;&#xff1a; 编写后序遍历二叉树的非递归算法。 参考&#xff1a;34.二叉链树的C语言实现_北京地铁1号线的博客-CSDN博客https://blog.csdn.net/qq_547…

3D 生成重建005-NeRF席卷3D的表达形式

3D生成重建005-NeRF席卷3D的表达形式 文章目录 0 论文工作1 论文方法1.1 体渲染1.2 离散积分1.3位置编码1.4分层采样1.5 影响 2 效果 0 论文工作 NeRF(神经辐射场技术)最早2020年提出用于新视图合成任务&#xff0c;并在这个领域取得了优秀的效果。如下图所示&#xff0c;受到…

Springcloud笔记(2)-Eureka服务注册

Eureka服务注册 服务注册&#xff0c;发现。 在Spring Cloud框架中&#xff0c;Eureka的核心作用是服务的注册和发现&#xff0c;并实现服务治理。 Eureka包含两个组件&#xff1a;Eureka Server和Eureka Client。 Eureka Server提供服务注册服务&#xff0c;各个节点启动后…