【网络编程】Servlet的前后端练习 | 表白墙 | 前后端交互 | 提交消息 | 获取消息

2024-05-13 10:28

本文主要是介绍【网络编程】Servlet的前后端练习 | 表白墙 | 前后端交互 | 提交消息 | 获取消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、Servlet的前后端练习
      • 1.表白墙
            • 服务器要实现的逻辑:
            • 1.获取消息 :
            • 2.提交消息:
            • 完整前端代码:
            • 完整后端代码:


一、Servlet的前后端练习

1.表白墙

在这里插入图片描述

服务器要实现的逻辑:

1.页面加载时,网页要从服务器这里获取到当前表白的数据。(让网页端给服务器发起http请求,服务器返回响应里就带着这些数据)

2.点击提交的时候,网页把用户输入的信息,发送到服务器这边,服务器负责保存

服务器要给页面提供两个http的接口:

1.获取消息 :

​ 网页加载的时候,给服务器发起一个ajax请求

	请求:GET/message响应:HTTP/1.1 200 OKContent-Type:application/json[{from:'张三',to:'李四',message:'我喜欢你'},{from:'A',to:'B',message:'我不喜欢你'}		]

1.客户端先发起一个ajax请求

    //直接在script中写的代码会在页面加载时被执行//发起get请求,从服务器获取数据$.ajax({type : 'get',url:'message',//get请求不需要body,也就不需要contentType和datasuccess:function(body){//处理服务器返回的响应数据(json格式的数组)}})

2.服务器收到这个请求,处理请求并进行响应

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setStatus(200);resp.setContentType("application/json;charset-utf8");//setStatus和setContentType必须在getWriter之前。//jackson本身支持把list类型的数据,转换成json数组String respJson = objectMapper.writeValueAsString(messageList);resp.getWriter().write(respJson);}

3.客户端收到响应,针对响应数据进行解析处理,把响应的信息构造成页面元素(html片段),并显示出来

        success:function(body){//处理服务器返回的响应数据(json格式的数组)//响应中,header带有content-Type:application/json。jquery就会自动把json字符串解析成json对象//如果没有带content-Type:application/json.就需要通过js代码:JSON.parse()方法来手动把json字符串转成json对象let container = document.querySelector('.container')for(let i=0;i<body.length;i++){//body返回的是一个数组,此时message就是获取到的一个json对象let message = body[i]//根据message信息构造html片段let div = document.createElement('div');div.className = 'div1';div.innerHTML = message.from+"对"+message.to+"说"+message.message;container.appendChild(div);}}
2.提交消息:

​ 用户点击提交的时候,ajax给服务器发起一个请求。目的是为了把用户输入的内容,发送到服务器

	请求:POST/messageContent-Type:application/json{from:'张三',to:'李四',message:'我喜欢你'}响应:HTTP/1.1 200 OK

1.ajax给服务器发送请求

        let body = { "from":from,"to":to,"message":message }//body是一个js对象,需要转换成json字符串let jsonString = JSON.stringify(body);//4.把用户填写的内容,发送给服务器,让服务器来保存$.ajax({type:'post',url:'message',contentType:'application/json;charset=utf8',data:jsonString,success:function(body){//收到响应之后要执行的代码}})
  • 前端ajax的url路径,不需要/,后端进行处理时,要带上 /

2.服务器读取请求,并计算出响应

class Message {public String from;public String to;public String message;@Overridepublic String toString() {return "Message{" +"from='" + from + '\'' +", to='" + to + '\'' +", message='" + message + '\'' +'}';}
}@WebServlet("/message")
//要和发送的请求路径一致
public class MessageServlet extends HttpServlet {private ObjectMapper objectMapper = new ObjectMapper();private List<Message> messageList = new ArrayList<>();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Message message = objectMapper.readValue(req.getInputStream(), Message.class);//1.读取数据System.out.println("请求中的数据" + message);//2.进行保存messageList.add(message);//3.返回响应resp.setStatus(200);resp.getWriter().write("ok");}

3.前端代码,处理服务器的响应。

            success:function(responseBody){//success回调函数,不是立即执行的,而是在浏览器返回成功的响应后,才会执行//此处的body是响应中body的内容console.log("responseBody:"+responseBody)}
完整前端代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 引入jquery --><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head><body><div class="container"><h1>表白墙</h1><p>请输入相关信息,点击提交数据会显示在表格中</p><div class="div1"><span>谁:</span><input  type="text" class="edit"></div><div class="div1"><span>对谁:</span><input type="text" class="edit"></div><div class="div1"><span>说:</span><input type="text" class="edit"></div><div class="div1"><input type="button" value="提交" class="submit" onclick="Submit()"></div></div>
</body>
<style>*{margin: 0px;padding: 0px;}.container{width: 400px;margin:  auto;}h1{text-align: center;margin-bottom: 40px;}p{text-align: center;color: gray;line-height: 60px;}.div1{display: flex;justify-content: center;align-items: center;}.edit{margin-bottom: 20px;width: 200px;height: 30px;}span{width: 50px;margin-bottom: 20px;}.submit{background-color: goldenrod;color: white;width: 260px;height: 30px;border: none;border-radius: 5px;}.submit:active{background-color: gray;}</style>
<script>function Submit(){let edits = document.querySelectorAll('.edit')console.dir(edits)let from = edits[0].valuelet to =edits[1].valuelet message = edits[2].valueif(from==''||to==""||message==''){return}// 1.获取三个输入框的值console.log(from+""+to+''+message)let div = document.createElement('div')//2.构造divdiv.className='div1'div.innerHTML=from+"对"+to+"说"+messageconsole.log(div)let container = document.querySelector('.container')container.appendChild(div)//3.清空文本框for(let input of edits){input.value=''}let requestBody = { "from":from,"to":to,"message":message }//body是一个js对象,需要转换成json字符串let jsonString = JSON.stringify(requestBody);//(这个body是发送请求的body)//4.把用户填写的内容,发送给服务器,让服务器来保存$.ajax({type:'post',url:'message',contentType:'application/json;charset=utf8',data:jsonString,success:function(responseBody){//success回调函数,不是立即执行的,而是在浏览器返回成功的响应后,才会执行//此处的body是响应中body的内容console.log("responseBody:"+responseBody)}})}//直接在script中写的代码会在页面加载时被执行//发起get请求,从服务器获取数据$.ajax({type : 'get',url:'message',//get请求不需要body,也就不需要contentType和datasuccess:function(body){//处理服务器返回的响应数据(json格式的数组)//响应中,header带有content-Type:application/json。jquery就会自动把json字符串解析成json对象//如果没有带content-Type:application/json.就需要通过js代码:JSON.parse()方法来手动把json字符串转成json对象let container = document.querySelector('.container')for(let i=0;i<body.length;i++){//body返回的是一个数组,此时message就是获取到的一个json对象let message = body[i]//根据message信息构造html片段let div = document.createElement('div');div.className = 'div1';div.innerHTML = message.from+"对"+message.to+"说"+message.message;container.appendChild(div);}}})
</script></html>

完整后端代码:
import com.fasterxml.jackson.databind.ObjectMapper;
import sun.net.httpserver.HttpServerImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** Created with IntelliJ IDEA.* Description:* User: Lenovo* Author: Weng-Jiaming* Date: 2024-05-10* Time: 15:56*/class Message {public String from;public String to;public String message;@Overridepublic String toString() {return "Message{" +"from='" + from + '\'' +", to='" + to + '\'' +", message='" + message + '\'' +'}';}
}@WebServlet("/message")
//要和发送的请求路径一致
public class MessageServlet extends HttpServlet {private ObjectMapper objectMapper = new ObjectMapper();private List<Message> messageList = new ArrayList<>();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Message message = objectMapper.readValue(req.getInputStream(), Message.class);//1.读取数据System.out.println("请求中的数据" + message);//2.进行保存messageList.add(message);//3.返回响应resp.setStatus(200);resp.getWriter().write("ok");
//        resp.setContentType("application/json");
//        resp.getWriter().write("{ok:true}");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setStatus(200);resp.setContentType("application/json;charset=utf8");//setStatus和setContentType必须在getWriter之前。//jackson本身支持把list类型的数据,转换成json数组String respJson = objectMapper.writeValueAsString(messageList);resp.getWriter().write(respJson);}
}

点击移步博客主页,欢迎光临~

偷cyk的图

这篇关于【网络编程】Servlet的前后端练习 | 表白墙 | 前后端交互 | 提交消息 | 获取消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985435

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow