spring -MVC-02
SpringMVC-11 - 响应
在 SpringMVC 中,响应是服务器对客户端请求的反馈,它可以以多种形式呈现,包括视图名称、ModelAndView 对象、JSON 数据以及重定向等。以下是对 SpringMVC 中不同响应类型的详细介绍:
1. 视图名称
通过返回视图名称,SpringMVC 会将请求转发到对应的视图资源进行渲染。视图资源可以是 JSP、Thymeleaf 模板、FreeMarker 模板等。
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC");
return "home"; // 返回视图名称
}
在上述示例中,home方法返回一个字符串home,SpringMVC 会根据配置的视图解析器,将该字符串解析为实际的视图资源(例如/WEB-INF/views/home.jsp),并将模型数据(message)传递给视图进行渲染。最终,渲染后的视图将作为响应返回给客户端。
视图解析器配置
视图解析器负责将逻辑视图名称解析为实际的视图资源。常见的视图解析器有InternalResourceViewResolver、ThymeleafViewResolver等。
InternalResourceViewResolver
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
ThymeleafViewResolver
@Bean
public ViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine);
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver);
return engine;
}
@Bean
public TemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
2. ModelAndView
ModelAndView对象包含了模型数据和视图信息,通过返回ModelAndView,可以在一个对象中同时指定模型数据和要渲染的视图。
@RequestMapping("/products")
public ModelAndView listProducts() {
ModelAndView mav = new ModelAndView("products/list");
mav.addObject("products", productService.getAllProducts());
return mav;
}
在上述示例中,listProducts方法创建了一个ModelAndView对象,指定了视图名称为products/list,并添加了一个名为products的模型数据,该数据包含了所有产品的列表。SpringMVC 会根据视图名称解析视图资源,并将模型数据传递给视图进行渲染。
使用 ModelAndView 的优势
灵活性高:可以在一个对象中同时处理模型数据和视图逻辑。
方便传递复杂数据结构:适合传递多个模型数据或复杂的对象。
3. JSON 响应
在现代 Web 应用中,JSON 是一种常用的数据交换格式。
SpringMVC 提供了对 JSON 响应的支持,通过使用@RestController注解或@ResponseBody注解,可以将方法的返回值直接转换为 JSON 格式并返回给客户端。
@RestController
@RequestMapping("/api/products")
public class ProductRestController {
@GetMapping
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
}
在上述示例中,ProductRestController类使用了@RestController注解,该注解等价于@Controller和@ResponseBody的组合。因此,getAllProducts方法的返回值会被自动转换为 JSON 格式并返回给客户端。
JSON 序列化与反序列化
SpringMVC 使用 Jackson 库来进行 JSON 的序列化和反序列化。Jackson 会自动将 对象转换为 JSON 字符串,并在需要时将 JSON 字符串转换回 对象。
配置 JSON 序列化选项
可以通过配置 Jackson 的ObjectMapper来定制 JSON 的序列化行为,例如:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
// 配置序列化选项
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 不序列化null值
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略未知属性
converter.setObjectMapper(mapper);
converters.add(converter);
}
}
4. 重定向
重定向是指服务器返回一个 HTTP 状态码 302(或其他重定向状态码),并在响应头中指定一个新的 URL,客户端会根据这个新的 URL 再次发送请求。
@RequestMapping("/save")
public String saveProduct(@ModelAttribute Product product) {
productService.save(product);
return "redirect:/products";
}
在上述示例中,saveProduct方法在保存产品后,返回一个redirect:/products的字符串,SpringMVC 会将其解析为重定向指令,客户端会被重定向到/products路径。
重定向的作用
防止表单重复提交:用户刷新页面时不会再次提交表单。
引导用户到新的页面:例如注册成功后重定向到登录页面。
重定向传递参数
可以使用RedirectAttributes来在重定向过程中传递参数:
@RequestMapping("/save")
public String saveProduct(@ModelAttribute Product product, RedirectAttributes attrs) {
productService.save(product);
attrs.addFlashAttribute("message", "产品保存成功");
return "redirect:/products";
}
在上述示例中,addFlashAttribute方法添加了一个临时属性message,这个属性只会在重定向后的下一次请求中有效。
总结
SpringMVC 提供了多种响应类型,包括视图名称、ModelAndView、JSON 响应和重定向。开发者可以根据具体需求选择合适的响应方式,以实现灵活、高效的 Web 应用开发。
视图名称:适用于传统的页面渲染场景,通过视图解析器将逻辑视图名映射到实际视图资源。
ModelAndView:提供了更灵活的方式来处理模型数据和视图逻辑,适合传递多个模型数据或复杂对象。
JSON 响应:用于返回 JSON 格式的数据,适用于前后端分离的架构,通过 Jackson 库进行 JSON 的序列化和反序列化。
重定向:用于引导用户到新的页面,防止表单重复提交,可通过RedirectAttributes传递临时参数。
SpringMVC-12-REST 风格简介
REST (Representational State Transfer) 是一种软件架构风格,它使用 HTTP 协议的标准方法 (GET、POST、PUT、DELETE) 来操作资源。
REST 的主要特点:
资源导向:每个 URL 代表一种资源
使用标准 HTTP 方法:GET (获取)、POST (创建)、PUT (更新)、DELETE (删除)
无状态:每个请求都是独立的,不依赖于之前的请求
统一接口:所有资源都通过统一的接口进行操作
SpringMVC-13-RESTful 入门案例
下面是一个简单的 RESTful API 示例:
@RestController
@RequestMapping("/api/products")
public class ProductRestController {
@Autowired
private ProductService productService;
// 获取所有产品
@GetMapping
public List<Product> getAll() {
return productService.getAll();
}
// 获取单个产品
@GetMapping("/{id}")
public Product getById(@PathVariable Long id) {
return productService.getById(id);
}
// 创建产品
@PostMapping
public Product create(@RequestBody Product product) {
return productService.save(product);
}
// 更新产品
@PutMapping("/{id}")
public Product update(@PathVariable Long id, @RequestBody Product product) {
return productService.update(id, product);
}
// 删除产品
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
productService.delete(id);
}
}
SpringMVC-14-RESTful 快速开发
可以使用 Spring Data JPA 和 Spring HATEOAS 来加速 RESTful API 的开发。
添加依赖:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
创建实体和 Repository:
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
// getters and setters....
}
public interface ProductRepository extends JpaRepository<Product, Long> {}
创建资源控制器:
@RestController
@RequestMapping("/api/products")
public class ProductController {
private final ProductRepository repository;
private final EntityLinks entityLinks;
@Autowired
public ProductController(ProductRepository repository, EntityLinks entityLinks) {
this.repository = repository;
this.entityLinks = entityLinks;
}
@GetMapping
public Resources<Resource<Product>> getAll() {
List<Resource<Product>> products = repository.findAll().stream()
.map(product -> new Resource<>(product,
linkTo(methodOn(ProductController.class).getOne(product.getId())).withSelfRel(),
linkTo(methodOn(ProductController.class).getAll()).withRel("products")))
.collect(Collectors.toList());
return new Resources<>(products,
linkTo(methodOn(ProductController.class).getAll()).withSelfRel());
}
@GetMapping("/{id}")
public Resource<Product> getOne(@PathVariable Long id) {
Product product = repository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + id));
return new Resource<>(product,
linkTo(methodOn(ProductController.class).getOne(id)).withSelfRel(),
linkTo(methodOn(ProductController.class).getAll()).withRel("products"));
}
}
SpringMVC-15 - 案例:基于 RESTful 页面数据交互 (后台接口开发)
假设我们要开发一个简单的产品管理系统,下面是后台接口的实现:
@RestController
@RequestMapping("/api/products")
public class ProductApiController {
@Autowired
private ProductService productService;
@GetMapping
public Page<ProductDTO> listProducts(
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size) {
return productService.getProducts(page, size);
}
@PostMapping
public ResponseEntity<ProductDTO> createProduct
(@RequestBody ProductDTO productDTO) {
ProductDTO createdProduct = productService.createProduct(productDTO);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(createdProduct.getId())
.toUri();
return ResponseEntity.created(location).body(createdProduct);
}
@GetMapping("/{id}")
public ResponseEntity<ProductDTO> getProduct(@PathVariable Long id) {
ProductDTO productDTO = productService.getProduct(id);
return ResponseEntity.ok(productDTO);
}
@PutMapping("/{id}")
public ResponseEntity<ProductDTO> updateProduct(@PathVariable Long id, @RequestBody ProductDTO productDTO) {
ProductDTO updatedProduct = productService.updateProduct(id, productDTO);
return ResponseEntity.ok(updatedProduct);
}
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteProduct(@PathVariable Long id) {
productService.deleteProduct(id);
return ResponseEntity.noContent().build();
}
}
SpringMVC-16 - 案例:基于 RESTful 页面数据交互 (页面访问处理)
下面是一个使用 Thymeleaf 模板引擎的前端页面示例:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Product Management</title>
<script src="https://cdn.tailwindcss.com">
</script>
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
</head>
<body class="bg-gray-100">
<div class="container mx-auto px-4 py-8">
<h1 class="text-3xl font-bold mb-6">Product Management</h1>
<div class="mb-6">
<button id="addProductBtn" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
<i class="fa fa-plus"></i> Add Product
</button>
</div>
<div class="bg-white rounded-lg shadow-md p-6 mb-6">
<table class="min-w-full">
<thead>
<tr class="bg-gray-200 text-gray-600 uppercase text-sm leading-normal">
<th class="py-3 px-6 text-left">ID</th>
<th class="py-3 px-6 text-left">Name</th>
<th class="py-3 px-6 text-left">Price</th>
<th class="py-3 px-6 text-left">Actions</th>
</tr>
</thead>
<tbody id="productsTableBody" class="text-gray-600 text-sm font-light">
<!-- Products will be loaded here via Script -->
</tbody>
</table>
</div>
<!-- Pagination -->
<div id="pagination" class="flex items-center justify-between bg-white rounded-lg shadow-md p-6">
<!-- Pagination controls will be loaded here via Script -->
</div>
<!-- Add/Edit Modal -->
<div id="productModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden">
<div class="bg-white rounded-lg shadow-xl w-full max-w-md p-6">
<h2 id="modalTitle" class="text-2xl font-bold mb-4">Add Product</h2>
<form id="productForm">
<input type="hidden" id="productId">
<div class="mb-4">
<label for="productName" class="block text-gray-700 font-bold mb-2">Name:</label>
<input type="text" id="productName" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" required>
</div>
<div class="mb-4">
<label for="productPrice" class="block text-gray-700 font-bold mb-2">Price:</label>
<input type="number" id="productPrice" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" step="0.01" required>
</div>
<div class="flex justify-end">
<button type="button" id="cancelBtn" class="mr-2 px-4 py-2 bg-gray-200 hover:bg-gray-300 rounded">Cancel</button>
<button type="submit" class="px-4 py-2 bg-blue-500 hover:bg-blue-700 text-white rounded">Save</button>
</div>
</form>
</div>
</div>
</div>
<script>
// Script code for handling API calls and UI interactions
document.addEventListener('DOMContentLoaded', function() {
// Load products on page load
loadProducts(0);
// Add product button click
document.getElementById('addProductBtn').addEventListener('click', function() {
document.getElementById('modalTitle').textContent = 'Add Product';
document.getElementById('productId').value = '';
document.getElementById('productName').value = '';
document.getElementById('productPrice').value = '';
document.getElementById('productModal').classList.remove('hidden');
});
// Cancel button click
document.getElementById('cancelBtn').addEventListener('click', function() {
document.getElementById('productModal').classList.add('hidden');
});
// Product form submission
document.getElementById('productForm').addEventListener('submit', function(e) {
e.preventDefault();
const productId = document.getElementById('productId').value;
const productName = document.getElementById('productName').value;
const productPrice = document.getElementById('productPrice').value;
const productData = {
name: productName,
price: parseFloat(productPrice)
};
if (productId) {
// Update existing product
fetch(`/api/products/${productId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(productData)
})
.then(response => response.json())
.then(() => {
document.getElementById('productModal').classList.add('hidden');
loadProducts(currentPage);
})
.catch(error => console.error('Error:', error));
} else {
// Create new product
fetch('/api/products', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(productData)
})
.then(response => response.json())
.then(() => {
document.getElementById('productModal').classList.add('hidden');
loadProducts(0);
})
.catch(error => console.error('Error:', error));
}
});
});
let currentPage = 0;
function loadProducts(page) {
currentPage = page;
fetch(`/api/products?page=${page}`)
.then(response => response.json())
.then(data => {
const productsTableBody = document.getElementById('productsTableBody');
productsTableBody.innerHTML = '';
data.content.forEach(product => {
const row = document.createElement('tr');
row.className = 'border-b border-gray-200 hover:bg-gray-100';
row.innerHTML = `
<td class="py-3 px-6">${product.id}</td>
<td class="py-3 px-6">${product.name}</td>
<td class="py-3 px-6">$${product.price.toFixed(2)}</td>
<td class="py-3 px-6">
<button οnclick="editProduct(${product.id})" class="text-blue-500 hover:text-blue-700 mr-2">
<i class="fa fa-pencil"></i>
</button>
<button οnclick="deleteProduct(${product.id})" class="text-red-500 hover:text-red-700">
<i class="fa fa-trash"></i>
</button>
</td>
`;
productsTableBody.appendChild(row);
});
// Update pagination
updatePagination(data);
})
.catch(error => console.error('Error:', error));
}
function editProduct(id) {
fetch(`/api/products/${id}`)
.then(response => response.json())
.then(product => {
document.getElementById('modalTitle').textContent = 'Edit Product';
document.getElementById('productId').value = product.id;
document.getElementById('productName').value = product.name;
document.getElementById('productPrice').value = product.price;
document.getElementById('productModal').classList.remove('hidden');
})
.catch(error => console.error('Error:', error));
}
function deleteProduct(id) {
if (confirm('Are you sure you want to delete this product?')) {
fetch(`/api/products/${id}`, {
method: 'DELETE'
})
.then(() => {
loadProducts(currentPage);
})
.catch(error => console.error('Error:', error));
}
}
function updatePagination(data) {
const pagination = document.getElementById('pagination');
pagination.innerHTML = '';
const prevButton = document.createElement('button');
prevButton.className = 'px-4 py-2 bg-gray-200 hover:bg-gray-300 rounded';
prevButton.disabled = !data.first;
prevButton.innerHTML = '<i class="fa fa-chevron-left"></i> Previous';
prevButton.onclick = () => loadProducts(currentPage - 1);
pagination.appendChild(prevButton);
const pageInfo = document.createElement('span');
pageInfo.className = 'px-4';
pageInfo.textContent = `Page ${data.number + 1} of ${data.totalPages}`;
pagination.appendChild(pageInfo);
const nextButton = document.createElement('button');
nextButton.className = 'px-4 py-2 bg-gray-200 hover:bg-gray-300 rounded';
nextButton.disabled = !data.last;
nextButton.innerHTML = 'Next <i class="fa fa-chevron-right"></i>';
nextButton.onclick = () => loadProducts(currentPage + 1);
pagination.appendChild(nextButton);
}
</script>
</body>
</html>
相关文章:
spring -MVC-02
SpringMVC-11 - 响应 在 SpringMVC 中,响应是服务器对客户端请求的反馈,它可以以多种形式呈现,包括视图名称、ModelAndView 对象、JSON 数据以及重定向等。以下是对 SpringMVC 中不同响应类型的详细介绍: 1. 视图名称 通过返回…...

深入解析 React 的 useEffect:从入门到实战
文章目录 前言一、为什么需要 useEffect?核心作用: 二、useEffect 的基础用法1. 基本语法2. 依赖项数组的作用 三、依赖项数组演示1. 空数组 []:2.无依赖项(空)3.有依赖项 四、清理副作用函数实战案例演示1. 清除定时器…...

通过Ollama读取模型
通过Ollama读取模型 前言一、查看本地Ollama上有哪些模型二、调用bge-m3模型1、调用模型2、使用bge-m3进行相似度比较 三、调用大模型 前言 手动下载和加载大模型通常需要复杂的环境配置,而使用Ollama可以避免这一问题。本文将介绍如何调用Ollama上的模型。 一、查…...
C#控制流
🧩 一、控制流概述 C# 中的控制流语句用于根据条件或循环执行代码块。它们是程序逻辑的核心部分。 ✅ 二、1. if、else if、else int score 85;if (score > 90) {Console.WriteLine("优秀"); } else if (score > 60) {Console.WriteLine("及…...

永久免费,特殊版本!
随着大家审美的不断提升,无论是社交平台的日常分享还是特定场景的图像展示,人们对图像质量的要求都日益严苛。为了呈现更完美的视觉效果,许多小伙伴都会对原始图像进行精细化的后期处理,其中复杂背景抠图、光影调整、色彩校正等专…...

Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争
AI 目前是一个巨大的市场,每个人都想从中分一杯羹。 即使是 Canva,这个以拖放图形设计而闻名的流行设计平台,也在其 Canva Create 2025 活动中发布了自己版本的代码生成器,加入了 AI 竞赛。 但为什么一个以设计为先的平台会提供代码生成工具呢? 乍看之下,这似乎有些不…...

Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)
1.简介 本文介绍了一种名为Matrix-Game的交互式世界基础模型,专门用于可控的游戏世界生成。 Matrix-Game通过一个两阶段的训练流程来实现:首先进行大规模无标签预训练以理解环境,然后进行动作标记训练以生成交互式视频。为此,研…...

MySQL 5.7在CentOS 7.9系统下的安装(下)——给MySQL设置密码
新下载下来的MySQL,由于没有root密码,(1)所以如果我们希望登陆mysql,得给mysql的root账户设置密码,或者另一方面来说,(2)未来如果你忘记root密码了,也能通过这…...

机器学习笔记2
5 TfidfVectorizer TF-IDF文本特征词的重要程度特征提取 (1) 算法 词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性 逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度 (2) API sklearn.feature_extraction.text.TfidfVector…...
AgentCPM-GUI,清华联合面壁智能开源的端侧GUI智能体模型
AgentCPM-GUI是什么 AgentCPM-GUI 是由清华大学与面壁智能团队联合开发的一款开源端侧图形用户界面(GUI)代理,专为中文应用进行优化。基于 MiniCPM-V 模型(80 亿参数),该系统能够接收智能手机的屏幕截图&a…...
Go语言实现链式调用
在 Go 语言中实现链式调用(Method Chaining),可以通过让每个方法返回对象本身(或对象的指针)来实现。这样每次方法调用后可以继续调用其他方法。 示例:实现字符串的链式操作 假设你想对一个字符串连续执行…...

重排序模型解读 mxbai-rerank-base-v2 强大的重排序模型
mxbai-rerank-base-v2 强大的重排序模型 模型介绍benchmark综合评价安装 模型介绍 mxbai-rerank-base-v2 是 Mixedbread 提供的一个强大的重排序模型,旨在提高搜索相关性。该模型支持多语言,特别是在英语和中文方面表现出色。它还支持代码和 SQL 排序&a…...

期望是什么:(无数次的均值,结合概率)21/6=3.5
https://seeing-theory.brown.edu/basic-probability/cn.html 期望是什么:(无数次的均值,结合概率)21/6=3.5 一、期望(数学概念) 在概率论和统计学中,**期望(Expectation)**是一个核心概念,用于描述随机变量的长期平均取值,反映随机变量取值的集中趋势。 (一…...

uniapp-vue3项目中引入高德地图的天气展示
前言: uniapp-vue3项目中引入高德地图的天气展示 效果: 操作步骤: 1、页面上用定义我们的 当前天气信息:<view></view> 2、引入我们的map文件 <script setup>import amapFile from ../../libs/amap-wx.js …...
容器化-k8s-介绍及下载安装教程
一、K8s 概念 官网地址: https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/ 1、含义 Kubernetes 是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。它可以将多个容器组合成一个逻辑单元,实现对容器的集中管理和调度,从而简化复杂应用的部…...

lc42接雨水
1.原题 42. 接雨水 - 力扣(LeetCode) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 2.题目解析 这一题是经常被考到的一道算法题,其中最简单最好用的方法就是双指…...

通义千问-langchain使用构建(三)
目录 序言docker 部署xinference1WSL环境docker安装2拉取镜像运行容器3使用的界面 本地跑chatchat1rag踩坑2使用的界面2.1配置个前置条件然后对话2.2rag对话 结论 序言 在前两天的基础上,将xinference调整为wsl环境,docker部署。 然后langchain chatcha…...
uniapp自动构建pages.json的vite插件
对于 uniapp 来说,配置 pages.json 无疑是最繁琐的事情,具有以下缺点: 冗长,页面很多时 pages 内容会很长难找,有时候因为内容很长,导致页面配置比较难找,而且看起来比较凌乱json弊端ÿ…...

系统漏洞扫描服务:维护网络安全的关键与服务原理?
系统漏洞扫描服务是维护网络安全的关键措施,能够迅速发现系统中的潜在风险,有效预防可能的风险和损失。面对网络攻击手段的日益复杂化,这一服务的重要性日益显著。 服务原理 系统漏洞扫描服务犹如一名恪尽职守的安全守护者。它运用各类扫描…...
nlf loss 学习笔记
目录 数据集: 3d 投影到2d 继续求loss reconstruct_absolute 1. 功能概述 2. 参数详解 3. 两种重建模式对比 数据集: agora3 | 5264/5264 [00:00<00:00, 143146.78it/s] behave 37736/37736 [00:00<00:00, 76669.67it/s] mads 32649/3264…...

【Redis】零碎知识点(易忘 / 易错)总结回顾
一、Redis 是一种基于键值对(key-value)的 NoSQL 数据库 二、Redis 会将所有数据都存放在内存中,所以它的读写性能非常惊人 Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障时…...

基于three.js 全景图片或视频开源库Photo Sphere Viewer
Photo Sphere Viewer 是一个基于 JavaScript 的开源库,专门用于在网页上展示 360 全景图片或视频。它提供了丰富的交互功能,允许用户通过鼠标、触摸屏或陀螺仪来浏览全景内容,适用于旅游、房地产、虚拟现实、教育等多个领域。 主要特点 多种…...

LangPDF: Empowering Your PDFs with Intelligent Language Processing
LangPDF: Empowering Your PDFs with Intelligent Language Processing Unlock Global Communication: AI-Powered PDF Translation and Beyond In an interconnected world, seamless multilingual document management is not just an advantage—it’s a necessity. LangP…...

OpenVLA (2) 机器人环境和环境数据
文章目录 [TOC](文章目录) 前言1 BridgeData V21.1 概述1.2 硬件环境 2 数据集2.1 场景与结构2.2 数据结构2.2.1 images02.2.2 obs_dict.pkl2.2.3 policy_out.pkl 3 close question3.1 英伟达环境3.2 LIBERO 环境更适合仿真3.3 4090 运行问题 前言 按照笔者之前的行业经验, 数…...

代码复现5——VLMaps
项目地址 1 Setup # 拉取VLMaps仓库,成功运行后会在主目录生成文件夹vlmapsgit clone https://github.com/vlmaps/vlmaps.git#通过 conda 创建虚拟环境conda create -n vlmaps python=3.8 -yconda activate vlmaps #激活环境cd vlmaps # 切换到项目文件下bash install.ba…...

Ocean: Object-aware Anchor-free Tracking
领域:Object tracking It aims to infer the location of an arbitrary target in a video sequence, given only its location in the first frame 问题/现象: Anchor-based Siamese trackers have achieved remarkable advancements in accuracy, yet…...

计算机网络(1)——概述
1.计算机网络基本概念 1.1 什么是计算机网络 计算机网络的产生背景 在计算机网络出现之前,计算机之间都是相互独立的,每台计算机只能访问自身存储的数据,无法与其他计算机进行数据交换和资源共享。这种独立的计算机系统存在诸多局限性&#…...

刘家祎双剧收官见证蜕变,诠释多面人生
近期,两部风格迥异的剧集迎来收官时刻,而青年演员刘家祎在《我家的医生》与《无尽的尽头》中的精彩演绎,无疑成为观众热议的焦点。从温暖治愈的医疗日常到冷峻深刻的少年救赎,他以极具张力的表演,展现出令人惊叹的可塑…...

Axure制作可视化大屏动态滚动列表教程
在可视化大屏设计中,动态滚动列表是一种常见且实用的展示方式,能够有效地展示大量信息。本文将详细介绍如何使用Axure制作一个动态滚动的列表展示模块。 一、准备工作 打开Axure软件:确保你已经安装并打开了Axure RP软件。创建新项目&#x…...

MATLAB实现振幅调制(AM调制信号)
AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。 我们实现输入一个载波信号的频率与调制信号的频率后,再输入调幅度,得到已调信号的波形与包络信号的波形,再使用FFT算法分析出已调信号的频谱图。 源代码&#x…...