24.12.26 SpringMVCDay01
SpringMVC
也被称为SpringWeb
Spring提供的Web框架,是在Servlet基础上,构建的框架
SpringMVC看成是一个特殊的Servlet,由Spring来编写的Servlet
搭建
- 引入依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency>
- web.xlm
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--配置Servlet--><servlet><servlet-name>mvcServlet</servlet-name><!--SpringMVC的核心类,请求的入口--><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--读取的配置文件路径--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:mvc1.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>mvcServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--乱码--></web-app>
- mvc配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--BeanNameUrlHandlerMapping bean对象的名字 url 和 Controller的映射关系--><!--/hello--><!--处理器,映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--适配器--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--跳转的jsp页面,统一添加前缀--><property name="prefix" value="/WEB-INF/"/><!--后缀--><property name="suffix" value=".jsp"/></bean><!--自定义的Controller,需要通过什么路径才能访问到--><bean name="/hello" class="com.javasm.demo.HelloController"/>
</beans>
- 测试Controller
public class HelloController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {//ModelAndView 视图 和页面 页面的数据,配置的是跳转到哪个页面,向这个页面传递什么参数ModelAndView mv = new ModelAndView();//跳转的页面 任何情况下,/都表示根路径///WEB-INF/ 是受保护的文件夹,默认在webapp路径下的文件,都可以直接访问,受保护的文件夹,内部文件,不能直接访问//mv.setViewName("/WEB-INF/demo/hello.jsp");mv.setViewName("demo/hello");//携带数据mv.addObject("abc","Hello Web MVC");return mv;}
}
流程
启动流程
启动Tomcat → 加载web.xml文件 → 读取servlet标签的配置 → DispatcherServlet 初始化 → 读取mvc.xml配置文件 → 解析配置文件 → 在Spring容器中实例化Controller → 其他的配置类实例化
访问流程
浏览器发起请求 → Tomcat中 → servlet-mapping 配置了/,所有的请求,都进入DispatcherServlet中 → 能获取到访问路径/hello → 寻找执行的方法 → 找到HelloController,执行方法 → 返回ModelAndView → Model的值放到request作用域,view的值,决定跳转到哪个页面
DispacherServlet内部流程
实际运用的案例
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 开启包扫描--><context:component-scan base-package="com.javasm"/><!--代替适配器等配置--><mvc:annotation-driven/><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--跳转的jsp页面,统一添加前缀--><property name="prefix" value="/WEB-INF/"/><!--后缀--><property name="suffix" value=".jsp"/></bean></beans>
//地址 和 类的映射,通过/demo访问到当前类
@Controller
@RequestMapping("/demo")
public class DemoController {//当前方法的访问路径 /demo/f1@RequestMapping("/f1")public ModelAndView f1(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("abc","f1方法");modelAndView.setViewName("demo/hello");return modelAndView;}@RequestMapping("/f2")public ModelAndView f2(){ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("abc","f2方法");//报404,没有这个页面modelAndView.setViewName("demo/f2");return modelAndView;}
}
- 404
找到了Controller,但是没有找到页面
没有找到Controller
乱码配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--配置Servlet--><servlet><servlet-name>mvcServlet</servlet-name><!--SpringMVC的核心类,请求的入口--><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--读取的配置文件路径--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:mvc2.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>mvcServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--乱码--><filter><filter-name>luan</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>luan</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
静态资源文件
<!--静态资源文件放过--><mvc:default-servlet-handler/>
接收参数
- 普通参数
<%--action="/game/doAdd1"http://localhost:8080/game/doAdd1缺少了项目名,/表示根路径,浏览器理解的根路径,是从8080/开始的action="/mvc/game/doAdd1"--%><%--当前页面的路径http://localhost:8080/mvc/game/jumpaction="game/doAdd1"http://localhost:8080/mvc/game/game/doAdd1action="doAdd1"http://localhost:8080/mvc/game/doAdd1--%><%--浏览器,点击刷新按钮,默认是重新提交表单浏览器,url地址栏,选中,按回车,是再次通过get方法,访问这个url地址浏览器url地址栏,只能发送get请求浏览器点击后退的时候,并没有刷新页面,只是读取了电脑本地的缓存--%><hr/><h1>普通参数</h1><form action="doAdd1" method="post"> 对应Controller文件下的@PostMapping("/doAdd1")<p><input type="text" name="gameId" placeholder="请输入游戏ID"/></p><p><input name="gameName" placeholder="请输入游戏名称"></p><p><input type="submit" value="提交"></p></form>
//仅可以使用post方式访问@PostMapping("/doAdd1")public ModelAndView doAdd1(Integer gameId,String gameName){System.out.println(gameId+"----"+gameName);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");//对应在webapp文件下的WEB-INF文件里创建一个game的文件再创建一个success的jsp文件mv.addObject("game",gameName);return mv;}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title></head><body><h1>成功页面</h1><h2>${game}</h2></body></html>
- 数组
<h1>数组参数</h1><form action="/mvc/game/doAdd2" method="post"><p><input type="checkbox" name="hobbys" value="smoke">抽烟</p><p><input type="checkbox" name="hobbys" value="drink">喝酒</p><p><input type="checkbox" name="hobbys" value="run">跑路</p><p><input type="submit" value="提交"></p></form>
@PostMapping("/doAdd2")public ModelAndView doAdd2(String[] hobbys){String hobbysStr = Arrays.toString(hobbys);System.out.println(hobbysStr);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",hobbysStr);return mv;}
- 对象
@PostMapping("/doAdd3")public ModelAndView doAdd3(Game game){System.out.println(game);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",game);return mv;}
- 包装类
//包装类 VO@PostMapping("/doAdd4")public ModelAndView doAdd4(GameVo game){System.out.println(game);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",game);return mv;}
@Data
public class GameVo {private Game game;private Company company;
}
- List和map
<form action="doAdd5" method="post"><p><input type="text" name="playerList[0].lv" placeholder="等级"><input type="text" name="playerList[0].nickname" placeholder="昵称"></p><p><input type="text" name="playerList[1].lv" placeholder="等级"><input type="text" name="playerList[1].nickname" placeholder="昵称"></p><p><input type="text" name="playerList[2].lv" placeholder="等级"><input type="text" name="playerList[2].nickname" placeholder="昵称"></p><p>背包</p><p><input type="text" name="items[1001]"><input type="text" name="items[1002]"><input type="text" name="items[1003]"></p><p><input type="submit" value="提交"></p></form>
@Data
public class GameVo{private Game game;private Company company;List<String> heroList;List<Player> playerList ;Map<Integer,String> items;
}@PostMapping("/doAdd5")public ModelAndView doAdd5(GameVo gameVo){System.out.println(gameVo);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",gameVo);return mv;}
- JSON字符串
引入依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.23</version></dependency>
@PostMapping("/doAdd6")public ModelAndView doAdd6(@RequestBody Game game){System.out.println(game);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",game);return mv;}
@PostMapping("/doAdd7")public ModelAndView doAdd7(@RequestBody List<Player> playerList){System.out.println(playerList);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",playerList);return mv;}@PostMapping("/doAdd8")public ModelAndView doAdd8(@RequestBody GameVo gameVo){System.out.println(gameVo);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");mv.addObject("game",gameVo);return mv;}
{"game":{"gid":1001,"name":"cogo","price":"12.2","type":{"typeName":"fps","typeId":"2000"}},"company":{"id":100,"name":"尚马"},"heroList":["天使","源氏","提莫"],"playerList":[{"lv":10,"nickname":"推车"},{"lv":22,"nickname":"泉水指挥官"}],"items":{"1001":"大宝剑","1002":"激光武器","1003":"核武器"}
}
解决乱码问题
<filter><filter-name>luan</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>luan</filter-name><url-pattern>/*</url-pattern></filter-mapping>
获取ServletAPI
//获取ServletAPI@GetMapping("/test1")public ModelAndView test1(HttpServletRequest request, HttpServletResponse response){HttpSession session = request.getSession();session.setAttribute("user","小明");ModelAndView mv = new ModelAndView();mv.setViewName("game/success");return mv;}@AutowiredHttpServletRequest request;@AutowiredHttpServletResponse response;@AutowiredHttpSession session;@GetMapping("/test2")public ModelAndView test2(){Object user = session.getAttribute("user");System.out.println(user);ModelAndView mv = new ModelAndView();mv.setViewName("game/success");return mv;}
返回值
返回String
跳转的页面地址
//单纯的页面跳转,不想传值@GetMapping("/jump")public String jump(){return "game/player";}
JSON数据
@Controller
@RequestMapping("/player")
public class PlayerController {//单纯的页面跳转,不想传值@GetMapping("/jump")public String jump(){return "game/player";}//只想返回一个字符串,不需要返回页面@ResponseBody@GetMapping("/success")public String success(){return "success";}@GetMapping("/queryById")@ResponseBodypublic Player getById(Integer id){Player player = new Player();player.setLv(id);player.setNickname("昵称-----");return player;}@ResponseBody@GetMapping("/list")public List<Player> list(){return new ArrayList<>();}
}
- 整个类都返回json,没有页面
@RestController
默认,整个类,返回的都是json数据,就不能返回页面了
转发(url地址不变)&重定向(url地址改变)
//测试转发,不能使用json数据返回@GetMapping("/test1")public String test1(){//转发return "forward:test2";}@ResponseBody@GetMapping("/test2")public String test2(){return "我是Test2";}//重定向测试也不能返回json@GetMapping("/test3")public String test3(){//重定向return "redirect:test2";}
ResonseEntity
@ResponseBody@GetMapping("/query/id")public ResponseEntity<Player> query(){Player player = new Player();player.setNickname("不知道");ResponseEntity<Player> entity = new ResponseEntity<>(player, HttpStatus.INTERNAL_SERVER_ERROR);return entity;}
携带Header
@ResponseBody@GetMapping("/query/id2")public ResponseEntity<Player> query2(){Player player = new Player();player.setNickname("不知道");//new header对象HttpHeaders httpHeaders = new HttpHeaders();//header中添加自定义属性httpHeaders.add("javasm","Hello Java ");ResponseEntity<Player> entity = new ResponseEntity<>(player,httpHeaders, HttpStatus.INTERNAL_SERVER_ERROR);return entity;}
简化
@ResponseBody@GetMapping("/query3")public ResponseEntity<String> query3(){//默认状态 200return ResponseEntity.ok("Success!!!!!!!!!!!!!!!");}
@ResponseBody@GetMapping("/query4")public ResponseEntity<String> query4(){return ResponseEntity.status(500).body("Success??????");}
Rest风格
@RestController= @ResponseBody+@Controller
@RestController
@RequestMapping("/company")
public class CompanyController {//不能接收特殊字符,接收简单的参数@GetMapping("/query/{id}/{name}")public Company queryById(@PathVariable("id") Integer cid,@PathVariable String name){Company company = new Company();company.setId(cid);company.setName(name);return company;}@GetMapping(value = {"/query2","/query2/{id}"})public Company query2(@PathVariable(required = false) Integer id){Company company = new Company();company.setId(id);return company;}
}
相关文章:

24.12.26 SpringMVCDay01
SpringMVC 也被称为SpringWeb Spring提供的Web框架,是在Servlet基础上,构建的框架 SpringMVC看成是一个特殊的Servlet,由Spring来编写的Servlet 搭建 引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc<…...

一分钟快速了解Ecovadis认证等级划分
Ecovadis认证等级划分,作为评估企业社会责任表现的重要标尺,其细致而严谨的体系为全球范围内的企业提供了一个可量化的衡量标准。这一认证等级不仅彰显了企业在环境保护、劳工权益、商业道德以及可持续发展等方面的努力与成就,更是企业向国际…...

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务
科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设,成为了人类社会数字化迁徙的助推剂,让新三大件之间的耦合越来越紧密。从物理世界到数字世…...
【网络云计算】2024第52周-每日【2024/12/26】小测-理论实操-备份MySQL数据库并发送邮件-解析
文章目录 1. 编写备份脚本2. 设置定时任务3. 注意事项 【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析 为了实现您提出的Discuz数据库备份任务,包括备份脚本、定时任务、备份成功邮件确认、脚本运行时长、备份后的…...

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)
设备逻辑的概念: 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转:组…...

Level DB --- MemTable
MemTable是Level DB中重要的组件,它主要处理Level DB内存级别的增删查改。 基本数据结构 基础的存储数据结构如图1所示,这是一个存储单元的结构。其中1是internal key size,这里面包括两部分,一部分我们Level DB存储key-value中…...

【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32
《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准(试行)》(长财行[2022]25号)于2022年8月1日开始试行,此标准由长治市财政局、长治市行政审批管理局编制,是对信息化建设项目预算管理的基本要求,主要适用…...
海格通信嵌入式面试题及参考答案
计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合…...

前端学习DAY27(盒子模型内边距)
内边距(padding),指的是盒子的内容区与盒子边框之间的距离 一共有四个方向的内边距, 可以通过: padding-top padding-right padding-bottom padding-left <!DOCTYPE html> <html lang"en"> <head><meta charset"U…...

基于cobra开发的k8s命令行管理工具k8s-manager
基于cobra开发的k8s命令行管理工具k8s-manager 如果觉得好用,麻烦给个Star!通用配置1 node 分析所有node的资源情况2 analysis 分析Node节点上的资源使用构成3 image 获取指定namespace的所有镜像地址4 resource 获取指定namespace的所有limit 与 Requests大小5 top…...
scala基础学习(数据类型)-数组
文章目录 数组 Array创建数组直接定义fillofDimtabulate range打印数组toSeqdeepforeach(println) length获取长度indexOf 获取元素索引获取元素/修改元素遍历数组数组内元素转换filter 过滤found 查找元素数组折叠 foldLeft切片拼接排序拷贝copyclone 数组 Array Array是一个…...

uniapp 微信小程序 页面部分截图实现
uniapp 微信小程序 页面部分截图实现 原理都是将页面元素画成canvas 然后将canvas转化为图片,问题是我页面里边本来就有一个canvas,ucharts图画的canvas我无法画出这块。 想了一晚上,既然canvas最后能转化为图片,那我直接…...

C语言从入门到放弃教程
C语言从入门到放弃 1. 介绍1.1 特点1.2 历史与发展1.3 应用领域 2. 安装2.1 编译器安装2.2 编辑器安装 3. 第一个程序1. 包含头文件2. 主函数定义3. 打印语句4. 返回值 4. 基础语法4.1 注释4.1.1 单行注释4.1.2 多行注释 4.2 关键字4.2.1 C语言标准4.2.2 C89/C90关键字…...

直流无刷电机驱动原理3-驱动板硬件设计
六步换向原理 检测转子角度,知道什么时候是60度,什么时候应该换向。 逆时针旋转 三相逆变器,mos管,半桥驱动电路。 PWM调制 不对称半桥调制例程使用第(2)种。对上桥臂PWM调制,下桥臂全部导通。这时候由上桥臂的PWM的占空比决定电机的旋转速度。驱动器电路硬件框图--实…...

攻防世界web第三题file_include
<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>惯例: 代码审查: 1.可以看到include(“./check.php”);猜测是同级目录下有一个check.php文…...
Trivy Operator命令使用说明
你已成功安装了 Trivy Operator,以下是命令的使用说明: 1. 查看 VulnerabilityReports VulnerabilityReports 是 Trivy Operator 生成的漏洞扫描报告,用于检查容器镜像中的漏洞。 kubectl get vulnerabilityreports --all-namespaces -o wi…...
Lazada商品评论API接口:深度解析与应用实践
在电商领域,用户评论是了解产品市场表现和消费者反馈的重要渠道。Lazada作为东南亚领先的电商平台,提供了商品评论API接口,允许第三方开发者获取平台上商品的评论信息。本文将深入解析Lazada商品评论API接口的重要性、开发应用、以及如何通过…...

2024最新鸿蒙开发面试题合集(二)-HarmonyOS NEXT Release(API 12 Release)
上一篇面试题链接:https://mp.csdn.net/mp_blog/creation/editor/144685078 1. 鸿蒙简单介绍和发展历程 HarmonyOS 是新一代的智能终端操作系统,为不同设备的智能化、互联与协同提供了统一的语言。带来简洁,流畅,连续࿰…...

macrodroid通过http请求控制手机运行宏
macrodroid adb命令 adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS例:http请求手机播放指定MP3文件 声音素材_电量过低提醒 新建一个宏 添加触发器-连接-http服务器请求 路径随意填,最好不要有特殊符号,不然浏览器识别链接会出错,…...

【Unity3D】Jobs、Burst并行计算裁剪Texture3D物体
版本:Unity2019.4.0f1 PackageManager下载Burst插件(1.2.3版本) 利用如下代码,生成一个Texture3D资源,它只能脚本生成,是一个32*32*32的立方体,导出路径记得改下,不然报错。 using UnityEditor; using Uni…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...