Edgar后端学习--复现一个热乎的json、ajax、重定向相关的bug以及引起的一些思考

华为OD机试真题 2026.11.4. 新系统 【河流水系流量评估】 华为OD机试真题 新系统【河流水系流量评估】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【河流水系流量评估】多语言题解。 阅读详情

躺了很长时间,起来也不想学习。好久也咩更新了,开了音响,开干!

接上回jsp小项目,现在进程多是业务上的逻辑的设计。前端就是DOM元素的增加、修改,用一用模态框之类的。纯原生代码,注解还是热乎的(带着当时的感叹),没去总结。。
下面主要是我近期项目的前端做法,触发函数,函数包一个ajax然后返回的result再去解析。

这块先跳过,看完bug再回来看!!!!直接看复现bug标题

解析变成前端的过程总结:
1.首先你得有一个基础位置,比如说在一个既定好的table里面加动态显示表格,你就得先id找到他(具体是什么什么选择器,(css选择器??)) 然后找到各种元素,比如说输入框,
这块输入框你可以之前写在既定位置,也可以后来再绑到表格上。。。说远了。说上前端了。。(随便粘点,体会一下)

 $.ajax({
                url:"${path}/back/admin/getModuleWithOne",
                // json 数据从后端拿出来???
                // 后端没取到这个id  没有通过this传过来  11.5  后来又尼玛传过来了 真是神奇
                data:"id="+$(this).attr("id"),
                type:"post",
                dataType:"JSON",
                success:function (result) {
                    buildModual(result);
                }
            });
            // 模态框按钮触发
            $('#bt1').click();
        });
        function buildModual(result){
            var table=$("#table tbody");
            table.empty();
            var admin=result.admin;
            var roles=result.roles;
            var inputAdmin=$("#inputAdmin");
            var inputaid=$("#inputaid1");
            inputAdmin.val(admin.name);
            inputaid.val(admin.id);
            buildModule(result);
        }
        function buildModule(result){
            var admin=result.admin;
            var roles=result.roles;
            var table=$("#table");
            $.each(roles,function (index,role) {
                if(admin.role.id==role.id){
                    var input=$("<input type='radio' checked name='rid'></input>");
                    input.attr("value",role.id);
                }else{
                    var input=$("<input type='radio'  name='rid' value=role.id></input>");
                    input.attr("value",role.id);
                }
                var tr=$("<tr></tr>");
                var inputtd=$("<td></td>");

刚看了一下,上篇文章是上个阶段的开发日志的梳理,并没有发现json、ajax的踪影,所以这篇文章来梳理下最近学到技术。。。

复现bug–ing

大概描述一下业务场景:
1.用户实现基本注册,基本信息填写完毕后,选择一个管理权限就好了。
2.然后注册完毕后,用户直接跳转到用户管理展示页面就好了。
用到技术:
整体:jsp的MVC框架
前端:表格提交(这块用的不是sublimet类型,就是一个按钮类型)按钮 绑定一个js函数,函数里写一个ajax请求。重点在 success这块:因为平时就是这么在前端Debug,所以先预留了一个弹窗(后面其实还有一个小bug在这里想说。。)

	function add(){
		   $.ajax({
	        url:"${path}/back/admin/addadmin",
	        data:$("#form").serialize(),
			type:"post",
			dataType:"JSON",
			success:function (result) {
			// 后端验证结果
			aletr(result.successed)
	}
});
 <form id="form">
 .....
 <span class="spmess">  <input type="button" value="确认" onclick="add()"></span>
 </form>

后端部分–主要在控制层

dao层就不说了,dao层和service因为可以模块测试,我一般就自己写一个主函数先试一试
dao和service层经验分享
举个例子

 public boolean addroleWithaid(int addid,int rid){
        String sql1="INSERT INTO admin_role VALUES(?,?);";
        try {
            PreparedStatement preparedStatement=connection.prepareStatement(sql1);
            preparedStatement.setInt(1,addid);
            preparedStatement.setInt(2,rid);
            preparedStatement.execute();
       .....
    }
    public static void main(String[] args) {
        // 11.9 测试
//        roledao roledao=new roledao();
//        roledao.addroleWithaid(16,4);
    }
}

控制层了————高潮来了

因为我知道业务逻辑里面要求转到新的页面,所以想都没想直接在后端加了一个重定向。
那么好戏开始!!
看这个代码,乍一看,一点毛病没有吧。json也封装好了,json封装好,这样ajax就有回传了吧。而且我这不也放在打印流里面了,,怎么前端迟迟不弹窗??
最早我想的是:是不是我有段时间没写重定向了,写错了??路径问题,打印看了下??没问题啊??

后来去找老师问下,我们解决的步骤基本是这样的:

1.首先说前端那么写他看的很别扭,他准备加sublime来提交,发现我没在form里面定义action: 后来把ajax的url填到action里面,仍然不跳转。。。(但是页面有抖动了)(思路:先还一个初级做法)–(他直接说后端没问题??我也不知道为啥这么说)

2.后来他又说:删打印流,还是没动静(杨师傅又陷入沉思。。。)(不过这时候已经很靠近答案了) 3.在说出正确答案之前,我们讨论下业务与技术,他说你不就想实现一个跳转嘛,那为啥用ajax发送请求呢?

**

引一波ajax使用场景问题:

我们都知道我们使用ajax主要解决异步加载问题,但是深入思考其实就是,我们还要这个页面留着看呢,但是我这个业务事注册提交之后事跳转到新的页面,所以完全没有必要,为了使用ajax使用啊!!!
**
3.最后,终于想明白了冲突问题(我归结为冲突问题–)
ajax的回传 我们用打印流回传,但其实还是绑定response(或者与response平级)(我猜的)给到前端。
然后底下你来个重定向(他确实是绑在response上吧),java一下子懵了,我TM到底去哪里???

						String text="注册成功,马上跳转";
                        jsonObject.put("successed",text);
                        writer.print(jsonObject);
                        String  urltest=request.getContextPath()+"/back/userManager.jsp";
                        System.out.println("1111:: "+urltest);
                       response.sendRedirect(urltest); 

4.最后的解决方案,我当时忘了ajax自己就可以做重定向啊!!
加一句不就完了吗??但是不思考这个过程,就不会发现这快其实真没有必要加ajax吧。。。

 success:function (result) {
		console.log(result.successed)
		window.location="userManager.jsp"
		}

第二个bug–json对象在控制层最好分开

还是控制层出现的bug(说回来jsp写到这个时候,服务层和dao层真的不应该出bug了。)
当时就,我为了代码的简洁,就把json对象写在外面了。 基本上是下面这样,把service层、json对象、回传流都放在外面了,出现的现象也是死活不显示json。。。
后来大龙哥指导,把json都拿到if里面去,真就好了(不是不能这么用,但是有大概率会出问题)(我写前两个业务是没有问题的,后面到第三个出问题了。。)(暂时不清楚原因,大概理解成json一根管子你不要塞太多不同类型,不然到前端解析的时候,json看太复杂就罢工了)

  // 过滤url  进行下一步选择功能模块
        String url1=request.getRequestURI();
        String url2=url1.substring(url1.lastIndexOf("/")+1,url1.length());
        adminService adminService=new adminService();
        roleService roleService=new roleService();
        JSONObject jsonObject=new JSONObject();
        PrintWriter writer=response.getWriter();
        // 用户管理--整体展示
        if ("getall".equals(url2)){
         }
        //  json  11.5  json不同业务还不能放一个json  前端会不响应的
        if("getModuleWithOne".equals(url2)){
       
        }
        //  添加用户
        if("addadmin".equals(url2)){
                }
            }else{
                // 不合法
                // 11.9 等待 加入正则表达包
            }
        }

第三个问题 还是ajax问题

ajax问题的话,我遇到的问题大概现在有这么几种
1.第一种最基础的就是 jar包没打到服务器上,导致解析不出来 所以前端会显示根本不支持你这个方法。
2.第二种就是,后端代码有问题,导致的不回传,所以ajax会一直等待。。。。(包括你不把json放到ajax里面)

还有一种测试方法要分享,直接上url这种。现在我已经没法复现bug了。
隐约记得,前端控制台只是报错–内容只是服务器拒绝服务,这时候你可以这样,直接别用ajax去打这个url ,一步就去直接上ajax里面的url,我记得这种报错信息会很明显。

json后续还要多了解,但是本质上就是一种编码格式,一种集合而已。

好好好,边听歌边码字,让我有想写bug了,不说,打码!

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析 本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。 阅读详情

相关推荐

VMware vSphere运维管理手册

ESXi 7.0 引入了一种系统存储布局,可对大型模块和第三方组件进行灵活的分区管理和支持,同时简化了调试操作。ESXi 7.0 系统存储更改在 ESXi 7.0 之前,分区大小固定不变,除 /scratch 分区和可选 VMFS 数据存储之外,且分区号是静态的,这些限制了分区管理。在 ESXi 7.0 中,分区整合为更少且更大的可扩展分区,具体取决于所使用的引导介质及其容量。ESXi 7.0 系统存储布局包含四个分区:分区适用情况类型系统引导存储引导加载程序和 EFI 模块。FAT16。

Avenjan优快云博客 3623

字符串匹配

牛牛有两个字符串A和B,其中A串是一个01串,B串中除了可能有0和1,还可能有'?',B中的'?'可以确定为0或者1。 寻找一个字符串T是否在字符串S中出现的过程,称为字符串匹配。牛牛现在考虑所有可能的字符串B,有多少种可以在字符串A中完成匹配。 例如:A = "00010001", B = "??" 字符串B可能的字符串是"00","01","10","11",只有"11"没有出现在字符串A...

changke的博客 510

CTF——流量分析题型整理总结

我见过的流量分析类型的题目总结: 一,ping 报文信息 (icmp协议) 二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载) 三,sql注入攻击 四,访问特定的加密解密网站(md5,base64) 五,后台扫描+弱密码爆破+菜刀 六,usb流量分析 七,WiFi无线密码破解 八,根据一组流量包了解黑客的具体行为 例题: 一,ping 报文信息 (icm...

小锤队长的博客 5万+

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 218

华为OD面试手撕真题 【合并相邻且相等的元素】多语言题解

华为OD面试高频手撕真题【合并相邻且相等的元素】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 545

【YOLOv13多模态融合改进】| CFT:跨模态融合Transformer | 利用Transformer的自注意力机制,解决跨模态融合中的长距离依赖和全局信息整合问题

本文记录的是利用 CFT 模块改进 YOLOv13 的多模态目标检测网络模型。的设计出发点在于解决传统多模态检测中跨模态特征融合不充分的问题,即当不同模态数据需协同检测时,基于CNN的方法因局部卷积的局限性,难以捕捉长距离依赖和全局模态间的互补信息,导致复杂光照、遮挡等场景下检测精度不足。本文利用模块,将多模态特征序列拼接后自动学习模态内与模态间的交互权重,在特征提取阶段整合全局上下文信息,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。Cross-Modality Fus

Limiiiing的博客 538

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 148

linux内核学习(一)---内核社区介绍及补丁提交

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制 本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交

文艺小少年的博客 536

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 327

10、现代统计方法:趋势面分析、薄板样条与广义线性模型

本文系统介绍了空间预测建模中的三种现代统计方法:趋势面分析(TSA)、薄板样条(TPS)和广义线性模型(GLM)。详细阐述了每种方法的原理、实现步骤、参数优化与预测评估,并结合R语言代码示例展示了在实际数据中的应用。文章还提供了方法对比流程图与土壤湿度预测案例,帮助读者根据数据特征选择合适模型,提升空间预测的准确性与可靠性。

play7的博客 156

RK3568笔记十七:LVGL v8.2移植

若该文为原创文章,转载请注明原文出处。本文介绍嵌入式图形库移植到Linux开发板ATK-RK3568上的步骤。

4229

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 191

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7208

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 114

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 102

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 623

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 393

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 369

java框架大全

java框架大全

qq_39326137的博客 182

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 334

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 294

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 316

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 315

Agent 状态栏在上下文中的具体位置

Agent状态栏以user角色消息形式追加至上下文末尾,而非修改system消息,避免破坏KVCache。此举仅为API技术实现,内容由框架自动生成,非真实用户输入,通过<agent_status>标签标识,确保模型获取最新状态且不影响缓存。该设计遵循“动态信息追加、静态信息固定”原则,实现高效、低延迟的状态传递。

lj1109053360的专栏 68

Spring事务和事务传播机制

3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别.p1事务可以认为是⽗事务, 嵌套事务是⼦事务. ⽗事务出现异常, ⼦事务也会回滚, ⼦事务出现异常, 如果不进⾏处理, 也会导致⽗事务回滚.

txxzjmzlh的博客 202
上一篇: Edgar后端学习--jsp电商后台项目小阶段总结(杂记开发日志)
下一篇: 当我们聊JavaWeb的时候,我们聊些什么
EdgarSpring
博客等级 码龄7年 15粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值