JavaEE(2):前后端项目之间的交互

news2024/12/23 2:53:29

现在,在网页中通过超链接,表单就可以向后端发送请求,后端也可以正常响应内容。

以前通过表单访问后端的请求方式称为同步请求

同步请求

        当网页与后端交互时,前端不能再进行其他操作

        服务器端响应回来的内容,会把整个浏览器的内容覆盖掉

        这种请求方式在前后端交互时,就不太友好了

        现在的前后端交互请求,都是使用的是异步请求

举例说明:

前端注册网页(实现同步请求):

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			function checkAccount(account){
				//同步请求,已经被抛弃了
				location.href = "http://127.0.0.1:8088/dormServer/register?account="+account;
			}
			
			function relogin(){
				location.href = "http://127.0.0.1:8848/webtest/login.html";
			}
		</script>
	</head>
	<body>
		<form method="post">
			账号:<input type="text" name="account" value="" onblur="checkAccount(this.value)"/> 
			<span id="msgid"></span>
			<br/>
			密码:<input type="password" name="password" value=""/> <br/>
			<input type="button" value="提交" onclick="relogin()"/>
		</form>
	</body>
</html>

        在注册界面输入好账号(已存在)后:

        

        当鼠标焦点不在账号栏时:

页面直接被响应到的信息覆盖了,后续操作无法进行。所以同步请求就被无情抛弃了~

异步请求

    同时可以做多件事情(前端与服务器交互时,不影响前端网页其他操作)

        使用js中提供的XMLHttpRequest对象实现发送异步请求,和接收服务器响应

        异步请求时,会出现跨域访问问题:浏览器默认不允许js对象接收来自其他服务器响应的内容。

举例说明:

        将前端网页的方法中将异步代码实现:

function checkAccount(account){
				//异步请求,使用js对象发送请求
				var httpobj = new XMLHttpRequest();
				//封装请求地址和数据
					httpobj.open("get","http://127.0.0.1:8088/dormServer/register?account="+account,true);
				//发送请求
					httpobj.send();
				//接收响应
					httpobj.onreadystatechange = function(){
						//httpobj.responseText;  获得到响应的内容
						document.getElementById("msgid").innerHTML = httpobj.responseText;
					}
			}

在注册界面输入好账号(已存在)后:

当鼠标焦点不在账号栏时,从后端响应回来的信息就会立刻附在账号栏后反馈给用户。

        但如果有很多种需要实时为用户反馈信息的话,这种异步请求的实现代码就非常繁琐,在多个前端网页也显得非常冗余。

        所以就有了axios框架去封装异步请求的代码,减少了代码的冗余。

axios

    axios 是一个HTTP 的网络请求库.

       <!-- 导入axios框架 -->
        <script src="js/axios.min.js"></script>

        然后注册网页的前端方法中的异步请求就会变成

function checkAccount(account){
				//axios框架对异步请求进行封装
				axios.get("http://127.0.0.1:8088/dormServer/register?account="+account).then((resp)=>{
					console.log(resp);
					document.getElementById("msgid").innerHTML = resp.data;//resp.data取出后端响应的内容
				});
			}

        极大减少了代码的数量,增加了代码的观赏性。

跨域问题

不同服务之间进行访问

只要请求协议,域名,端口其中一项不同,就属于跨域访问

在后端过滤器中响应时,告知前端本次响应是安全的,允许跨域访问

跨域问题是一个前端问题,也可以在后端解决,也可以在前端解决

        配置跨域过滤器

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"));//"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);
    }
}

 在web.xml文件中配置注册跨域过滤器

<!--配置允许跨域过滤器-->
    <filter>
        <filter-name>corsfilter</filter-name>
        <filter-class>com.ffyc.dormServer.filter.CorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>corsfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

json

        json javaScript object Notation javaScript对象表示法

        两种不同的语言之间如何进行数据交互(例如C语言程序 与 java程序之间要进行数据交互)

        json是一种公认的js识别的对象表示法,对于java而言就是一种特定格式的字符串

        对象:{键:值,键:值} 例如:{name:jim,age:20} 集合:[{键:值,键:值},{键:值,键:值}]

模拟json转换数据格式

        1、写一个SearchServlet类

public class SearchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        //模拟从数据库根据名字查询学生所有信息,然后叫数据封装到一个学生对象中
        Student student = new Student();
                student.setNum(101);
                student.setName(name);
                student.setGender("男");
                student.setAge(20);
        PrintWriter printWriter = resp.getWriter();
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonstr = objectMapper.writeValueAsString(student);
        printWriter.print(jsonstr);//打印响应一个学生对象
    }

        2、在web.xml文件中配置 SearchServlet

<servlet>
        <servlet-name>search</servlet-name>
        <servlet-class>com.ffyc.dormServer.web.SearchServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>search</servlet-name>
        <url-pattern>/search</url-pattern>
    </servlet-mapping>

        在前端写一个search.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 导入axios框架 -->
		<script src="js/axios.min.js"></script>
		<script>
			function search(){
				var name = document.getElementById("nameid").value;
				axios.get("http://127.0.0.1:8088/dormServer/search?name="+name).then((resp)=>{
					if(resp.data.code == 200){
						console.log(resp.data);
						alert(resp.data.massage);
						document.getElementById("numid").innerHTML = resp.data.data.num;
						document.getElementById("nameid1").innerHTML = resp.data.data.name;
						document.getElementById("genderid").innerHTML = resp.data.data.gender;
						document.getElementById("ageid").innerHTML = resp.data.data.age;
					}else if(resp.data.code == 500){
						alert(resp.data.massage);
					}
				});
			}
		</script>
	</head>
	<body>
		<input type="text" id="nameid"/>
		<input type="button" value="搜索" onclick="search()"/>
		<div>
			学号:<span id="numid"></span>
			姓名:<span id="nameid1"></span>
			性别:<span id="genderid"></span>
			年龄:<span id="ageid"></span>
		</div>
	</body>
</html>

测试json:

    打开search网页

    输入张三后,后端的json就将从数据库得到的信息,转换成json的数据格式响应回前端并显示上去

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

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

相关文章

1895. 二分查找右侧边界

代码 #include<bits/stdc.h> using namespace std; int a[100010],n,q; int yc(int x) {int l1,rn,mid;while(l<r){mid(lr)/2;if(x<a[mid]) rmid-1;else if(x>a[mid]) lmid1;}if(a[l-1]x) return l-1;else return -1; } int main() {int i,x;cin>>n;for(…

迷雾大陆游戏辅助:VMOS云手机强势辅助宠物推荐!

在《迷雾大陆》游戏中&#xff0c;选择合适的宠物是提升战斗力的关键。通过使用VMOS云手机&#xff0c;你可以体验到更为顺畅的游戏过程。VMOS云手机为《迷雾大陆》专门定制了专属的云手机版本&#xff0c;内置游戏安装包&#xff0c;不需要重新下载安装。此外&#xff0c;VMOS…

第一次使用Visual Studio社区版

由于C代码的需要&#xff0c;我开始尝试使用VS。 下载 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/ 网上关于专业版的教程较少&#xff0c;所以我猜测需求不大&#xff0c;于是我也下载社区版。 安装地址&#xff1a; &#xff08;工作负荷…

从 7000 余项目脱颖而出,飞轮科技《新一代实时分析数据仓库解决方案》荣获 HICOOL 2024 全球创业大赛二等奖

HICOOL 2024 全球创业者峰会于 2024 年 8 月 23 日 -25 日 在中国国际展览中心&#xff08;顺义馆&#xff09;成功举行&#xff0c;峰会以“新质引领 创新共融”为主题&#xff0c;聚焦技术创新、产业融合、新质共享与国际合作四大要素。 在 8 月 23 日晚的峰会开幕式上&…

一文速学-零成本与数据沟通NL2SQL的概念和实现技术

前言 关于NL2SQL的技术&#xff0c;如果大家最近有关注AI圈的话&#xff0c;或多或少都有所了解。其实很多业务场景下&#xff0c;于用户而言更多的是想要获取到最终数据的呈现效果&#xff0c;关于数据是如何获取得到的学习成本&#xff0c;是尽可能越少越好。众所周知当学习…

零知识证明-椭圆曲线(四)

前言 零知识证明(Zero—Knowledge Proof)&#xff0c;是指一种密码学工具&#xff0c;允许互不信任的通信双方之间证明某个命题的有效性&#xff0c;同时不泄露任何额外信息 上章介绍了基础数字知识&#xff0c;这章主要讲 椭圆曲线 方程 2&#xff1a;椭圆曲线方程 y2axybyx3…

知乎知+和信息流广告报价,知乎推广多少钱?

知乎作为中国领先的问答社区&#xff0c;凭借其高质量的内容和庞大的用户群体&#xff0c;已成为众多品牌竞相追逐的营销高地。如何在知乎平台上精准投放广告&#xff0c;实现品牌价值的最大化&#xff0c;成为了众多企业面临的难题。云衔科技&#xff0c;作为数字化营销解决方…

基于MATLAB的涡流函数方法案例+代码

前言 这里介绍一下相关理论和代码----基于MATLAB使用伪谱离散化 三阶龙格库塔时间积分实现涡流函数方法的CFD案例 1. 代码详解 这段 MATLAB 代码实现了一个二维湍流模拟&#xff0c;使用伪谱法在周期性边界条件下解算非线性涡度-流函数方程&#xff1a; M 256; % number o…

驱动开发系列14 - Wayland 详解

目录 一:概述 二:操作系统如何支持 Wayland 三:显卡驱动如何支持 Wayland 四:Wayland 协议介绍 一:概述 Wayland 是一种通信协议,规定了显示服务器与其客户端之间的通信,以及该协议的 C 语言库实现。使用 Wayland 协议的显示服务器称为 Wayland 合成器,因…

SpringBoot项目中mybatis执行sql很慢的排查改造过程(Interceptor插件、fetchSize、隐式转换等)

刚入职公司&#xff0c;就发现公司项目跑sql特别慢&#xff0c;差不多一万条数据插入到数据库要5秒以上&#xff08;没有听错&#xff0c;就是这个速度&#xff09;&#xff0c;查询修改删除也是特别慢。直到22年年底实在是受不了了&#xff0c;我就去排查了一下。 用的是Oracl…

大模型之二十八-语音识别Whisper进阶

在上一篇博客大模型之二十七-语音识别Whisper实例浅析中遗留了几个问题&#xff0c;这里来看一下前两个问题。 1.如果不是Huggingface上可以下载的数据该怎么办&#xff1f; 2.上面的代码是可以训练了&#xff0c;但是训练的时候loss真的会和我们预期一致吗&#xff1f;比如如下…

【netty系列-08】深入Netty组件底层原理和基本实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

第一个go程序

package main import "fmt" func main(){fmt.Println("Hello World") }hello.go所在目录 运行go程序

美团代付多模版三合一源码 附教程

简介 美团代付多模版三合一源码 附教程 界面

这一轮医疗数字化,沃可趣以医疗专业人员交流成长为中心

沃可趣看见医疗行业人员需求痛点&#xff0c;量身打造数字服务平台&#xff0c;促进知识分享&#xff0c;赋能活动组织。 从电子病历的普及到远程医疗的兴起&#xff0c;从人工智能辅助诊断到大数据在医疗管理中的应用&#xff0c;科技进步正在大力推动医疗领域的发展。然而&a…

Ubuntu系统本地搭建WordPress网站并一键发布内网站点至公网实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

嵌入式技术文件、学习资料、在线工具、学习网站、技术论坛,非常全面的分享~~~

一、数据手册查询及下载网站 1、【ALLDATASHEET 自称是最大的在线电子元件数据的搜索引擎】ALLDATASHEETCN.COM - 电子元件和半导体及其他半导体的数据表搜索网站。电子元件和半导体, 集成电路, 二极管, 三端双向可控硅 和其他半导体的https://www.alldatasheetcn.com/ 2、【…

defineProps、defineEmits、 defineExpose的TS写法

小满视频 1 defineProps&#xff1a;父向子传递数据 作用&#xff1a;父组件向子组件传递数据 1.1 传递纯类型参数的方式来声明 父组件中的代码&#xff1a; 父组件App.vue <template><div><span>传递给子组件的响应式数据&#xff1a;</span>&l…

【循环顺序队的实现】

1.队列的逻辑结构 与 抽象数据类型定义 先进先出的线性表 在顺序队列中&#xff0c;我们使用头指针front指向队首元素&#xff1b;用尾指针rear指向队尾元素的下一个位置&#xff08;当然这里的指针是用下标模拟出来的&#xff09; 同时顺序队列中的元素当然是用数组来存储的 …

【系统架构设计】嵌入式系统设计(1)

【系统架构设计】嵌入式系统设计&#xff08;1&#xff09; 嵌入式系统概论嵌入式系统的组成硬件嵌入式处理器总线存储器I/O 设备与接口 软件 嵌入式开发平台与调试环境交叉平台开发环境交叉编译环境调试 嵌入式网络系统嵌入式数据库管理系统实时系统与嵌入式操作系统嵌入式系统…