SpringWeb

SpringWeb

之前javaEE开发中,web层使用的原生的Servlet, 弊端: 类中只提供doGet/doPost方法, 接收参数很麻烦 ,响应数据也很麻烦(java对象转为json格式)

spring中的web模块就可以解决以上存在的问题

SpringWEB 组件

前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在web.xml 中配置。作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求.处理器映射器:HandlerMapping(不需要程序员开发),由框架提供。作用:根据请求的 url 查找 Handler(处理器/Controller)处理器适配器:HandlerAdapter(不需要程序员开发),由框架提供。作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。处理器:Handler(也称之为 Controller,需要工程师开发)。注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可以去正确执行 Handler。作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

搭建 SpringWeb

导包

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version></dependency>

配置 DispatcherServlet

在 web.xml 文件中配置 DispatcherServlet配置 spring 核心请求分发器<servlet><servlet-name>application</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><!-- 请求映射 --><servlet-mapping><servlet-name>application</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

开启 SpringWEB 注解

开启 springweb 注解<mvc:annotation-driven></mvc:annotation-driven>

接收请求

@RequestMapping@RequestMapping 是一个用来为处理器地址映射的注解,可用于类或方法上.作用在类上,在整个项目中不能重复,作用在方法上,整个类中不能重复.常用属性 path,value,method.path 和 value 用来定义地址method 用来定义请求方式@RequestMapping(value = "/hello",method = RequestMethod.GET)@RequestMapping(path= "/hello",method = RequestMethod.POST)

获取请求数据

Spring WEB 支持对多种类型的请求参数进行封装 自定义的处理器 @RestController 为web层类添加的注解标签 @RequestMapping 为类和方法配置映射访问地址,类地址在项目中不能重复 */ @RestController @RequestMapping(path = "/api/loginCtl") public class LoginController { @Autowired private LoginService loginService; /* @RequestMapping(path = "/login")为方法定义地址时,可以指定请求方式 @RequestMapping(path = "/login",method = RequestMethod.POST)意味着只能通过post方法获取请求 也可以通过@PostMapping(path = "/login") @GetMapping(path = "/login") 这两种方式,去直接对访问方式进行限制 */ /* 接收方式1:使用HttpServletRequest对象接收请求中的数据 @PostMapping(path = "/login") public String login(HttpServletRequest request){ System.out.println(request.getParameter("name")); System.out.println(request.getHeader("token")); System.out.println(request.getRemoteAddr()); return "success"; } */ /*方式2:通过定义参数名的方式接收请求中的数据 @PostMapping(path = "/login") public String login(String account,String password,@RequestHeader("token") String token) { System.out.println(account); System.out.println(password); System.out.println(token); return "success"; } */ //方式3:当请求中的参数名与形参不一样时,我们利用注解的方式将请求中的参数与形参进行绑定 /* @PostMapping(path = "/login") public String login(@RequestParam("user-accout") String account, @RequestParam("user-password") String password, @RequestHeader("user-token") String token) { System.out.println(account); System.out.println(password); System.out.println(token); return "success"; } */ /*方式4:后端接收前端提交的json格式的数据: 1.项目中需要添加json转换的组件 2.在对象前添加@RequestBody的注解 */ @PostMapping(path = "/login") public Result login(@RequestBody Admin admin){ Result result = new Result(200,"登陆成功",admin); System.out.println("yes"); return result; } @GetMapping(path = "/test") public String test(){ System.out.println("test"); return "success"; }

拦截器

Spring WEB 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。Spring 中的拦截器与过滤器有着本质的区别,过滤器是 servlet 规范中定义并实现的,在进入到 servlet 之前截获请求.而拦截器是 spring 中定义的一种拦截机制,是对进入到处理器的请求进行拦截.SpringWEB 定义了拦截器接口 HandlerInterceptorboolean preHandle预处理方法,实现处理器方法的预处理,就是在处理器方法执行之前这个方法会被执行,相当于拦截了处理器方法,框架会传递请求和响应对象给该方法,第三个参数为被拦截的处理器。如果 preHandle 方法返回 true 表示继续流程(如调用下一个拦截器或处理器方法),返回 false 表示流程中断,不会继续调用其他的拦截器或处理器方法,此时我们需要通过 response 来产生响应;

拦截器实现

编写一个类,继承 HandlerInterceptorAdapterpublic class DemoInterceptor implements HandlerInterceptor{/*当请求到达控制器之前被执行true--继续向下执行,到达下一个拦截器,或控制器false--不会继续向下执行*/public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler)throws Exception {System.out.println("之前执行");return false;}

注册拦截器

<!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/><!-- 配置所有请求进入到此拦截器 --> <mvc:exclude-mapping path="/api/loginCtl/login"/><!-- 配置不进入拦截器的地址 --> <bean></bean><!-- 配置拦截器的实现类 --> </mvc:interceptor> </mvc:interceptors>

拦截器具体实现

发送post请求

由于定义过 <mvc:exclude-mapping path="/api/loginCtl/login"/><!-- 配置不进入拦截器的地址 -->,则该请求不会进入拦截器

因此后端会接收到:

同理在发送Get请求给“test”地址时,则会出现

Read more

从理论到实践:Cosserat杆理论如何重塑柔性机器人设计思维

从理论到实践:Cosserat杆理论如何重塑柔性机器人设计思维 在机器人技术飞速发展的今天,传统刚性机器人在复杂环境中的局限性日益凸显。医疗微创手术和工业精密操作等领域对机器人的灵活性、适应性和精确性提出了更高要求。柔性机器人作为一种新兴解决方案,正逐渐改变我们对机器人设计的认知。而Cosserat杆理论这一经典力学框架的重新诠释,为柔性机器人设计带来了革命性的思维转变。 Cosserat理论最初由法国科学家Eugène和François Cosserat于20世纪初提出,原本用于描述具有微观结构的连续介质力学行为。这一理论独特之处在于它不仅考虑物体的平移变形,还独立描述旋转自由度,这使得它特别适合模拟那些需要同时考虑弯曲、扭转和拉伸的复杂结构。在柔性机器人领域,这一理论框架为工程师提供了前所未有的建模精度和设计灵活性。 1. Cosserat理论的核心突破与柔性机器人的契合点 传统机器人设计基于刚性连杆假设,使用Denavit-Hartenberg参数等方法来描述运动学。这种方法在结构化环境中表现优异,但当面对人体内部或复杂工业环境时,刚性假设就显得力不从心。Cossera

Pi0模型微调入门教程:基于LoRA在自有机器人数据上进行动作策略适配

Pi0模型微调入门教程:基于LoRA在自有机器人数据上进行动作策略适配 重要提示:本文介绍的Pi0模型微调方法主要适用于研究和开发环境,在实际机器人部署前请充分测试验证安全性。 1. 教程概述 1.1 学习目标 本教程将带你从零开始,学习如何使用LoRA(Low-Rank Adaptation)技术对Pi0机器人控制模型进行微调。学完本教程后,你将能够: * 理解Pi0模型的基本架构和微调原理 * 准备自己的机器人数据集并处理成合适格式 * 使用LoRA方法高效微调Pi0模型 * 评估微调后的模型性能并部署使用 1.2 前置知识要求 为了更好理解本教程,建议具备以下基础知识: * Python编程基础(能看懂简单代码) * 了解机器学习基本概念(训练、验证、测试) * 有过PyTorch或类似框架的使用经验更佳 * 对机器人控制有基本了解(非必须,但有帮助) 1.3 为什么选择LoRA微调 LoRA是一种参数高效的微调方法,相比全参数微调有三大优势: 1. 训练速度快:只需要训练少量参数,大大缩短训练时间 2. 内存占用少:可以在消费级GPU

MediaPipe与ROS集成:机器人动作交互系统部署教程

MediaPipe与ROS集成:机器人动作交互系统部署教程 1. 引言 1.1 学习目标 本文将带你从零开始,构建一个基于 MediaPipe 的人体骨骼关键点检测系统,并将其与 ROS(Robot Operating System) 集成,实现机器人对人体动作的实时感知与响应。最终你将掌握: * 如何部署本地化、高精度的人体姿态估计服务 * 如何通过 WebUI 实现可视化交互 * 如何将关键点数据接入 ROS 系统 * 如何设计简单的动作映射逻辑驱动机器人行为 本教程适用于机器人控制、人机交互、智能硬件开发等场景,特别适合希望在边缘设备上实现低延迟动作识别的开发者。 1.2 前置知识 建议具备以下基础: - Python 编程能力 - 基础 Linux 操作命令 - ROS 基本概念(Node、Topic、Message) -

OpenVLA-OFT+ 在真实世界 ALOHA 机器人任务中的应用

相关文件 评估 * experiments/robot/aloha/:ALOHA 训练和评估文件 * run_aloha_eval.py:ALOHA 评估脚本(客户端;见下文 “服务器端”) * aloha_utils.py:ALOHA 评估工具 * 从原始 ALOHA GitHub 仓库 复制的其他 ALOHA 机器人环境文件: * constants.py * real_env.py * robot_utils.py * experiments/robot/:通用评估工具文件 * openvla_utils.py:OpenVLA 特定的评估工具 * robot_utils.py:其他评估工具 * vla-scripts/deploy.