JavaWeb Servlet的反射优化、Dispatcher优化、视图(重定向)优化、方法参数值获取优化
目录
- 1. 背景
- 2. 实现
- 2.1 pom.xml
- 2.2 FruitController.java
- 2.3 DispatcherServlet.java
- 2.4 applicationContext.xml
- 3. 测试
1. 背景
前面我们做了Servlet的一个案例。但是存在很多问题,现在我们要做优化,优化的步骤如下:
- 每个Fruit请求都需要一个Servlet来处理,这样就会产生大量的Servlet。我们可以只用一个FruitServlet来处理,然后通过一个operate变量来区分请求FruitServlet的哪个方法
- 除了有Fruit的请求,可能还有很多其它类型的请求。可以用一个DispatcherServlet来处理所有的请求,然后定义一个applicationContext.xml来让一个请求和其处理的类对应
- 不在FruitController中做重定向,FruitController只返回要重定向的路径,统一由DispatcherServlet来做重定向
- 不在FruitController的方法中获取参数。由DispatcherServlet统一获取参数,然后传递给FruitController的方法
2. 实现
2.1 pom.xml
编译的时候保留方法的参数名,而不是擦除。注意删除target,不然不会生效
<!-- 编译的时候保留方法的参数名,而不是擦除。注意删除target,不然不会生效 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.10.1</version><configuration><source>11</source><target>11</target><compilerArgument>-parameters</compilerArgument></configuration></plugin>
2.2 FruitController.java
只负责具体的业务逻辑处理。重定向、参数获取全部由DispatcherServlet处理
package com.hh.javaWebTest.servlet;import com.hh.javaWebTest.bean.Fruit;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;// 只负责具体的业务逻辑处理。重定向、参数获取全部由DispatcherServlet处理
public class FruitController {protected String index(Integer paramId, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 不通过req.getParameter(paramName)获取参数值,而是通过在dispatcher统一获取,再传入进来// 测试是否能获取到参数System.out.println("paramId: " + paramId);System.out.println(req.getRequestURI()); // /javaWebTest/fruit.doSystem.out.println(req.getQueryString()); // paramId=1List<Fruit> fruitList = new ArrayList<Fruit>();fruitList.add(new Fruit("苹果", 5));fruitList.add(new Fruit("香蕉", 3));HttpSession session = req.getSession();session.setAttribute("fruitList", fruitList);// 由DispatcherServlet调用super.processTemplate("index", request, response);return "index";}}
2.3 DispatcherServlet.java
接受所有的请求,然后进行分发
package com.hh.javaWebTest.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.HashMap;
import java.util.Map;// 接受所有的请求,然后进行分发
@WebServlet("*.do")
public class DispatcherServlet extends ViewBaseServlet {private Map<String, Object> beanMap = new HashMap<>();@Overridepublic void init() throws ServletException {// 手动进行ViewBaseServlet的初始化super.init();// 解析applicationContext.xml,形成id:class形式的beanMaptry {InputStream inputStream = getClass().getClassLoader().getResourceAsStream("applicationContext.xml");DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse(inputStream);NodeList beanNodeList = document.getElementsByTagName("bean");for (int i = 0; i < beanNodeList.getLength(); i++) {Node beanNode = beanNodeList.item(i);if (beanNode.getNodeType() == Node.ELEMENT_NODE) {Element beanElement = (Element) beanNode;String beanId = beanElement.getAttribute("id");String className = beanElement.getAttribute("class");Class controllerBeanClass = Class.forName(className);Object beanObj = controllerBeanClass.getDeclaredConstructor().newInstance();beanMap.put(beanId, beanObj);}}} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// servletPath: /fruit.do => fruitString servletPath = request.getServletPath();servletPath = servletPath.substring(1);int lastDotIndex = servletPath.lastIndexOf(".do");servletPath = servletPath.substring(0, lastDotIndex);// 获取fruit对应的classObject controllerBeanObj = beanMap.get(servletPath);// 获取operateString operate = request.getParameter("operate");if (StringUtils.isEmpty(operate)) {operate = "index";}try {Method[] methods = controllerBeanObj.getClass().getDeclaredMethods();for (Method method : methods) {// 匹配operate对应的类方法if (operate.equals(method.getName())) {Parameter[] parameters = method.getParameters();// 将类方法的值,保存到parameterValuesObject[] parameterValues = new Object[parameters.length];for (int i = 0; i < parameters.length; i++) {Parameter parameter = parameters[i];String parameterName = parameter.getName();if ("req".equals(parameterName)) {parameterValues[i] = request;} else if ("resp".equals(parameterName)) {parameterValues[i] = response;} else if ("session".equals(parameterName)) {parameterValues[i] = request.getSession();} else {// 从请求中获取参数值String parameterValue = request.getParameter(parameterName);String typeName = parameter.getType().getName();Object parameterObj = parameterValue;if (parameterObj != null) {if ("java.lang.Integer".equals(typeName)) {parameterObj = Integer.parseInt(parameterValue);}}parameterValues[i] = parameterObj;}}// 调用方法,返回值。根据返回值判断是否需要做重定向method.setAccessible(true);Object returnObj = method.invoke(controllerBeanObj, parameterValues);// 视图处理(重定向处理)String methodReturnStr = (String) returnObj;if (methodReturnStr.startsWith("redirect:")) { // 比如: redirect:fruit.doString redirectStr = methodReturnStr.substring("redirect:".length());response.sendRedirect(redirectStr);} else if (methodReturnStr != "") { // 比如: "index"super.processTemplate(methodReturnStr, request, response);return;} else {return;}}}} catch (Exception e) {e.printStackTrace();}throw new RuntimeException("operate值非法!");}
}
2.4 applicationContext.xml
定义java bean的id,和其对应的处理类
<?xml version="1.0" encoding="utf-8"?><!--
XML包含三个部分:
1. XML声明, 而且声明这一行代码必须在XML文件的第一行
2. DTD: 文档类型定义
3. XML正文--><!-- 该标签告知XML文档所使用的XML beans规范 -->
<!DOCTYPE beans [<!ELEMENT beans (bean*)><!ELEMENT bean (property*)><!ELEMENT property (#PCDATA)><!ATTLIST bean id ID #REQUIRED><!ATTLIST bean class CDATA #IMPLIED><!ATTLIST property name CDATA #IMPLIED><!ATTLIST property ref IDREF #IMPLIED>]><beans><!-- 说明这是一个java bean。id是fruit,其对应的处理类是FruitController --><bean id="fruit" class="com.hh.javaWebTest.servlet.FruitController"/>
</beans>
3. 测试
请求http://localhost:8080/javaWebTest/fruit.do?paramId=1,web页面显示和之前的一样
控制台输出如下:
paramId: 1
相关文章:
JavaWeb Servlet的反射优化、Dispatcher优化、视图(重定向)优化、方法参数值获取优化
目录 1. 背景2. 实现2.1 pom.xml2.2 FruitController.java2.3 DispatcherServlet.java2.4 applicationContext.xml 3. 测试 1. 背景 前面我们做了Servlet的一个案例。但是存在很多问题,现在我们要做优化,优化的步骤如下: 每个Fruit请求都需…...
基础I/O -> 如何谈文件与文件系统?
文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件,必须使用:文件路径 文件名(具有唯一性)。如果没有指明对应的文件路径&…...
安装配置git
1、下载git:https://git-scm.com 2、配置git,进入git bash #配置用户名 git config-global user.name "petter7226" #配置邮箱 git config-global user.email "894266014qq.com" 3、配置ssh免密登录 可参考这个文档 https://gitee.com/help/article…...
cad学习 day4 day5
平面布置 客厅平面布置 端景柜: 一般玄关区域、走廊、过道尽头做造型端景柜,可以组展示、柜体、艺术品陈设窗帘盒 200mm 电动窗帘盒 250mm, 镜像命令: MI 做对称使用沙发: 归类FF - 移动家私木门: 归类FF - 平面内门地台床: 使用bo快速生成, 绘制后外围偏移O 50mm pl连接作为灯…...
Java的基础概念(一)
一、注释 **注意!:**注释内容不会参与编译和运行,仅仅是对代码的解释说明。 Java支持单行注释、多行注释、文档注释。 单行注释 以//开头 ,格式【 //注释内容 】 例子如下: 多行注释 格式【 / 注释内容 / 】 例…...
Qt5 cmake引用private头文件
Qt5 cmake引用private头文件 如何引用Qt的qzipreader_p.h头文件 、xlsxzipreader_p.h头文件 使用 target_include_directories target_include_directories(TestQtXlsx PRIVATE${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}${Qt${QT_VERSION_MAJOR}Xlsx_PRIVATE_INCLUD…...
重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...
拦截器魔法:Spring MVC中的防重放守护者
目录 简介HandlerInterceptorAdapter vs HandlerInterceptor创建一个防重放拦截器注册拦截器路径模式匹配适配器模式的魅力总结 简介 在构建安全可靠的Web应用程序时,防止请求重放攻击是一项关键任务。当用户或系统发出的请求被恶意第三方捕获并重复发送给服务器…...
MVC 发布
关于MVC发布,我为您整理了以下信息: SpringMVC发布:SpringMVC是Spring框架的一部分,它基于MVC架构,具有解耦合、轻量级和对注解的广泛支持等优点。发布SpringMVC项目通常涉及配置中央调度器、编写控制器类和设置视图解…...
AI在传统周公解梦中的技术实践与应用
本文深入探讨了人工智能在传统周公解梦领域的技术实践与应用。首先介绍了传统周公解梦的背景与局限性,随后详细阐述了 AI 技术如何应用于梦境数据的采集、整理与分析,包括自然语言处理技术对梦境描述的理解,机器学习算法构建解梦模型以及深度…...
Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...
社区管理系统:实现社区信息数字化管理的实践
3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该社区管理系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同…...
Java设计模式 —— 【结构型模式】外观模式详解
文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这…...
基于 Python 的二手电子设备交易平台
标题:基于 Python 的二手电子设备交易平台 内容:1.摘要 基于 Python 的二手电子设备交易平台的摘要:本文介绍了一个基于 Python 的二手电子设备交易平台。该平台旨在为用户提供一个便捷、安全的交易环境,促进二手电子设备的流通和再利用。文章首先介绍了…...
Vue.js组件开发-插槽(Slots)的使用
插槽(Slots)是 Vue.js 中一个非常强大的特性,允许在组件内部指定可重用的内容片段,这些内容片段可以由父组件动态地填充。它能够让父组件决定组件内部应该渲染什么内容。 默认插槽 默认插槽是最简单的插槽类型。在子组件的模板中…...
python:面向对象简单示例
编写 se2ball.py 如下 # -*- coding: utf-8 -*- """ python 面向对象简单示例 """ import randomclass Random_ball(object):""" 随机选双色球 """def __init__(self, reds33, blues16):""" 初始…...
Stealthy Attack on Large Language Model based Recommendation
传统RS依赖id信息进行推荐,攻击:生成虚假用户,这些用户对特定目标物体给于高评价,从而影响模型的训练。 基于llm的RS:llm利用语义理解,将用户兴趣转化为语义向量,通过计算用户兴趣向量与物品向…...
云原生周刊:利用 eBPF 增强 K8s
开源项目推荐 Slurm-operator Slurm-operator 是一个高效可扩展的框架,用于在 K8s 环境中部署和运行 Slurm 工作负载。 它结合了 Slurm 的可靠性和 Kubernetes 的灵活性,支持快速部署 Slurm 集群、动态扩展 HPC 工作负载,并提供高度灵活的定…...
Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败(已成功)>
一、安装openMVS 官方文档:https://github.com/cdcseacave/openMVS/wiki/Building sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev eigen git clone https://gitlab.com/libeigen/eigen --branch 3.4 mkdi…...
第22天:信息收集-Web应用各语言框架安全组件联动系统数据特征人工分析识别项目
#知识点 1、信息收集-Web应用-开发框架-识别安全 2、信息收集-Web应用-安全组件-特征分析 一、ICO图标: 1、某个应用系统的标示,如若依系统有自己特点的图标;一旦该系统出问题,使用该系统的网站都会受到影响; 2、某个公…...
Sourcegraph 概述
Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具,专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率,帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...
Redis常见阻塞原因总结
O(n) 命令 Redis 中的大部分命令都是 O(1)时间复杂度,但也有少部分 O(n) 时间复杂度的命令,例如: KEYS *:会返回所有符合规则的 key。HGETALL:会返回一个 Hash 中所有的键值对。LRANGE:会返回 List 中指定…...
MyBatis执行完sql后,返回的数值代表的意思
在 MyBatis 中,常见的数据库操作方法返回的数值(如 insert、update 和 delete)代表了 受影响的行数,即数据库操作成功后,实际修改(插入、更新或删除)的记录数量。每个方法返回的数值有不同的含义…...
MySQL超详细安装配置教程(亲测有效)
目录 1.下载mysql 2.环境配置 3.安装mysql 4.navicat工具下载与连接 5总结 1.下载mysql mysql下载--MySQL :: 下载 MySQL 社区服务器 下载的时候这里直接逃过就行 我这里的版本是最新的mysql8.0.37 下载完成之后,将压缩包进行解压 这里我建议大…...
MacroSan 2500_24A配置
双控制器电源同时按下,切记/切记/切记 默认信息 默认地址:192.168.0.210 输入ODSP授权后设置密码## 配置端口 物理资源–>设备–>网口–>eth-1:0:0或eth-2:0:0 创建存储池 存储资源–>存储池 介质类型:混合(支持机械及SSD)全闪(仅支持SSD) RAID类型:CRAID-P(基于磁…...
vue3+vite一个IP对站点名称的前端curd更新-会议系统优化
vue3-tailwind-todo https://github.com/kgrg/vue3-tailwind-todo 基于这个项目,把ip到sta的映射做了前端管理. 核心代码是存储和获得的接口,需要flask提供. def redis2ipdic():global ipdicipdic.clear()tmdiccl.hgetall(IPDIC_KEY)for k in tmdic.keys():ipdic[k.decode() …...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...
《Swift 字面量》
《Swift 字面量》 介绍 在 Swift 编程语言中,字面量是一种表示源代码中固定值的表达方式。字面量可以直接表示数字、字符串、布尔值等基本数据类型,为编程提供了简洁和直观的方式。Swift 支持多种类型的字面量,包括整数字面量、浮点数字面量…...
国标GB28181平台EasyGBS在安防视频监控中的信号传输(电源/视频/音频)特性及差异
在现代安防视频监控系统中,国标GB28181协议作为公共安全视频监控联网系统的国家标准,该协议不仅规范了视频监控系统的信息传输、交换和控制技术要求,还为不同厂商设备之间的互联互通提供了统一的框架。EasyGBS平台基于GB28181协议,…...
AlipayHK支付宝HK接入-商户收款(PHP)
一打开支付宝国际版 二、点开商户服务 三、下载源码...
CS!GO
CS(computer science)计算机科学,说实话,不是找工作面试,这些题谁会背啊,反正我不行,一问三不知。 咱也不管这些,这个系列,可能会时不时的给出一些计网和操作系统相关的东…...
全栈开发中的技术选型决策:快速上线与扩展的平衡
文章目录 摘要引言技术选型的重要性技术选型的关键考虑点项目需求团队技能技术生态性能与扩展性成本与复杂性 基于 Spring Boot 和 Vue.js 的全栈架构后端代码:Spring Boot 示例代码详解:运行原理: 前端代码:Vue.js 示例代码详解&…...
软件著作权申请教程(超详细)(2024新版)软著申请
目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】的身份。中…...
【强化学习】Stable-Baselines3学习笔记
【强化学习】Stable-Baselines3学习笔记 Stable-Baselines3是什么安装ExampleReinforcement Learning Tips and TricksVecEnv相关 Stable-Baselines3是什么 Stable Baselines3(简称SB3)是一套基于PyTorch实现的强化学习算法的可靠工具集旨在为研究社区和…...
sqoop的参数有哪些?
Sqoop 是一款用于在 Hadoop 与关系型数据库之间进行数据传输的工具,它有很多参数,可分为通用参数、导入参数和导出参数等,以下是一些常见的参数介绍: 通用参数 --connect 说明:指定要连接的关系型数据库的 JDBC URL。…...
16×16LED点阵字符滚动显示-基于译码器与移位寄存器(设计报告+仿真+单片机源程序)
资料下载地址:1616LED点阵字符滚动显示-基于译码器与移位寄存器(设计报告仿真单片机源程序) 1、功能介绍 设计1616点阵LED显示器的驱动电路,并编写程序实现在1616点阵LED显示器上的字符滚动显示。1616点阵LED显示器可由4块88点阵LED显示器构成。可采…...
后门移除方法和后门检测
1、后门移除方法 1.1、Fine-Pruning方法 [48]利用了这样一个观察结果:后门攻击会利用神经网络中的空闲容量。该方法通过消除在干净输入下处于休眠状态的神经元来减小网络的规模,然后对网络进行微调(使用干净数据继续训练),以增强对抗修剪感…...
网络安全检测
实验目的与要求 (1) 帮助学生掌握木马和入侵的防护和检测方法、提高学习能力、应用能力和解决实际问题的能力。 (2) 要求学生掌握方法, 学会应用软件的安装和使用方法, 并能将应用结果展示出来。 实验原理与内容 入侵检测是通过对计算机网络或计算机系统中若干关键点收集信…...
FPGA(一)verilog语句基础
Verilog 是一种硬件描述语言(HDL),常用于数字电路的设计、模拟和验证,特别是用于 FPGA 和 ASIC 的设计。Verilog 让设计者能够描述和模拟硬件系统的行为和结构,最终将其转化为硬件电路。 一、模块结构 Verilog 中的设计…...
istio配置重复的svc报错
现象: 两个vs中配置了同一个svc地址,导致其中的一个vs路由配置不生效,看到istiod服务的报错duplicate domain from service 解决: istiod服务报错日志 2024-11-13T14:54:50.39418167508:00 "pilot_vservice_dup_doma…...
springboot473基于web的物流管理系统(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统物流管理系统信息管理难度大,容错率低&#x…...
面试题整理7----Nginx的access.log被删除在不影响应用的情况下恢复日志的写入
面试题整理7----Nginx的access.log被删除在不影响应用的情况下恢复日志的写入 1. 问题2. 问题复现2. 释放空间2.1 确定nginx的pid2.2 确定文件描述符号2.3 清空文件 3. 恢复access.log的写入4. 后续改善 1. 问题 这是一个非常常见的故障处理. 应用负责人发现服务器磁盘满了,经…...
ip_forward函数
ip_forward 函数是 Linux 内核中用于处理 IP 数据包转发的重要函数。它负责将数据包从一个网络接口转发到另一个网络接口。以下是这个函数的一些关键点和工作流程的概述: 1. **数据包接收**:当一个数据包到达网络设备(如以太网卡)时,内核会首先接收到这个数据包。 2. **路…...
华院计算参与项目再次被《新闻联播》报道
12月17日,央视《新闻联播》播出我国推进乡村振兴取得积极进展。其中,华院计算参与的江西省防止返贫监测帮扶大数据系统被报道,该系统实现了由原来的“人找人”向“数据找人”的转变,有效提升监测帮扶及时性和有效性,守…...
postman关联接口用于登录(验证码会变情况)
目录 一、介绍 二、操作步骤 (一)Fiddler抓取到登录信息 (二)postman发送请求 新建请求一:登录值请求 (三)易变值赋值固定住 新建请求二:易变值验证码(uuid)请求 切换到请求一里面进行赋值绑定 一、介绍 接口有两种形式,一种是单…...
《探秘 Qt Creator Manual 4.11.1》
《探秘 Qt Creator Manual 4.11.1》 一、Qt Creator 4.11.1 概述二、功能特性全解析(一)跨平台能力展示(二)代码编辑优势(三)版本控制集成(四)特定 Qt 功能呈现(五&#…...
linux(ubuntu )卡死怎么强制重启
(公司的 ubuntu 跑个用例经常卡死) 如果其他快捷键都没有反应,且不想按电源键进行硬重启,可以尝试以下方法: 1. 使用 Magic SysRq 键 Magic SysRq 键可以在系统完全卡死的情况下,执行一些强制操作来重启…...
优化程序中的数据:从数组到代数
前言 我们往往都希望优化我们的程序,使之达到一个更好的效果,程序优化的一个重点就是速度,加快速度的一个好办法就是使用并行技术,但是,并行时我们要考虑必须串行执行的任务,也就是有依赖关系的任务&#…...
图像配准有哪些技术?
目录 图像配准技术 1.基于特征的图像配准 2.基于强度的图像配准 3.基于模型的图像配准 4.基于学习的图像配准 5.混合方法 图像配准的应用 图像配准技术入门 常见问题解答 图像配准是计算机视觉和医学成像中的一项关键技术,用于将多幅图像对齐到一个共同的坐…...
第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)
文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...