Spring MVC:域对象共享数据
Spring MVC
- 前言
- 域对象共享数据
- 使用 ModelAndView 向 request 域对象中共享数据
- 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
- 使用 @SesionAttributes 注解向 session 域对象中共享数据
- 使用 Servlet API 向 application 域对象中共享数据
- 附
前言
在上一章中,谈到处理器 Controller 获取请求参数的实现。那么,在处理器 Controller 处理请求后,下一步是将模型数据通过域对象共享的方式(结果会封装成模型视图 ModelAndView 对象)返回给前端控制器 DispatcherServlet 。
模型数据:Model 层中请求处理后的结果(会返回给处理器 Controller )
域对象共享数据
域对象共享数据,指在 Spring MVC 应用中,多个 Controller 或 Model 对象可以共享相同的数据。通过共享数据,可以避免重复的数据获取和数据传递,提高程序的性能和可维护性。
在 Spring MVC 中,域对象共享数据可以通过多种方式实现:
- 使用 ModelAndView 向 request 域对象中共享数据
- 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
- 使用 @SesionAttributes 注解向 session 域对象中共享数据
- 使用 Servlet API 向 application 域对象中共享数据
使用 ModelAndView 向 request 域对象中共享数据
ModelAndView 对象有 model 和 view 两个属性。model 属性用于向请求域共享数据,而 view 属性用于设置视图。
简单示例:
1.首先进行注入字符串
package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}
创建 DomObjSharedData.jsp
<%--Created by IntelliJ IDEA.User: dellDate: 2023/7/22Time: 15:04To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%>
</body>
</html>
结果如图:
2.接着进行注入对象
先创建一个实体类 DomainObject ,定义编号、名字和年龄属性 (下面例子中使用到的对象都是 DomainObject )
package cn.edu.springmvcdemo.model;public class DomainObject {private int id;private String name;private int age;public DomainObject() {super();}public DomainObject(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "DomainObject{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}
接着,对象注入
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型//2.对象注入DomainObject domainObject = new DomainObject();domainObject.setId(722);domainObject.setName("admin");domainObject.setAge(18);mav.addObject("admin",domainObject);mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}
然后,DomObjSharedData.jsp 添加获取对象的内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%><br>user = ${admin}
</body>
</html>
结果如图:
3.最后进行注入 list 集合与 map 集合
先在 pom.xml 中添加依赖
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version>
</dependency>
接着,list 集合和 map 集合注入
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型//2.对象注入DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);mav.addObject("admin",domainObject1);//3. list 集合注入DomainObject domainObject2 = new DomainObject();domainObject2.setId(723);domainObject2.setName("administrator");domainObject2.setAge(20);mav.addObject("administrator",domainObject2);List<DomainObject> domainObjects = new ArrayList<>();domainObjects.add(domainObject1);domainObjects.add(domainObject2);mav.addObject("domainObjects",domainObjects); //存入 List 类型数据//3. map 集合注入Map<Integer,DomainObject> map = new HashMap<Integer,DomainObject>();map.put(1,domainObject1);map.put(2,domainObject2);mav.addObject("map",map); //存入 Map 类型数据mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}
然后,DomObjSharedData.jsp 添加获取 list 集合和 map 集合的内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%><br>user = ${admin}<br><c:forEach var="domainObject" items="${domainObjects}">domainObjects = ${domainObject}<br>domainObject_names = ${domainObject.name}<br></c:forEach><br><c:forEach var="map" items="${map}">map = ${map}<br></c:forEach>
</body>
</html>
注:这次需要重启 JRebel 才能正常显示
结果如图:
使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据是项目开发中相对比较常用的方式。与使用 ModelAndView 相比,更简单便捷些。
简单示例:
在上面案例的基础上,只需在 DomainObjectSDDemo 类中进行修改
1.使用 Map 向 request 域对象中共享数据
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mvTest1")public String mvTest1(Map<String,Object> map){//注入字符串map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");//注入对象DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);//主要区别在于 map.put() 和 mav.addObject(),不一一演示return "DomObjSharedData"; /**对比使用 ModelAndView :ModelAndView mav = new ModelAndView();mav.setViewName("DomObjSharedData"); //设置视图return mav;**/}
}
结果如图:
2.使用 Model 向 request 域对象中共享数据
@RequestMapping("/mvTest2")
//对比使用 map 的方法参数:Map<String,Object> map
public String mvTest2(Model model){//注入字符串//对比使用 Map:map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");model.addAttribute("name","admin");//注入对象DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);//对比使用 Map:map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);model.addAttribute("admin",domainObject1);//主要区别在于 model.addAttribute()、map.put() 和 mav.addObject(),不一一演示return "DomObjSharedData"; /**对比使用 ModelAndView :ModelAndView mav = new ModelAndView();mav.setViewName("DomObjSharedData"); //设置视图return mav;**/
}
结果如图:
3.使用 ModelMap 向 request 域对象中共享数据
@RequestMapping("/mvTest3")
//而 ModelMap 将 model 和 map 综合起来了。即既可以使用 addAttribute() 也可以使用 put()
//方法参数为 ModelMap
public String mvTest3(ModelMap modelMap){modelMap.addAttribute("name","admin"); // 或者 modelMap.put("name","admin");DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);modelMap.put("admin",domainObject1); // 或者 modelMap.addAttribute("admin",domainObject1);return "DomObjSharedData";
}
结果如图:
总体来讲,向 request 域对象中共享数据的各种方式区别不大,自行根据个人喜好习惯选择使用即可。
使用 @SesionAttributes 注解向 session 域对象中共享数据
使用 @SesionAttributes 注解可以将数据共享到 session 域对象中,同时也共享到 request 域对象中。
@SesionAttributes 注解属性
- value :通过键来指定共享的值
- types :通过类型来指定共享的值
//只能用于类级别
//书写格式
@SessionAttributes(value = "xxx",types = "xxx.class")
//或者
@SessionAttributes(value = {"xxx","xxx"...},types = {"xxx.class","xxx.class"...})
简单示例:
使用 @SesionAttributes 注解向 session 域对象中共享数据
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;@SessionAttributes(value = {"name","admin"}) //或者 @SessionAttributes(types = {String.class,DomainObject.class})
@Controller
public class DomainObjectSDDemo_SA {@RequestMapping("/saTest")public String saTest(ModelMap modelMap){//字符串注入modelMap.put("name","admin");//对象注入//实体类 DomainObject ,ModelAndView 的示例中已创建DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);modelMap.put("admin", domainObject1);return "DomObjSharedData_SA";}
}
创建 DomObjSharedData_SA.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>获取 request 域中的 name : ${requestScope.name} <br>获取 session 域中的 name : ${sessionScope.name} <br>admin = ${admin}
</body>
</html>
结果如图:
使用 Servlet API 向 application 域对象中共享数据
使用 Servlet API 可以将数据共享到 application 域对象中。虽然不能同时共享到其他域对象中,但也可以使用 Servlet API 将数据共享到 session 域对象与 request 域对象中。
简单示例:
使用 Servlet API 向 application 域对象、session 域对象与 request 域对象中共享数据
package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@Controller
public class DomainObjectSDDemo_SAPI {@RequestMapping("/sapiTest")public String sapiTest(HttpSession session, HttpServletRequest request){//1.向 application 域对象共享数据ServletContext application = session.getServletContext();application.setAttribute("name", "admin1");//2.向 session 域对象共享数据session.setAttribute("name","admin2");//3.向 request 域对象共享数据request.setAttribute("name","admin3");return "DomObjSharedData_SAPI";}
}
创建 DomObjSharedData_SAPI.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>获取 application 域中的 name : ${applicationScope.name} <br>获取 session 域中的 name : ${sessionScope.name} <br>获取 request 域中的 name : ${requestScope.name}
</body>
</html>
结果如图:
附
@ModelAttribute 注解介绍
1.使用 @ModelAttribute 注解在方法上:在执行目标方法前,先从上到下逐一执行有 @ModelAttribute 注解的方法
2.使用 @ModelAttribute 注解在方法的参数上:用于从 Model 、Form 表单或者 URL 请求参数中获取属性值
通常 @ModelAttribute 注解应用在修改对象的某些属性值,而其他属性值不允许修改或保持不变的场景中
简单示例:
创建修改信息的页面 DomObjSharedData_UPDATE.jsp
<%-- 只修改年龄,id 隐藏,名字不允许修改 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h3>信息修改</h3><form action="${pageContext.request.contextPath}/updateTest" method="post"><input type="hidden" name="id" value="722" />年龄:<input type="text" name="age" /><input type="submit" value="修改"/></form>
</body>
</html>
创建成功修改跳转的页面 accessing.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h2>提交成功!</h2>
</body>
</html>
在没有使用 @ModelAttribute 注解前:不作修改的属性值可能为空,或者使用传统的方法修改实现
在 Spring MVC 中,提供的 @ModelAttribute 注解也可以实现修改
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class DomainObjectSDDemo_MA {//先执行有 @ModelAttribute 注解的方法@ModelAttribute//默认 id 参数赋值为 null ,@RequestParam 注解知识点private void getUser(@RequestParam(value = "id",required = false) Integer id, ModelMap modelMap){System.out.println("id ==" + id);DomainObject domainObject = new DomainObject();//通过传递的 id 值匹配数据库中对应的记录,返回一个对应的对象//模拟:获取 id 对应的对象属性值domainObject.setName("admin");domainObject.setAge(18);//注入( DomainObject对象,attributeName 规定写为 domainObject )modelMap.addAttribute("domainObject",domainObject); //注:attributeName 与对应的对象名字保持一致,首字母改为小写}//信息修改@RequestMapping("/update")public String update(){return "DomObjSharedData_UPDATE";}//修改成功@RequestMapping("/updateTest")public String updateTest(DomainObject domainObject){System.out.println("修改后的信息:" + domainObject);//信息修改后为:DomainObject{id=722, name='null', age=18},这里 name 为空,直接全部覆盖会把数据库的 name 信息也修改为 null//或者/*** 传统做法:* 第一步:通过传递的id值匹配数据库中对应的记录,返回一个对应的对象* 第二步:将传递的对象要修改的属性覆盖到从数据库中查询出的对象的属性里* 第三步:调用 service 层的修改方法,实现修改* 这里思想就是单一对修改的字段进行覆盖。* **///使用 @ModelAttribute 注解后,可以直接全部覆盖,省略了传统做法的第一二步,直接调用 service 层的修改方法即可return "accessing";}
}
注:在注入对象中,关于 attributeName 的命名也可以使用第二种方式。如图:
测试结果:
1.填写要修改的年龄,点击提交
2.修改成功,同时没有修改的信息保持不变,而不是为空值
相关文章:

Spring MVC:域对象共享数据
Spring MVC 前言域对象共享数据使用 ModelAndView 向 request 域对象中共享数据使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据使用 SesionAttributes 注解向 session 域对象中共享数据使用 Servlet API 向 application 域对象中共享数据 附 前言 在上一章中&…...

Vue框架--Vue中的计算属性
下面,我们来实现一个这样的需求。 实现输入框1和输入框2中文字内容的拼接。...
面试题-React(八):React如何实现插槽?
一、React插槽的概念 插槽是一种让组件变得更加灵活和可复用的技术。它允许我们在组件内部预留一些位置,然后在组件使用时填充这些位置,实现外部内容的嵌套。 二、实现React插槽的方法 在React中,实现插槽可以通过两种方式:pro…...

【前端demo】动态赋值CSS
文章目录 效果过程html实现oninput与onchange事件统一配置CSS 代码HTMLCSSJS 其他demo 效果 动态显示CSS样式,由:root统一配置。 效果预览:https://codepen.io/karshey/pen/BavLrwy 参考: Dynamic CSS Variables(codepen.io) 漫谈document…...

BlockUI专栏目录
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C-CSDN博客 简介: BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际…...
K8S获取连接token
1、创建一个具有管理员权限的账户 下载或拷贝文件到主机上,vi k8s-admin.yml --- apiVersion: v1 kind: ServiceAccount metadata:name: dashboard-adminnamespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 met…...

CountDownLatch原理-(主线程等待子线程结束再执行)
CountDownLatch是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用countDown方法时,其实使用了tryReleaseShared方法以CAS的操作来减少state,直至state为0就代表所有的线程都调用了countDown方法。当调用await方法的时候,如果state不为0࿰…...

mybatis源码学习-3-解析器模块
写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…...

解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题
recycle-view是微信小程序官方推出的一个经过优化的长列表组件,但是在使用百分比单位控制高宽时有个内容溢出问题,虽然它提供了height和width的参数可以设置宽高,但每次写列表都需要去js里获取宽高并设置是较为麻烦的,所以现在来着…...

如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点: 检测当前环境是否符合演练预设条件(演练准入); 业务流量是否满…...
在 Node.js 中使用 MongoDB 事务
MongoDB事务 事务介绍 在 MongoDB 中,对单个文档的操作是原子的。由于您可以使用嵌入的文档和数组来捕获单个文档结构中的数据之间的关系,而不是跨多个文档和集合进行规范化,因此这种单一文档的原子性消除了对多文档的需求许多实际用例的事务…...

IntelliJ IDEA的远程开发(Remote Development)
DEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发操作即可,官方给出的逻辑图如下,可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…...
网络安全-信息收集简介
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 什么是信息收集 信息收集是指通过各种方式获取所需要的信息,以便我们在后续的渗透过程更好的…...

页面页脚部分CSS分享
先看效果: CSS部分:(查看更多) <style>body {display: grid;grid-template-rows: 1fr 10rem auto;grid-template-areas: "main" "." "footer";overflow-x: hidden;background: #F5F7FA;min…...

微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽
微信小程序文档 - slots介绍 由上述文档看俩来,微信小程序官方并没有提及动态插槽内容。 uniapp文档 - slots介绍 uni官方也未提及关于动态插槽的内容 在实际使用中,直接通过 <<slot :name"item.xxx" /> 这种形式会报错ÿ…...

l8-d6 socket套接字及TCP的实现框架
一、socket套接字 /*创建套接字*/ int socket(int domain, int type, int protocol); /*绑定通信结构体*/ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); /*监听套接字*/ int listen(int sockfd, int backlog); /*处理客户端发起的连接࿰…...

ChatGPT AIGC 完成动态堆积面积图实例
先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…...

虹科产线实时数采检测方案——高速采集助力智能化升级
01 产线数采检测相关技术背景 1.1 典型场景 对于产线数采检测,让我们从典型的工厂场景开始介绍。 每个工位都有上位机监控下方的PLC控制器。指令、执行单元和作用对象的状态通过内置传感器进行采集和测量,反馈给PLC实现闭环控制。 工业4.0和智能制…...

用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI
本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\07”目录下,如下图所示: 在计算机的色彩图像中存有三个通道,即 BGR 通道,根据三个颜色通道的亮度值来显示出不同的颜色&…...

低压配电室电力安全解决方案
低压电气安全监控运维系统是力安科技基于物联网核心技术自主开发的高可靠性安全监测系统。其工作原理是利用物联网、云计算、大数据、数字传感技术及RFID无线射频识别技术来获取低压配电回路电压、电流、温度、有功、无功、功率因数等全电量的采集及配电线路的漏电、温度的实时…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
GitHub 常见高频问题与解决方案(实用手册)
1.Push 提示权限错误(Permission denied) 问题: Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因: 没有配置 SSH key 或使用了 HTTPS 而没有权限…...