【Servlet学习四】实现一个内存版本的表白墙~

news2024/11/24 19:40:15

目录

一、前端代码

二、后端代码实现

🌈1、全局类定义AppVar

🌈2、实体类定义Message

🌈3、获取所有信息:getMessageServlet实现前后端的交互

🌈4、添加数据:addMessageServlet,实现前后端交互

三、效果演示


目标:

        将输入内容放在内存里面存储,用List存储对象,这个对象有三个属性,表白人,被表白人,内容。这里我们除了关注后端代码的实现之外,也重点关注一下前端代码中函数的写法,后面我们在写数据库版本的表白墙时,重点就在后端部分了,前端直接使用已经写好的文件就行。

一、前端代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
    <!--引入jquery-->
    <script src="jquery.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .container {
            width: 400px;
            margin: 0 auto;
        }

        h1 {
            text-align: center;
            padding: 20px 0;
        }

        p {
            color: #666;
            text-align: center;
            font-size: 14px;
            padding: 10px 0;
        }

        .row {
            height: 40px;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        span {
            width: 100px;
            line-height: 40px;
        }

        .edit {
            width: 200px;
            height: 30px;
        }

        .submit {
            width: 304px;
            height: 40px;
            color: white;
            background-color: orange;
            border: none;
        }

        .submit:active {
            background-color: #666;
        }
    </style>
    <script src="jquery.min.js"></script>
</head>

<body>
<div id="container" class="container">
    <h1>表白墙</h1>
    <p>输入后点击提交, 会将信息显示在下方</p>
    <div class="row">
        <span>谁: </span>
        <input id="from" class="edit" type="text">
    </div>
    <div class="row">
        <span>对谁: </span>
        <input id="to" class="edit" type="text">
    </div>
    <div class="row">
        <span>说什么: </span>
        <input id="message" class="edit" type="text">
    </div>
    <div class="row">
        <input type="button" value="提交" class="submit"
               onclick="addmsg()">
    </div>
    <div id="allMsg">
        <div class = "row">

        </div>
    </div>
</div>
<script>
        // --------------------查询所有表白信息---------------------------
        function initList(){
        //1、ajax的格式:要有下面4部分
            jQuery.ajax({
                url:"getAllMessage",
                type:"GET",
                data:{ },
                success:function(res){
                //2、showHtml表示下面控件中要展示的信息
                var showHtml = "";
                    //如果返回成功且数据长度不为0,就获取集合中的数据
                    if(res.code == 200 && res.data.length > 0){
                        //有数据
                        //获取res中的data数据,每一个data是一个对象,里面有三个属性,遍历将对象取出来
                        for(var i = 0;i < res.data.length;i++){
                            var messageObject = res.data[i];
                            //将三个属性拼接到下方-------------
                            showHtml += '<div class = "row">';
                            showHtml += messageObject.username +'对' + messageObject.toUser +'说了'+messageObject.msg;
                            showHtml += '</div>';
                        }
                    }else{
                        //否则直接在空间中给出提示
                        showHtml = '<div class="row"><h3>暂无表白数据!</h3></div>';
                    }
                    //3、将要展示的信息showHtml添加在控件中
                    jQuery("#allMsg").html(showHtml);
                }
            });
        }
        initList();


        // 添加数据
        function addmsg(){
            //1、得到输入控件:jQuery通过HTML元素的id属性获取指定的元素
            var from = jQuery("#from");
            var to = jQuery("#to");
            var message = jQuery("#message");
            //2、非空校验
            if(from.val().trim() == ""){
                alert("抱歉,请输入表白人姓名!");
                from.focus();//聚焦光标
                return false;
            }
            if(to.val().trim() == ""){
                alert("抱歉,请输入被表白人姓名!");
                to.focus();//聚焦光标
                return false;
            }
            if(message.val().trim() == ""){
                alert("抱歉,请输入表白内容!");
                from.focus();//聚焦光标
                return false;
            }
            //3、将结果提交给后端
            jQuery.ajax({
                url:"addmsg",
                type:"POST",
                data:{
                    "username":from.val(),
                    "touser":to.val(),
                    "msg":message.val()
                },
                success:function(res){
                    if(res.code == 200 && res.data == 1){
                        alert("恭喜,表白成功!");
                        //4、将新加入的表白信息提交到页面中
                        //刷新当前页面
                        location.href = location.href;
                    }else{
                        alert("抱歉,表白失败"+res.msg);
                    }
                }
            });
        }
        </script>
</body>

</html>

二、后端代码实现

🌈1、全局类定义AppVar

public class AppVar {
    //存储所有的表白数据
    public static List<Message> MESSAGE_LIST = new ArrayList<Message>();
    //定义OBJECT_MAPPER
    public static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
}

🌈2、实体类定义Message

public class Message {
    private String username;
    private String toUser;
    private String msg;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getToUser() {
        return toUser;
    }

    public void setToUser(String toUser) {
        this.toUser = toUser;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

🌈3、获取所有信息:getMessageServlet实现前后端的交互

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.HashMap;

/**
 * 获取所有的表白信息
 */
@WebServlet("/getAllMessage")
public class getMessageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、定义编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("application/json;charset=utf-8");
        //2、获取所有的表白数据,转化为json格式
//        String jsonStr = AppVar.OBJECT_MAPPER.writeValueAsString(AppVar.MESSAGE_LIST);//jsonStr相当于只有下面的data
        //放在map中返回
        HashMap<String,Object> map = new HashMap<String, Object>();
        map.put("code",200);
        map.put("msg","");
        map.put("data",AppVar.MESSAGE_LIST);
        //3、将结果返回
        String jsonStr = AppVar.OBJECT_MAPPER.writeValueAsString(map);
        resp.getWriter().write(jsonStr);
    }
}

🌈4、添加数据:addMessageServlet,实现前后端交互

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.HashMap;

@WebServlet("/addmsg")
public class addMessageServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、设置编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("application/json;charset=utf-8");
        //2、获取表白数据:三个属性
        String username = req.getParameter("username");
        String touser = req.getParameter("touser");
        String msg = req.getParameter("msg");
        //3、判空
        HashMap<String,Object> map = new HashMap<String, Object>();
        //数据有问题
        if(username == null || username.equals("")||
            touser == null || touser.equals("") ||
                msg == null || msg.equals("")
        ){
            //设置返回数据类型格式:3个
            map.put("code",-1);
            map.put("msg","非法参数");
            map.put("data","");
        }else{
            //数据正常,将属性设置到message对象中
            Message message = new Message();
            message.setUsername(username);
            message.setToUser(touser);
            message.setMsg(msg);
            //将message对象存储到集合中
            AppVar.MESSAGE_LIST.add(message);
            //设置返回数据格式:3个
            map.put("code",200);
            map.put("msg","");
            map.put("data",1);
        }
        //4、返回数据
        String jsonStr = AppVar.OBJECT_MAPPER.writeValueAsString(map);
        resp.getWriter().write(jsonStr);
    }
}

三、效果演示

(1)运行代码,获取网页地链接,在谷歌浏览器打开页面如下:

 (2)输入空白内容,点击提交,给出警示信息

 (3)输入正确信息,点击提交


 坚持~

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

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

相关文章

notepad++去除换行符和空格

在notepad中按Ctrlh 1.去除换行符 输入如图所示的查找内容为\r\n&#xff0c;【替换为】不填写&#xff0c;勾选底部的【正则表达式】&#xff0c;然后点击【全部替换】 2. 按照逗号换行 输入如图所示的查找内容为,&#xff0c;【替换为】\r\n&#xff0c;勾选底部的【正则…

C# WinForm 选择打开文件和保存文件

做 winform 项目的时候正好遇到了记录一下&#xff1a; 打开文件 我们使用 OpenFileDialog 控件来打开文件选择框&#xff1a; 通过 Title 属性可以设置选择框的标题而 Filter 属性可以设置选中的文件类型&#xff0c;这个属性由两个部分组成 SVG files (*.svg)|*.svg &am…

九、云尚办公系统-管理端-审批管理

云尚办公系统&#xff1a;管理端-审批管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;…

Unity导出到AS中真机测试apk没有问题,aab提交到GooglePlay审核通过,但是从Google Play下载的应用闪退问题

从Google Play下载的应用报错如下&#xff1a; backtrace: #00 pc 0x0000000000050748 /data/app/~~x94h_Fmdoj4Vj1NVQcL7sQ/com.id.hhhuhi-LpC7BJqILn3X29R8TffhuA/split_config.arm64_v8a.apk!libpairipcore.so (ExecuteProgram196) 06-26 20:39:40.526 13936 13936 F l…

基于Java+Vue前后端分离宠物领养系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

ML@集成学习@摘要

文章目录 集成学习refs摘要Note准确性和多样性 集成学习方法分类BoostingAdaBoost伪代码Adaboost小结 补充补充1补充2 BaggingBagging伪代码 特点算法效率直接应用于多分类 自助采样和包外估计随机森林 Stackingsklearn中的Stacking&#x1f388;构造初级学习器构造次级学习器 …

Ubuntu18.04 系统设置修改物理内存-迅为RK3568开发板

打开虚拟机&#xff0c;如下图。单击红色框中的“虚拟机”。如下图所示&#xff1a; 然后点击“设置”弹出虚拟机的设置界面&#xff0c;如下图所示&#xff1a; 更多教程B站搜&#xff1a;迅为3568开发板

RHEL8.2安装QEMU及KVM虚拟化

一、环境 操作系统&#xff1a;CentOS8.2CPU&#xff1a;4C内存&#xff1a;16G磁盘&#xff1a;250G&#xff0c;其中180G分配给/data&#xff0c;用于存储数据及kvm存储池。 二、安装步骤 dnf module install virt dnf install virt-install virt-viewer virt-manager -y三…

【Redis二】Redis优化之持久化

Redis优化之持久化 1.Redis高可用2.Redis持久化2.1 RDB 持久化2.1.1 触发条件2.1.2 执行流程2.1.3 启动时加载 2.2 AOF 持久化2.2.1 开启AOF2.2.2 执行流程2.2.3 文件重写触发方式2.2.4 文件重写的流程2.2.5 启动时加载 2.3 RDB和AOF的优缺点2.4 RDB AOF持久化的区别 3.Redis性…

如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?

文章目录 背景k8s的内部服务如何被外部访问东西流量南北流量流量管理的比较 IngressAPI GatewayIstio参考 背景 这三者都和流量治理密切相关&#xff0c;那么流量治理在过去和现在有什么区别呢&#xff1f;都是如何做的呢&#xff1f; 在学习istio的时候对流量管理加深了理解。…

学编程c++有什么好处?有什么作用?

C是一种跨平台、高效且广泛应用的编程语言&#xff0c;具有许多优势和应用领域。本文将深入探讨学习C编程的好处&#xff0c;包括跨平台性、高效性、对系统资源的控制能力以及面向对象编程的优势。此外&#xff0c;我们还将介绍C在不同领域的应用&#xff0c;如桌面应用程序、嵌…

记录好项目D17

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个SpringBoot网上商城 一、系统介绍 前台功能 商品分类查询&#xff…

【微服务架构】微服务安全 - 如何保护您的微服务基础架构?

在当今行业使用各种软件架构和应用程序的市场中&#xff0c;几乎不可能感觉到您的数据是完全安全的。因此&#xff0c;在使用微服务架构构建应用程序时&#xff0c;安全问题变得更加重要&#xff0c;因为各个服务相互之间以及客户端之间进行通信。因此&#xff0c;在这篇关于微…

STM32F407实现NEC协议红外线解码

【1】NEC红外线协议介绍 NEC红外线协议是一种常用的红外线通信协议&#xff0c;广泛应用于消费电子产品中&#xff0c;如电视、DVD播放器、空调遥控器等。该协议定义了红外线通信的物理层和数据链路层规范&#xff0c;以实现可靠的红外线数据传输。 下面是NEC红外线协议的详细…

Linux下用who命令查看当前登录用户

文章目录 1 查看当前登录用户&#xff08;w 和 who&#xff09;2 who命令查看某一时刻登录的用户3 查看当前登录用户的账户名&#xff08;whoami&#xff09;4 关于linux下who指令的总结介绍 1 查看当前登录用户&#xff08;w 和 who&#xff09; w命令可以查看某一时刻登录该…

《深入浅出SSD:固态存储核心技术、原理与实战》----学习记录(二)

第2章 SSD主控和全闪存阵列 SSD主要由两大模块构成——主控和闪存介质。其实除了上述两大模块外&#xff0c;可选的还有缓存单元。主控是SSD的大脑&#xff0c;承担着指挥、运算和协调的作用&#xff0c;具体表现在&#xff1a;一是实现标准主机接口与主机通信&#xff1b;二…

短视频seo矩阵+抖音小程序SaaS源码开发部署

短视频seo矩阵开发者综述 短视频seo主要基于抖音短视频平台&#xff0c;为企业实现多账号管理&#xff0c;视频分发&#xff0c;视频批量剪辑&#xff0c;抖音小程序搭建&#xff0c;企业私域转化等&#xff0c;本文主要介绍短视频矩阵系统抖音小程序开发详细及注意事项 抖音小…

VC++6.0实现MFC单文档模拟交通灯

要求&#xff1a; 模拟交通灯&#xff1a; &#xff08;1&#xff09;建立一个单文档应用项目&#xff08;项目名称为学生姓名拼音首字母缩写&#xff09;。 &#xff08;2&#xff09;修改它的图标和版本信息。 &#xff08;3&#xff09;为该应用项目添加两个按钮到工具…

uniapp如何使用canvas绘制海报,自适应屏幕尺寸,并且下载本地?

组件目录 /share-canvas.vue <template><u-popup :show"visiable" closeable close"hiddenCanvas" zIndex"999999"><view class"shareModel" touchstart"" touchmove"" touchend"">…

【机器学习】主成分分析实现案例 (PCA)

一、说明 这篇文章的目的是提供主成分分析&#xff08;PCA&#xff09;的完整和简化的解释。我们将逐步介绍它是如何工作的&#xff0c;这样每个人都可以理解并使用它&#xff0c;即使是那些没有强大数学背景的人。 PCA是网络上广泛覆盖的机器学习方法&#xff0c;并且有一些关…