SpringMVC之入门(带你体验SpringMVC的乐趣)

简介: SpringMVC之入门(带你体验SpringMVC的乐趣)



前言

相比我们都了解过自定义MVC框架的一些知识,也体会到自定义MVC自定义框架在一些领域上的编程开发给我们带来的便利与效率。今天我要给大家分享的是和自定义MVC框架相似的架——SpringMVC框架,让我一起来体会SpringMVC框架带我们意想不到的收获吧。

一、SpringMVC简介

1. 概念

Spring MVC是Spring Framework的一个模块,用于快速开发Web应用程序。它是一个基于Java的MVC框架,采用了经典的模型-视图-控制器(Model-View-Controller)设计模式。

在Spring MVC中,模型(Model)用于封装业务数据和逻辑,负责处理数据的读写、验证和存取等。视图(View)负责展示数据给用户,通常是通过生成HTML页面或返回JSON/XML数据给客户端进行展示。控制器(Controller)接收用户的请求,根据请求的类型和参数来调用相应的处理逻辑,并最终将处理结果返回给视图进行展示。

Spring MVC提供了一个灵活的、松散耦合的框架,使开发人员可以轻松地构建可维护和可测试的Web应用程序。它支持多种配置方式,可以使用注解或配置文件来定义请求映射、处理方法和视图解析器等。同时,Spring MVC还提供了丰富的功能和工具,例如表单验证、文件上传、RESTful API的支持等,使开发人员能够更加高效地开发Web应用。

总的来说,Spring MVC是一个强大而灵活的Java Web开发框架,它简化了开发过程并提供了许多有用的功能,使开发人员能够快速构建出高质量的Web应用程序。

2.应用领域

SpringMVC应用领域

领域 说明
企业级Web应用程序

Spring MVC适用于构建企业级的Web应用程序,可以轻松处理复杂的业务逻辑和数据处理。它提供了丰富的功能和工具,使得开发人员能够高效地构建可扩展和可维护的应用。

RESTful API开发 Spring MVC对于构建RESTful风格的API非常适用。它提供了强大的请求映射和参数处理功能,可以方便地处理GET、POST、PUT、DELETE等HTTP请求,并支持内容协商、版本控制和异常处理等需求。
单页应用程序 随着前端技术的发展,越来越多的Web应用采用单页应用(Single Page Application,SPA)的架构。Spring MVC可以作为后端服务提供数据和业务逻辑支持,与前端框架(如Angular、React或Vue.js)进行集成,实现完整的单页应用。
电子商务平台 Spring MVC提供了灵活的数据处理和视图展示功能,适用于构建电子商务平台。开发人员可以使用Spring MVC处理购物车、订单管理、支付集成等功能,并通过模板引擎(如Thymeleaf)生成动态的HTML页面。
社交网络应用 Spring MVC可以用于构建社交网络应用,例如用户注册、登录、账号管理、好友关系、消息通知等功能。Spring MVC提供了用户认证和授权的支持,并可以与第三方登录(如OAuth)进行集成。

3. 作用(重要性)

  1. 架构模式:降低了代码的耦合性,提高了应用程序的可维护性和可测试性,从而达到高内聚低耦合。
  2. 灵活性和可扩展性:Spring MVC提供了灵活的配置和扩展机制,框架内置了众多的解决方案和插件,可实现各种功能和扩展,如表单验证、文件上传、权限控制等。
  3. 请求处理和路由控制:Spring MVC提供了强大的请求处理和路由控制功能,可以将不同类型的请求映射到相应的处理方法上。
  4. 视图解析和模板引擎:Spring MVC支持多种视图解析技术和模板引擎,如JSP、Thymeleaf、Velocity等,使开发人员能够灵活选择适合项目需求的视图技术。这些视图技术可以将动态数据和静态模板结合起来,生成最终的HTML内容,将结果返回给客户端。
  5. 处理复杂业务逻辑:Spring MVC提供了方便的数据绑定、表单验证和错误处理等功能,使开发人员能够方便地处理复杂的业务逻辑。通过注解和配置文件,可以实现数据的自动绑定、输入验证和错误处理,提高开发效率和代码质量。

4. 使用步骤

  1. 添加依赖:在您的项目中添加Spring MVC框架的依赖项。您可以使用构建工具(如Maven或Gradle)来管理依赖关系。确保您的项目中包含了Spring MVC的相关库和依赖项。
  2. 配置Web.xml:在您的项目的Web.xml文件中配置Spring MVC的DispatcherServlet。DispatcherServlet是Spring MVC的核心组件,负责处理所有的请求和路由控制。您需要配置DispatcherServlet的URL映射和其他相关参数。
  3. 创建控制器:创建一个或多个控制器类来处理请求。控制器类使用注解或配置文件来定义请求映射和处理方法。您可以在控制器方法中编写业务逻辑,并返回相应的视图或数据。
  4. 配置视图解析器:配置视图解析器来解析控制器方法返回的视图名称,并生成最终的HTML页面或其他类型的响应。您可以选择使用JSP、Thymeleaf、Velocity等视图技术,并配置相应的解析器。
  5. 配置其他组件:根据您的需求,配置其他Spring MVC的组件,如数据绑定、表单验证、异常处理等。您可以使用注解或配置文件来定义这些组件的行为和规则。
  6. 运行项目:将您的项目部署到Web服务器上,并启动服务器。您可以使用任何支Java的Web服务器,如Tomcat、Jetty等。一旦服务器启动,您就可以通过浏览器访问您的项目,并测试Spring MVC的功能。

5. 工作流程及原理

工作流程

  1. 客户端发送HTTP请求到前端控制器DispatcherServlet。
  2. DispatcherServlet将请求转发给处理器映射器HandlerMapping,根据配置文件或注解将请求映射到对应的控制器(Controller)。
  3. 处理器映射器返回一个处理器对象给DispatcherServlet。
  4. DispatcherServlet调用处理器适配器执行处理器(Controller)。处理器适配器根据请求方法和参数类型选择合适的方法执行。
  5. 处理器(Controller)执行完后返回一个ModelAndView对象给处理器适配器。
  6. 处理器适配器将ModelAndView对象返回给DispatcherServlet。
  7. DispatcherServlet将ModelAndView对象交给视图解析器ViewResolver。
  8. 视图解析器ViewResolver根据视图名解析出具体的视图对象。
  9. 视图解析器返回视图对象给DispatcherServlet。
  10. DispatcherServlet调用视图对象的渲染方法进行视图渲染。
  11. 渲染完成后将结果返回给客户端。

工作原理

主要基于设计模式中的责任链模式和策略模式。

责任链模式:DispatcherServlet作为前端控制器,通过处理器映射器和处理器适配器的责任链,将请求转发给合适的处理器(Controller)进行处理。

策略模式:处理器映射器和处理器适配器使用策略模式来选择合适的处理器(Controller)方法进行执行。

工作流程图

二、SpringMVC入门(项目整合)

1. 导入依赖

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yx</groupId>
  <artifactId>yx_ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>yx_ssm Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>
    <!--添加jar包依赖-->
    <!--1.spring 5.0.2.RELEASE相关-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!--2.mybatis相关-->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql-->
    <mysql.version>5.1.44</mysql.version>
    <!--pagehelper分页jar依赖-->
    <pagehelper.version>5.1.2</pagehelper.version>
    <!--mybatis与spring集成jar依赖-->
    <mybatis.spring.version>1.3.1</mybatis.spring.version>
    <!--3.dbcp2连接池相关 druid-->
    <commons.dbcp2.version>2.1.1</commons.dbcp2.version>
    <commons.pool2.version>2.4.3</commons.pool2.version>
    <!--4.log日志相关-->
    <log4j2.version>2.9.1</log4j2.version>
    <!--5.其他-->
    <junit.version>4.12</junit.version>
    <servlet.version>4.0.0</servlet.version>
    <lombok.version>1.18.2</lombok.version>
    <!-- jstl+standard -->
    <jstl.version>1.2</jstl.version>
    <standard.version>1.1.2</standard.version>
    <!-- spring -->
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>
  <dependencies>
    <!--1.spring相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--2.mybatis相关-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!--pagehelper分页插件jar包依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>${pagehelper.version}</version>
    </dependency>
    <!--mybatis与spring集成jar包依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis.spring.version}</version>
    </dependency>
    <!--3.dbcp2连接池相关-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>${commons.dbcp2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>${commons.pool2.version}</version>
    </dependency>
    <!--4.log日志相关依赖-->
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--5.其他-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
    <!-- spring mvc相关依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>${standard.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>yx_ssm</finalName>
    <resources>
      <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>jdbc.properties</include>
          <include>*.xml</include>
        </includes>
      </resource>
    </resources>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven.compiler.plugin.version}</version>
          <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <encoding>${project.build.sourceEncoding}</encoding>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <dependencies>
            <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>${mysql.version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>

注:

缺少jstl+standard的这两个jar包会报java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config,那是因为org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包。

2. 编写配置spring-mvc.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.yx"/>
    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven />
    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

3. 配置web.xml文件

<?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_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->
  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4. IndexController 代码

package com.yx.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-04 18:58
 *
 * @Controller 替换了自定义MVC中的
 *  extend ActionSupport
 */
@Controller
@RequestMapping("/book")
public class IndexController {
//  首页
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("hello SpringMVC...");
        return "hello";
    }
}

5. jsp代码

<%--
  Created by IntelliJ IDEA.
  User: 86158
  Date: 2023/9/4
  Time: 19:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
你好!君易----鑨
</body>
</html>

6. 测试结果

页面结果

输出结果

三、静态资源处理

spring-mvc.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.yx"/>
    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven />
    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--4) 单独处理图片、样式、js等资源 -->
     <mvc:resources location="/static/" mapping="/static/**"/>
</beans>

导入静态资源

测试

本次分享到此结束,感谢各位的支持与鼓励。

目录
相关文章
|
存储 弹性计算 关系型数据库
5 分钟玩转 OceanBase 社区版 Docker 部署
## 简介 本文是个人把 OceanBase 社区版 3.1 做了一个 Docker 镜像,仅用于学习研究。只要你有一个 4C10G的笔记本可以联公网,你就可以在5分钟内将 OceanBase 社区版跑起来。 OceanBase 社区版是今年 6月1日开源的,只兼容 MySQL,可以理解为分布式的MySQL。其核心功能跟内部业务在用的OceanBase 企业版基本一致。核心功能包含:**多副
4437 0
5 分钟玩转 OceanBase 社区版 Docker 部署
|
2月前
|
前端开发 安全 Shell
Agent 小知识 | Agent 编排的三种方式:ReAct、Plan-and-Execute 与 Workflow Graph
本文深入解析Agent编排三大范式:ReAct(动态探索未知路径)、Plan-and-Execute(目标明确、可调整的结构化执行)与Workflow Graph(规则固化、安全可控的流程图)。三者非替代关系,而是按任务确定性分层协同——主干用Workflow守边界,子任务用Plan组织,细节用ReAct灵活应对。
193 0
Agent 小知识 | Agent 编排的三种方式:ReAct、Plan-and-Execute 与 Workflow Graph
|
2月前
|
SQL 分布式计算 大数据
数据工程师为什么越做越值钱?一份从入门到高级的数据工程技能树、项目实战与简历升级指南
数据工程师为什么越做越值钱?一份从入门到高级的数据工程技能树、项目实战与简历升级指南
295 1
|
4月前
|
人工智能 缓存 开发框架
阿里云Qwen3.7-Max限时优惠:5折起,输入6元/每百万tokens,输出18元/每百万tokens
Qwen3.7-Max是通义千问面向智能体时代的旗舰大模型,在编程能力(Code Arena全球第二)、智能体执行、长程推理及多语言理解等维度均达行业顶尖水平,支持1M token超长上下文、35小时长周期自主执行及1158次工具调用,已在蔚来汽车工程中验证AI代码生成占比超70%。当前限时5折,输入6元/百万tokens、输出18元/百万tokens,全模型通用节省计划低至4.5折,新用户还可享100万免费tokens(90天有效)。无论开发者探索AI编程,还是企业构建智能体系统,Qwen3.7-Max都是当下高性价比的全能之选。
|
5月前
|
SQL 缓存 关系型数据库
【MySQL百日打怪升级第18天】事务隔离级别详解:RC、RR、Serializable 到底怎么选?
本系列第18天详解MySQL事务隔离级别:RC(读已提交)、RR(可重复读,默认)、Serializable。厘清脏读、不可重复读、幻读三大问题,剖析InnoDB下RR如何借MVCC+Gap Lock基本防幻读,并给出RC与RR选型建议及真实避坑指南。
520 0
|
7月前
|
人工智能 Linux API
OpenClaw刷屏全网:AI智能体落地,易用性才是开发者与企业的核心诉求
本文剖析火爆社区的AI智能体框架OpenClaw(“龙虾”):肯定其开源灵活、支持多工具联动等创新,更直指其云上部署门槛高、插件生态弱、场景适配窄三大短板。对比提出阿里云深度适配的玄晶引擎——一键部署、视窗操作、全场景覆盖、免插件开发,真正实现低门槛、高可用的AI智能体云上落地。
829 5
|
编解码
从mp4、flv、ts文件中提取出AVC(h264)
使用FFmpeg从mp4、flv、ts等封装格式的文件中提取AVC(H.264)视频流,并将其写入文件。
626 1
游戏辅助 -- 实战找人物对象基址
游戏辅助 -- 实战找人物对象基址
621 0
|
网络安全 Windows
华为USG6000V防火墙学习
华为USG6000V防火墙学习
946 0
华为USG6000V防火墙学习
|
存储 Kubernetes Cloud Native
Kuboard云原生管理工具(下)
Kuboard云原生管理工具(下)
1018 0
Kuboard云原生管理工具(下)