30.SSM框架整合

news2024/11/27 0:44:11

目录

一、SSM框架整合。

(1)核心笔记。

(1.1)Spring、SpringMVC、MyBatis三者的配置。 

(1.2)请求字符集格式与响应字符集格式。

(2)原始方式整合。

(2.1)controller层。

(2.2)service层。

(2.3)mapper层(dao层)。

(2.4)domain层实体类。

(2.5)web.xml文件。

(2.6)spring的相关配置。

(2.7)springMVC的相关配置。

(2.8)mybatis相关的配置。

(2.9)log4j.properties文件:

(2.10)原始整合方式的流程文档参考。

(3)Spring整合MyBatis。 


一、SSM框架整合。

(1)核心笔记。

(1.1)Spring、SpringMVC、MyBatis三者的配置。 

Spring:配置Listener(web.xml中)、applicationContext.xml配置文件。

SpringMVC:配置CharacterEncodingFilter(web.xml中)、spring-mvc.xml配置文件。

MyBatis:配置映射文件、核心文件、映射接口类(相当于dao类)。

 注意:web.xml文件中:配置spring监听器、springmvc前端控制器。

(1.2)请求字符集格式与响应字符集格式。

请求字符集格式:

<!--3、乱码过滤器(这里的是请求的字符集过滤,不包含响应的(即响应可能中文出现乱码))-->
    <filter>
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

响应字符集格式:

注意1:如果在类上的注解上写produces,则所有类都有这个属性,如果在方法上写,只有当前方法有。
注意2:produces = "text/html;charset=utf-8";这个是设置响应时的字符集编码。

@Controller
@RequestMapping( value = "/account",produces = "text/html;charset=utf-8")
public class AccountController {
    @Autowired
    private AccountService accountService;
    //保存
    /* 注意:如果在类上的注解上写produces,则所有类都有这个属性,如果在方法上写,只有当前方法有*/
    /*注意:produces = "text/html;charset=utf-8";这个是设置响应时的字符集编码*/
    @RequestMapping(value = "/save"/*,produces = "text/html;charset=utf-8"*/)
    @ResponseBody
    public String save(Account account) throws IOException {
        accountService.save(account);
        return "保存成功!";
    }
    //查询
    @RequestMapping("/findAll")
    public ModelAndView findAll() throws IOException {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("accountList");
        modelAndView.addObject("accountList",accountService.findAll());
        return modelAndView;
    }
}

(2)原始方式整合。

(2.1)controller层。

package controller;
@Controller
@RequestMapping( value = "/account",produces = "text/html;charset=utf-8")
public class AccountController {
    @Autowired
    private AccountService accountService;
    //保存
    /* 注意:如果在类上的注解上写produces,则所有类都有这个属性,如果在方法上写,只有当前方法有*/
    /*注意:produces = "text/html;charset=utf-8";这个是设置响应时的字符集编码*/
    @RequestMapping(value = "/save"/*,produces = "text/html;charset=utf-8"*/)
    @ResponseBody
    public String save(Account account) throws IOException {
        accountService.save(account);
        return "保存成功!";
    }
    //查询
    @RequestMapping("/findAll")
    public ModelAndView findAll() throws IOException {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("accountList");
        modelAndView.addObject("accountList",accountService.findAll());
        return modelAndView;
    }
}

(2.2)service层。

1.接口:

package server;
public interface AccountService {
    public void save(Account account) throws IOException;
    public List<Account> findAll() throws IOException;

}

2.接口实现类:

package server.impl;
@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Override
    public void save(Account account) throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        mapper.save(account);
        sqlSession.commit();
        sqlSession.close();
    }
    @Override
    public List<Account> findAll() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        List<Account> accountList = mapper.findAll();
        sqlSession.commit();
        sqlSession.close();
        return accountList;
    }
}

(2.3)mapper层(dao层)。

接口(只需接口,不需要实现类):

package mapper;
public interface AccountMapper {
    public void save(Account account);
    public List<Account> findAll();
}

(2.4)domain层实体类。

package domain;
public class Account {
    private Integer id;
    private String name;
    private Double money;
//省略setter与getter方法。
}

(2.5)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_4_0.xsd"
         version="4.0">
    <!--1、Spring监听器-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--2、springmvc前端控制器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern><!--缺省(默认)-->
    </servlet-mapping>
    <!--3、乱码过滤器(这里的是请求的字符集过滤,不包含响应的(即响应可能中文出现乱码))-->
    <filter>
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

(2.6)spring的相关配置。

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--1、组件扫描 扫描service和mapper-->
        <context:component-scan base-package="com.itheima">
排除controller的扫描
而context:exclude-filter标签则配置了要排除扫描的组件类型为标注了"@Controller"注解的类。
expression属性用于指定要排除的组件类型或条件。对于type="annotation"为注解,expression属性通常会指定一个注解类型
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
        </context:component-scan>-->
    <context:component-scan base-package="server"/>
    <context:component-scan base-package="mapper"/>
</beans>

(2.7)springMVC的相关配置。

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--1、组件扫描 主要扫描controller-->
    <context:component-scan base-package="controller"/>
    <!--2、配置mvc驱动-->
    <mvc:annotation-driven/>
    <!--3、内部资源解析器-->
    <bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--4、开发静态资源的访问权限-->
    <mvc:default-servlet-handler/>
</beans>

(2.8)mybatis相关的配置。

1.映射文件: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.AccountMapper">
    <insert id="save" parameterType="domain.Account">
        insert into account values(#{id},#{name},#{money})
    </insert>
    <select id="findAll" resultType="Account">
        select * from account
    </select>
</mapper>

2.properties文件: 

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=tan

3.核心配置文件: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--1、加载properties文件-->
    <properties resource="jdbc.properties"/>
    <!--2、定义别名-->
    <typeAliases>
        <!--<typeAlias type="domain.Account" alias="account"></typeAlias>-->
        <!--扫包,命名为:实体名称(Account) 或 包内的实体名称的首字母小写,如Account 》 account ;两种都可以-->
        <package name="domain"/>
    </typeAliases>
    <!--3、配置数据源环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--4、加载映射-->
    <mappers>
        <!--<mapper resource="mapper/AccountMapper.xml"/>-->
        <!--不管是接口还是xml文件都可以用这个,但是如果接口不是使用注解配置的,那么使用
包扫描,这个包名(或几个同名的)下里面,必须有映射文件和接口,否则报错-->
        <package name="mapper"/>
    </mappers>
</configuration>

(2.9)log4j.properties文件:

#
# Hibernate, Relational Persistence for Idiomatic Java
#
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
#

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=all, stdout

(2.10)原始整合方式的流程文档参考。

(3)Spring整合MyBatis。 

1.主要是修改service层的代码(只改了一个,方便对比): 

package server.impl;
@Service("accountService")
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountMapper accountMapper;
    @Override
    public void save(Account account) throws IOException {
        accountMapper.save(account);
    }
    @Override
    public List<Account> findAll() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        List<Account> accountList = mapper.findAll();
        sqlSession.commit();
        sqlSession.close();
        return accountList;
    }
}

 2.spring配置文件:

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--1、组件扫描 扫描service和mapper-->
    <context:component-scan base-package="server"/>
    <context:component-scan base-package="mapper2"/>
    <!--2、加载properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--3、配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--4、配置SqlSessionFactory(是一个接口,使用实现类获取该类型)-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源对象-->
        <property name="dataSource" ref="dataSource"/>
        <!--加载(注入)mubatis核心文件-->
        <property name="configLocation" value="classpath:sqlMapConfig-spring.xml"/>
    </bean>
<!--5、代替mybatis核心文件的mappers标签.(扫描之后会为接口生成实现类注册到IOC容器中)
1、如果接口不是使用注解配置的,那么使用包扫描,这个包名(或几个同名的)下里面,必须有映射文件和接口,否则报错
2、比如接口在mapper包下,映射文件在mapper2下,扫描mapper包报错,扫描mapper2包也报错(直接指定xml文件不报错)
3、如果把接口所在的mapper包改为mapper2,已经映射文件所在的mapper包改为mapper2,然后正常运行。
4、测试结果:扫描的包,接口以及映射文件都要在扫描的包内。(测试环境:不同包,但包名相同)-->
<!--
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 标签是用来配置 MyBatis 和 Spring 整合时
自动扫描 Mapper 接口并将其注册到 Spring IOC 容器的组件。 通过配置 <property name="basePackage" value="mapper2"/> 属性,
MyBatis 会扫描 mapper2 包及其子包中所有的 Mapper 接口,并自动为其生成代理对象。-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--扫描mapper2所在的包,为mapper2创建实现类-->
        <property name="basePackage" value="mapper2"/>
    </bean>
    <!--6、声明式事务控制-->
    <!--平台事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置事务增强-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <!--事务的AOP织入-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* service.Impl.*.*(..))"></aop:advisor>
    </aop:config>
</beans>

3.mybatis核心文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--2、定义别名-->
    <typeAliases>
        <!--<typeAlias type="domain.Account" alias="account"></typeAlias>-->
        <!--扫包,命名为:实体名称(Account) 或 包内的实体名称的首字母小写,如Account 》 account ;两种都可以-->
        <package name="domain"/>
    </typeAliases>
</configuration>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路径规划算法:基于郊狼算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于郊狼优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于郊狼优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法郊狼…

带你实现初阶扫雷小游戏—【C语言】

目录 1. 扫雷游戏实现的思路 注意点1 注意点2 2. 函数实现扫雷功能 2.1 初始化棋盘 2.2 显示棋盘 2.3 设置雷 2.4 排查雷 2.5 返回附近雷的个数 3.源码 3.1 game.h 3.2 game.c 3.3 test.c 1. 扫雷游戏实现的思路 注意点1 我们这里拿9*9的棋盘&#xff08;其中…

Java的基操,基操(二)

&#x1f525;常量(Constant)&#x1f525;基本数据类型(primitive data type)&#x1f525;整型&#x1f525;浮点型(Floating Point Number)&#x1f525;字符型&#x1f525;布尔型(boolean)&#x1f525;运算符(operator)&#x1f525;逻辑运算符&#x1f525;数据类型的转…

【C++初阶】:动态管理

动态管理 一.new和delete&#xff08;一般使用&#xff09;二.operator new与operator delete函数&#xff08;底层&#xff09;三.new和delete的实现原理四.定位new&#xff08;placement-new&#xff09;五.malloc和new的区别 前置知识&#xff08;堆区&#xff09;&#xff…

什么样的项目适合UI自动化测试?

我们在考虑做自动化测试之前&#xff0c;一定要先分析一下&#xff0c;这个项目到底适不适合做自动化测试&#xff0c;避免在不太适合自动化测试的项目中痛苦挣扎&#xff0c;既浪费了大量的人力和时间&#xff0c;又收效甚微。下面简单列举一下评估一下项目是否适合做自动化的…

【JavaEE初阶】网络编程

文章目录 网络编程基础网络资源网络编程网络编程中的基本概念发送端和接收端请求和响应客户端和服务端常见的客户端服务端模型 Socket套接字了解UDP和TCPUDP数据报套接字编程DatagramSocket APIDatagramPacket APIInetSocketAddress APIUDP版本的客户端服务器程序 TCP流套接字编…

try catch finally 里面有return的执行顺序

目录 实例结论 实例 1.try和catch中有return时&#xff0c;finally里面的语句会被执行吗 我们可以来分别看看 (1)执行try中的return时 public class Solution {public static int show() {try {return 1;}finally{System.out.println("finally模块被执行");}}publi…

第7章链接:如何动态连接共享库、从应用程序中加载和链接共享库

文章目录 7.10 动态链接共享库静态库的缺点何为共享库共享库的"共享"的含义动态链接过程 7.11 从应用程序中加载和链接共享库运行时动态加载和连接共享库的接口 dlopen函数 dlsym函数 dlclose函数 dlerror动态加载和链接共享库的应用程序示例 7.10 动态链接共享库 静…

强化学习路线规划之深度强化学习代码

虽然说很多代码都有问题&#xff0c;但是不管它们&#xff0c;我不是为了去debug&#xff0c;紧盯住自己的目标&#xff0c;目标是整理出一条通常的强化学习之路&#xff0c;让自己以及看到这些博客的大家在学习的时候能够少走一些弯路。所以从q-learning和Sarsa开始&#xff0…

buuctf9

目录 web [ZJCTF 2019]NiZhuanSiWei misc [BJDCTF2020]认真你就输了 刷新过的图片 crypto 篱笆墙的影子 RSA web [ZJCTF 2019]NiZhuanSiWei 1.启动环境 <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password…

UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法

UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法 目录 UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法前言问题及解决办法1. The following modules are missing or built with a different engine version: MathWorksAerospace MathWorksSimulation MathWorksUAV Eng…

IMX6Ull内核移植详细过程讲解

文章目录 一、安装相应依赖包二、下载相应的内核版本库&#xff08;1&#xff09;讲解官网内核分支&#xff08;2&#xff09;下载内核版本库&#xff08;3&#xff09;内核目录文件讲解 三、开始内核移植过程&#xff08;1&#xff09;步骤一、修改默认架构和默认交叉编译器&a…

modbus协议与nodejs modbus-serial实现

nodejs可通过modbus-serial库来实现modbus协议 npm install modbus-srial 安装完后在examples目录下有例子说明如何使用&#xff0c;本文主要讲述作为客户端的使用方式。 polling_RTU是使用485串口来实现modbus通信&#xff0c; polling_TCP和 polling_UDP则使用TCP/UDP来实现…

HBuilderX使用

HBuilderX使用&#xff08;Vue前后端分离&#xff09; 概述&#xff1a;DCloud开发者后台 DAccount Service 1、官网下载开发工具&#xff1a;HBuilderX-高效极客技巧 注意&#xff1a;安装目录路径中不能出现中文特殊字符&#xff0c;否则会造成项目无法编译。比如C:/Progr…

learn_C_deep_10 深刻认识C语言重点操作符

目录 注释符号 其他注释方法 注释建议 接续符和转义符 在续行符\之前或者之后带上空格&#xff0c;行不行&#xff1f; \n&#xff1a;换行符与\r&#xff1a;回车符之间的区别 两个小程序(旋转光标、倒计时) 单引号和双引号 ​编辑abcd这样写有问题吗? 特殊情况 为…

ThinkPHP6表单上传的数据获取的四种方式【请求对象调用,静态调用,助手函数调用,原生的get|post】

ThinkPHP6表单上传的数据获取 首先一个form表单中的Input控件需要存在对应的name值&#xff0c;然后method为post|get,action为要提交到的控制器的哪个方法 例如(本文的前端视图代码均为下面的html)&#xff1a; <form method"post" action"/index.php/lo…

Hard Patches Mining for Masked Image Modeling

摘要 蒙面图像建模&#xff08;MIM&#xff09;因其在学习可伸缩视觉表示方面的潜力而引起了广泛的研究关注。在典型的方法中&#xff0c;模型通常侧重于预测掩码补丁的特定内容&#xff0c;并且它们的性能与预定义的掩码策略高度相关。直观地说&#xff0c;这个过程可以被看作…

应用架构总结

架构目标 高可用性 整体系统可用性最低99.9%&#xff0c;目标99.99%。全年故障时间整个系统不超过500分钟&#xff0c;单个系统故障不超过50分钟。 高可扩展性 系统架构简单清晰&#xff0c;应用系统间耦合低&#xff0c;容易水平扩展&#xff0c;业务功能增改方便快捷。 低成…

IOS APP universal links 申请流程

一、背景 项目框架&#xff1a;APP h5 需求&#xff1a;APP首页可以选择微信&#xff0c;进行授权登录。 问题&#xff1a;在APP跳转到微信进行授权的时候&#xff0c;提示“由于应用universal link校验不通过&#xff0c;无法完成微信登录”。 二、申请流程 1. 苹果后台管…

XML语言简介和语法介绍

XML语言简介 文章目录 XML语言简介用途各部分注解声明元素属性注释CDATA转义字符 可拓展标记语言&#xff1b;是SGML的子集&#xff0c;可以描述很复杂的数据关系 用途 用于组织和存储数据&#xff0c;除此之外都和XML本身无关 配置文件(例子&#xff1a;Tomcat的web.xml,se…