SpringMVC框架--个人笔记步骤总结

一、步骤

1.创建工程

2.加入springmvc依赖--pom.xml

<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>


<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!--jackson依赖:字符串转换-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>

3.创建springmvc的配置文件

如果没有证明没有引入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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


</beans>

<?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="Index of /schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd Index of /schema/context https://www.springframework.org/schema/context/spring-context.xsd Index of /schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--包扫描-->

<context:component-scan base-package="com.wjy.controller"/>

<!--开启注解驱动-->

<mvc:annotation-driven/>

<!--视图解析-->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/views/"/>

<property name="suffix" value=".jsp"/>

</bean>

</beans>

4.注册servlet

<?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="Java EE: XML Schemas for Java EE Deployment Descriptors http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

</web-app>

<?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">

    <!--注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc01</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--classpath编译后的路径-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <!--servlet映射 /表示任意路径 -->
    <servlet-mapping>
        <servlet-name>springmvc01</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

5.创建控制层处理类

6.部署tomcat并访问

二、

1.流程

1.客户端发送请求:http://localhost:8080/hello

2.来到tomcat服务器

3.springmvc的前端控制器DipatcherServlet接受所有的请求

4.查看你的请求地址和哪个@RequesMaping匹配。

5.执行对应的方法。方法返回一个字符串。

6.springmvc把该字符串解析【视图解析器】为要转发的网页。把该字符串经过视图解析器拼接。/prefix/字符串.后缀

7.拿到拼接的地址,找到对应的网页。

8.渲染该网页给客户。

2.springmvc接收参数

2.1接收少量参数

比如删除时,传递一个参数

2.2接收大量参数

表单提交的数据--大量数据,我们可以封装到一个类中。

控制层代码

3.解决中文乱码问题

只能使用过滤器

3.1第一种方式

自己定义时使用的servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>

package com.wjy.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        chain.doFilter(request,response);
    }

    public void destroy() {

    }
}

3.2第二种--web.xml

使用spring提供的编码过滤器

<!--注册编码过滤器-->

<filter>

<filter-name>encodingFilter</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>

<init-param>

<param-name>forceRequestEncoding</param-name>

<param-value>true</param-value>

</init-param>

<init-param>

<param-name>forceResponseEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

4.处理日期类

5.处理静态资源--springmvc.xml

<!--放行静态资源:只处理servlet请求,其他的请求不会经过springmvc-->
<mvc:default-servlet-handler/>

6.小测试

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String username;
    private String password;
// 日期格式转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
//日期显示时间戳
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//json的格式
    private Date birthday;
}

搭建好上面的框架后(一、步骤的内容)写控制处理类的内容--关于登录

@Controller
public class LoginController {
    @RequestMapping("/g")//跳转的位置
    public String login(User user){
        if ("admin".equals(user.getUsername())&&"123".equals(user.getPassword())){
            return "success";//符合要求--经过视图解析器(转发):/views/success.jsp
        }
        return "redirect:/login.jsp";//重定向跳转--且不经过视图解析器
    }
}

三、

1. 控制层如何保存数据到页面

Servlet保存数据可以使用四大域对象:PageContext、Request、Session、Appliaction

request.setAttribute(key,value);//存放数据到request中

request.getAttribute(key);或者${key}//获取request对象中保存的数据

第一种:先加入session依赖才能使用

<!--servlet依赖-->

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

第二种:springmvc封装好的,直接加入注解使用

总结:

spring保存数据可以像之前servlet保存数据一样。也可以使用model类对象保存

model类中保存数据默认作用域request,设置作用域为session。@SessionAttributes(value={"key"})

2. springmvc返回json数据

1.ajax异步请求时需要响应json数据

实现ajax的方式:①jquery②axios

2.servlet之前响应json数据的步骤:

①引入fastjson依赖

②JSON.toJsonString(java对象)//把java对象转化为json字符串

③out.print(json数据)

④out.flush();out.close();

3.springmvc响应json数据

1.引入jackson依赖

2.在controller方法上使用@ResponseBody:java对象转化为json字符串

3.该方法返回类型java对象

①引入依赖jackson

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>

 @RequestMapping("/ajax01")
    @ResponseBody//把该方法返回的java对象转化为json字符串--jackson
    public User ajax01(){
        User user = new User("wjy","123456",new Date());
        return user;
    }

    @RequestMapping("/ajax02")
    @ResponseBody
    public List<User> ajax02(){
        ArrayList<User> users = new ArrayList<User>();
        users.add(new User("王佳瑶","1203",new Date()));
        users.add(new User("高元浩","0906",new Date()));
        return users;
    }

2.1日期显示时间戳

// 日期格式转换
@DateTimeFormat(pattern = "yyyy-MM-dd")
//日期显示时间戳,timezone表示时区,GMT+8表示东八区(中国)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//json的格式
private Date birthday;

3. springmvc全局异常处理

当controller出现异常时,全部交于springmvc的全局异常处理类解决

@ControllerAdvice//控制层的异常处理
public class MyGlobeExceptionHandler {
    //当控制层发生RuntimeException异常类型时交于该方法处理
    @ExceptionHandler(value = RuntimeException.class)
    public String my01(RuntimeException e){//把异常处理的对象交于该方法的参数
        System.out.println("发生了运行时异常");
        return "fail";
    }

    //当控制层发生Exception异常类型时交于该方法处理
    @ExceptionHandler(value = Exception.class)
    public String my02(Exception e){//把异常处理的对象交于该方法的参数
        System.out.println("发生了Exception时异常");
        return "fail";
    }
}
    @RequestMapping("/list01")
    public String list01(HttpSession session,int id) throws Exception {
        //如果上面的异常处理类只有一个Exception异常不管这里有什么异常它都会执行
        //Exception所有异常的父类
        if(id==1){//等于1时会输出第一个异常
            int c=10/0;
        }else if(id==2){//输出第二个异常
            throw new Exception("~~~~~~~~");
        }
        //保存数据到session
        session.setAttribute("name","王五");
        return "redirect:/views/main.jsp";
    }

3.扫描异常处理类

<!--com.wjy:扫描该包以及该包下的子包(范围广)-->
<context:component-scan base-package="com.wjy"/>
<!--扫描多个包之间使用逗号隔开-->
<context:component-scan base-package="com.wjy.Controller,com.wjy.handle"/>

4. springmvc拦截器

之前使用filter过滤,拦截不符合要求的一切请求资源

拦截器:拦截器只会拦截controller层的资源

4.1创建一个拦截器

public class MyInterceptor implements HandlerInterceptor {
    //前缀拦截器--Boolean。如果返回true允许放行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception{
        System.out.println("拦截器");
        return false;
    }
}

4.2配置拦截规则

<!--配置拦截器规则-->
<mvc:interceptors>
<mvc:interceptor>
<!--mapping:拦截的规则/**:表示多层路径-->
<mvc:mapping path="/**"/>
<!--exclude-mapping:不会被拦截的路径-->
<mvc:exclude-mapping path="/g"/>
<!--bean:表示自定义的拦截器的路径-->
<bean class="com.wjy.interceptor.MyInterceptor"/>
</mvc:interceptor>


</mvc:interceptors>

5.restful风格

@ResController:控制层类(表示该类中所有的方法返回的都是json数据)

@GetMapping():只处理get请求方式(一般处理查询请求)

@PostMapping():添加 (使用Post发送请求)

@DeleteMapping():删除

@PutMapping():修改

@RequestBody:把json字符串转化为java对象,使用在方法的参数上

四、文件上传

1.引入上传的依赖

<!--文件上传依赖-->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.4</version>

</dependency>

2.配置文件上传的拦截器

<!--文件上传解析器 id:必须为multipartResolver-->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!--设置文件上传的大小 单位为byte字节 1M=1024kb=1024b 10*1024*1024-->

<property name="maxUploadSize" value="10485760"/>

<!--设置编码-->

<property name="defaultEncoding" value="utf-8"/>

</bean>

3.完成上传文件的代码

<%--表单: 提交方式必须为post enctype编码:multipart/form-data文件编码--%>

<form method="post" action="/upload" enctype="multipart/form-data">

<%--input必须设置文件文件框 而且必须起名称--%>

选择上传的文件:<input type="file" name="myfile"/><br>

<input type="submit" value="上传"/>

</form>

1.本地上传

@Controller

public class UploadController {

/**

*

* @param myfile 接受你上传的文件对象信息封装到该类。该类中可以获取上传文件的信息。比如:文件名 文件大小 文件后缀等

* 这个名称必须为文件上传表单的文件框的名称一致

* @return

*/

@PostMapping("/upload")

public String upload(MultipartFile myfile, HttpServletRequest request) throws IOException {

//获取tomcat上下文中的指定目录的路径

String realPath = request.getSession().getServletContext().getRealPath("/upload");

//根据上面的路径创建一个文件对象

File file=new File(realPath);

//如果没有该目录则创建

if (!file.exists()) {

file.mkdirs();

}

//把上传的文件转移到upload目录下--重名覆盖了

String uuid = UUID.randomUUID().toString().replace("-", "");

File target=new File(realPath+"/"+(uuid+myfile.getOriginalFilename()));

myfile.transferTo(target);

return "success";

}

}

2.Oss服务器上传

  1. 如果项目搭建了集群。那么导致文件数据无法共享。
  2. 如果项目的target删除了。导致文件数据丢失。

引入oss的依赖[jdk8]

<dependency>

<groupId>com.aliyun.oss</groupId>

<artifactId>aliyun-sdk-oss</artifactId>

<version>3.15.1</version>

</dependency>

代码

 @PostMapping("/upload2")
    public String upload(MultipartFile file){
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "qy174-wjy-01";
        //上传到oss后的名字
        String objectName = UUID.randomUUID().toString().replace("-","")+file.getOriginalFilename();
        // 创建OSSClient实例。
        /**
         * String endpoint,自己的endpoint
         * String accessKeyId, 自己的id
         * String secretAccessKey自己的密钥
         */
        String accessKeyId="LTAI5tGhFRyaoCHa7jm7Mjzx";
        String secretAccessKey="dkOIOg15IDUJZ2LJCOU4Tz7arnGfOC";
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);

        try {
            InputStream inputStream = file.getInputStream();
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
             //上传的地址
            String path="https://"+bucketName+"."+endpoint+"/"+objectName;
            return path;
        } catch (Exception oe) {
        }
        finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return "失败";
    }
<%-- 添加对话的开始--%>
<el-dialog title="添加" :visible.sync="addDialogForm">
    <el-form ref="addForm" :rules="rules" :model="addForm" label-width="80px">
        <el-form-item label="广告标题" prop="title">
            <el-input v-model="addForm.title"></el-input>
        </el-form-item>
        <el-form-item label="广告照片" prop="imageUrl">
         <%--   action:文件上传的路径
            show-file-list:列表的数列值
                on-success:上传成功触发的函数
                before-upload:上传前触发的函数--%>
            <el-upload
                    class="avatar-uploader"
                    action="/upload"
                    :show-file-list="false"
                    :on-success="handleAvatarSuccess"
                    :before-upload="beforeAvatarUpload"
                    <%-- v-model="addForm.imageUrl"--%>
            >
                <img v-if="imageUrl" :src="imageUrl" class="avatar">
                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click="addSubmit('addForm')">提交</el-button>
            <el-button @click="addDialogForm=false">取消</el-button>
        </el-form-item>
    </el-form>
</el-dialog>
<%-- 添加对话的结束--%>

 //上传后的地址
            handleAvatarSuccess(res, file) {
                this.imageUrl = res;
               /* let reader = new FileReader()
                reader.readAsDataURL(file.raw)
                reader.onload = () => {
                    this.imageUrl  = reader.result
                }*/
            },
            //上传前触发的函数
            beforeAvatarUpload(file) {
                const isJPG = file.type === 'image/jpeg';
                const isLt2M = file.size / 1024 / 1024 < 2;

                if (!isJPG) {
                    this.$message.error('上传头像图片只能是 JPG 格式!');
                }
                if (!isLt2M) {
                    this.$message.error('上传头像图片大小不能超过 2MB!');
                }
                return isJPG && isLt2M;
            },


            //点击添加--打开对话框
            showAdd(){
                this.addDialogForm=true;
            },
            //确认添加
            addSubmit(formName){
                this.$refs[formName].validate((valid)=> {
                    if (valid) {
                        this.addForm.imageUrl = this.imageUrl;
                        this.addDialogForm = false;
                        axios.post("insertLunBo", this.addForm).then(result => {
                            if (result.data.code === 200) {
                                this.$message.success(result.data.msg);
                                this.addForm = {};
                                this.loadMessage();
                            } else {
                                this.$message.error(result.data.msg);
                            }
                        })
                    }
                })
            },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins系列-07.轻易级jpom安装

jpom是一个容器化服务管理工具&#xff1a;在线构建&#xff0c;自动部署&#xff0c;日常运维, 比jenkins轻量多了。 本篇介绍mac m1安装jpom: #下载&#xff1a;https://jpom.top/pages/all-downloads/ 解压&#xff1a;/Users/jelex/Documents/work/jpom-2.10.40 启动前修…

C语言 ——— 编写代码,判断 整型数组 是否 有序

目录 题目要求 代码实现 题目要求 判断 整型数组 是否有序 如果 整型数组 有序输出 sorted&#xff1b;否则输出 unsorted 代码实现 #include<stdio.h> int main() {int arr[10] { 0 };int sz sizeof(arr) / sizeof(arr[0]);//输入for (int i 0; i < sz; i){s…

Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习&#xff08;Language Models and Representation Learning&#xff09; 1 语言模型 N-Gram模型 from collections import defaultdictsentences [The swift fox jumps over the lazy dog.,The swift river flows under the ancient bridge.,The swift br…

分页查询

1 基础分页 1.1需求分析 我们之前做的查询功能&#xff0c;是将数据库中所有的数据查询出来并展示到页面上&#xff0c;试想如果数据库中的数据有很多(假设有十几万条)的时候&#xff0c;将数据全部展示出来肯定不现实&#xff0c;那如何解决这个问题呢&#xff1f; 使用分页…

【网络安全】PostMessage:分析JS实现XSS

未经许可&#xff0c;不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器…

中转程序理解

P1S SRV ParserCfgFile解析配置文件&#xff08;由ATS.XML---->ATS.BIN&#xff09; CCHandler 循环调用接口&#xff0c;继承于CycleSchInterface 继承于DcsHandler800&#xff0c;收发DCS报文 继承于MsgProcessor&#xff0c;好像 收发同步消息有关 继承于DcsLogMana…

微软的vscode和vs2022快捷键官网链接

vscode官方文档:https://code.visualstudio.com/docs/ vscode快捷键官方文档:https://code.visualstudio.com/docs/getstarted/keybindings vs2022官方文档:https://learn.microsoft.com/zh-cn/visualstudio/ide/?viewvs-2022 vscode快捷键官方文档:https://learn.microsoft.c…

论文学习——基于自适应选择的动态多目标进化优化有效响应策略

论文题目&#xff1a;Effective response strategies based on adaptive selection for dynamic multi-objective evolutionary optimization 基于自适应选择的动态多目标进化优化有效响应策略&#xff08;Xiaoli Li a,b,c, Anran Cao a,∗, Kang Wang a&#xff09;Applied S…

MongoDB常用命令大全,概述、备份恢复

文章目录 一、MongoDB简介二、服务启动停止、连接三、数据库相关四、集合操作五、文档操作六、数据备份与恢复/导入导出数据6.1 mongodump备份数据库6.2 mongorestore还原数据库6.3 mongoexport导出表 或 表中部分字段6.4 mongoimport导入表 或 表中部分字段 七、其他常用命令八…

HarmonyOS 开发者联盟高级认证最新题库

本篇文章包含 Next 版本更新后高级认证题库中95%的题目。 答案正确率 50-60%&#xff0c;答案仅做参考。 请在考试前重点看一遍题目&#xff0c;勿要盲目抄答案。 欢迎在评论留言正确答案和未整理的题目。 1、下面关于方舟字节码格式PREF_IMM16_v8_v8描述正确的是 16位前缀操作…

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建 文章目录 STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建典型工作流程 1. 硬件原理图介绍1.1 USART硬件介绍1.2 LED和按键介绍 2. STM32 CubeMX工程搭建2.1 创建工程2.2 系统配置2.3 USART串口配置2.4 配置按键G…

汇总国内镜像提供了Redis的下载地址

文章目录 1. 清华大学开源软件镜像站&#xff1a;2. 中国科技大学开源软件镜像&#xff1a;3. 阿里云镜像&#xff1a;4. 华为云镜像&#xff1a;5. 腾讯云镜像&#xff1a;6. 网易开源镜像站7. 官方GitHub仓库&#xff08;虽然不是镜像&#xff0c;但也是一个可靠的下载源&…

java学习笔记(浓缩版)

一.数据类型 整型&#xff08;4个&#xff09;&#xff1a; byte&#xff08;字节型&#xff09;、short&#xff08;短整型&#xff09;、int&#xff08;整型&#xff09;、long&#xff08;长整型&#xff09; 浮点型&#xff08;2个&#xff09;&#xff1a;float&#x…

彻底改变时尚:使用 GAN 实现 AI 的未来

彻底改变时尚&#xff1a;使用 GAN 实现 AI 的未来 一、介绍 想象一下&#xff0c;在这个世界里&#xff0c;时装设计师永远不会用完新想法&#xff0c;我们穿的每一件衣服都是一件艺术品。听起来很有趣&#xff0c;对吧&#xff1f;好吧&#xff0c;我们可以在通用对抗网络 &a…

Postman安装使用教程(详解)

目录 一、Postman是什么 二、安装系统要求 三、下载Postman 四、注册和登录Postman 五、创建工作空间 六、创建请求 一、Postman是什么 在安装之前&#xff0c;让我们先来简单了解一下Postman。Postman是一个流行的API开发工具&#xff0c;它提供了友好的用户界面用于发送…

Python 实现股票指标计算——WR

WR - 威廉指标 1 公式 威廉指标的计算公式为&#xff1a; 其中&#xff1a; &#x1d43b;&#x1d45b;​ 是过去n日内的最高价。 &#x1d43f;&#x1d45b;​ 是过去n日内的最低价。 &#x1d436; 是当前收盘价。 2 数据准备 我们以科创50指数 000688 为例&#xff0c…

如何打造一个专属网盘?可道云teamOS这些个性化设置了解一下

在这个数字化时代&#xff0c;企业对于云端存储和协作工具的需求日益增长。而网盘作为企业协作的重要工具之一&#xff0c;其个性化、定制化的需求也日益凸显。 今天&#xff0c;我要为大家介绍的是一款高度个性化的企业网盘——可道云teamOS。 满足个性化需求的企业网盘 可…

连锁直营店小程序赋能多店如何管理

如商超便利店卖货线下场景&#xff0c;也有不少品牌以同城多店和多地开店经营为主&#xff0c;获取店铺周围客户和散流&#xff0c;如今线上重要性凸显&#xff0c;品牌电商发展是经营的重要方式之一&#xff0c;也是完善同城和外地客户随时便捷消费的方式之一。 多个门店管理…

ESP8266模块简单连接以及作为作为Station连接“服务器”的问题(ERROR CLOSED)

ESP8266简介 AT指令集是从终端设备&#xff08;Terminal Equipment&#xff0c;TE)或数据终端设备&#xff08;Data Terminal Equipment&#xff0c;DTE)向终端适配器(Terminal Adapter&#xff0c;TA)或数据电路终端设备(Data CircuitTerminal Equipment&#xff0c;DCE)发送…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-17 I2C通信协议原理

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…