Springmvc 讲解(1)

文章目录

  • 前言
  • 一、SpringMvc
    • 1、简介
    • 2、核心组件和调用流程
      • 2.1 涉及组件的理解
    • 3、小案例快速体验
      • 3.1场景需求
        • 3.1.1 导入依赖
        • 3.1.2 controller声明
        • 3.1.3 核心配置类
        • 3.1.4 环境搭建
        • 3.1.6 配置tomcat
        • 3.1.7 测试
  • 二、SpringMvc 接收参数
    • 1.路径设置注解
    • 2、param接收参数四种类型
      • 2.1 直接接收值
      • 2.2 @RequetParam
      • 2.3 一名多值
      • 2.4 实体类型
    • 3、路径参数接收
    • 4、json格式接收参数
    • 5、@EnableWebMvc 注解
    • 6、接收请求头和cookie
      • 6.1 接收请求头
      • 6.2 接收Cookie
    • 7、原生API的获取
    • 8、共享域对象操作
      • 8.1 属性共享域回顾
  • 接收参数总结![在这里插入图片描述](https://img-blog.csdnimg.cn/27a784ecdfb44831aa7c452a741dee64.png)


前言

再此之前,我已经学习也发过了关系maven,SpringFramework以及Mybatis的文章了,
现在,我们开始来学习关于SpringMvc这个控制层框架。
在这里插入图片描述

一、SpringMvc

1、简介

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。
在没有SpringMvc该框架之前,我们都是使用servlet以及过滤器等来接收前端信息或者返回给用户信息,Springmvc可以帮助我们 1. 简化前端参数接收( 形参列表 )2. 简化后端数据响应(返回值),这也是Springmvc最主要的两个功能。

2、核心组件和调用流程

Spring MVC与许多其他Web框架一样,是围绕前端控制器模式设计的,其中中央 Servlet DispatcherServlet 做整体请求处理调度!

除了DispatcherServletSpringMVC还会提供其他特殊的组件协作完成请求处理和响应呈现。
在这里插入图片描述

2.1 涉及组件的理解

  1. DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
  2. HandlerMapping : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler![秘书]
  3. HandlerAdapter : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]
  4. Handler : handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]
  5. ViewResovler : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

自己的理解:
在我们前端访问页面时,需要访问一个地址,该访问页面会调用我们java中的一个方法(Handler),HandlerMapping 相当于将我们的访问地址与该Handler 映射,访问所有地址都会先经过Dispatcherservlet(CEO),去查HandlerMapping(秘书)有没有该地址对应的方法,如果有,接着HandlerAdapter(经理)服务,它是handler与dispatchersevlet的一个适配器,用来将我们的request内容变为我们handler可以直接接收的字符,同时也可以将handler返回的json等变回浏览器支持的格式,ViewResovler(财务)可以简化模板视图页面的查找,可以添加一个统一的前缀与后缀,比如前缀为 cky/ 后缀为.html 如果我们直接返回 login 就会自动拼接成cky/login.html 会自动去返回该模板页面。ViewResovler并不是必须的,如果后端不返回页面,就不需要视图解析器。

3、小案例快速体验

3.1场景需求

![在这里插入图片描述](https://img-blog.csdnimg.cn/11b2a36dcd1e476a9e2d5851e46bfb32.png在这里插入图片描述

创建一个idea maven项目(注意导成web项目),编写handler方法,请求响应一个输出。

3.1.1 导入依赖
<properties><spring.version>6.0.6</spring.version><servlet.api>9.1.0</servlet.api><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><!-- springioc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- web相关依赖  --><!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 --><!--在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,因此在配置 DispatcherServlet 时需要使用Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的Servlet API,没有更新到 Jakarta EE 规范。--><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>${servlet.api}</version><scope>provided</scope></dependency><!-- springwebmvc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency></dependencies>
3.1.2 controller声明
@Controller
public class HelloController {//handlers/*** handler就是controller内部的具体方法* @RequestMapping("/springmvc/hello") 就是用来向handlerMapping中注册的方法注解!* @ResponseBody 代表向浏览器直接返回数据!*/@RequestMapping("/springmvc/hello")@ResponseBodypublic String hello(){System.out.println("HelloController.hello");return "hello springmvc!!";}
}
3.1.3 核心配置类

声明springmvc涉及组件信息的配置类`

//TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]//TODO: 导入handlerMapping和handlerAdapter的三种方式//1.自动导入handlerMapping和handlerAdapter [推荐]//2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载//3.使用@Bean方式配置handlerMapper和handlerAdapter
@EnableWebMvc     
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {@Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}@Beanpublic HandlerAdapter handlerAdapter(){return new RequestMappingHandlerAdapter();}}
3.1.4 环境搭建

对于使用基于 Java 的 Spring 配置的应用程序,建议这样做,如以下示例所示:

//TODO: SpringMVC提供的接口,是替代web.xml的方案,更方便实现完全注解方式ssm处理!
//TODO: Springmvc框架会自动检查当前类的实现类,会自动加载 getRootConfigClasses / getServletConfigClasses 提供的配置类
//TODO: getServletMappings 返回的地址 设置DispatherServlet对应处理的地址
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定service / mapper层的配置类*/@Overrideprotected Class<?>[] getRootConfigClasses() {return null;}/*** 指定springmvc的配置类* @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { SpringMvcConfig.class };}/*** 设置dispatcherServlet的处理路径!* 一般情况下为 / 代表处理所有请求!*/@Overrideprotected String[] getServletMappings() {return new String[] { "/" };}
}
3.1.6 配置tomcat

在这里插入图片描述
"注意选择 Tomcat Server
之后又出现了Tomcat 8080 in use的问题

解决办法点击此处

3.1.7 测试

在这里插入图片描述

二、SpringMvc 接收参数

1.路径设置注解

package com.cky.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller  //组件
@ResponseBody  //直接返回给浏览器信息
@RestController //==Controller+ResponseBody
@RequestMapping("/user")
public class UserContorller {@RequestMapping //什么都不加 表示直接使用类方法上的访问地址public String index(){return null;}@GetMapping("/login")@RequestMapping(value = "/login",method = RequestMethod.GET)public String login(){return null;}@RequestMapping("/register")public String register(){return null;}
}

注解:

/*** RequestMapping 地址映射* RequestMapping 对/的要求不高 比如/user/login 也可以写成 user/login 或者/user/login/* WebSevrlet  开头就必须加/* 1、精准地址:可以1个也可以多个 多个的时候 用{地址1,地址2...}* 2、模糊地址 *     * 表示一层模糊  **表示任意层模糊*     比如 user/* ===》user/a user/b 等*     user/** ===》 user/a/b/...   user  等* 3、类上和方法上添加@ReqquestMapping 的区别:*    类上 可以不加 加的话 表示一个通用的地址*    方法上必须加  表示精准的访问地址*    如果类上没有 则直接使用方法上的*    如果类上有 访问地址就是类上+方法上的* 4、请求方式指定* get、post、put、delete* 客户端->http->ds->handler* 默认不加请求方式情况 是任何访问都可以* 请求方式指定 比如:    @RequestMapping(value = "/user/login",method = RequestMethod.POST)*          可以多个    @RequestMapping(value = "/user/login",method = {RequestMethod.POST,RequestMethod.GET})* 如果请求方式不正确,会返回405异常* 5、注解进阶 这种只能用在方法上!!!*   get  @GetMapping("/login")==》 @RequestMapping(value = "/login",method = RequestMethod.GET)*   post @PostMapping("/login")*   put @PutMapping("/login")*   delete @DeleteMapping("/login")*/

2、param接收参数四种类型

2.1 直接接收值

直接接值 可传可不传 不传不会报错 传值必须与形参名相同
对于这种不用返回视图函数的 记得加上 @ResponseBody //表示我们直接向浏览器返回数据
否则浏览器会报错

     @RequestMapping("emp/login")public String login(String name,Integer age){System.out.println("name:"+name+",age:"+age);return "name:"+name+",age:"+age ;}

2.2 @RequetParam

//@RequestParam(name/value=“重置参数名”,required="true/false" 【默认为true,当配置为false时,我们可以配置默认值】,defaultValue)
// 注解  默认是必须传值 当设置为false时 可以设置默认值
@RequestMapping("emp/register")public String register(@RequestParam(value = "user",required = false,defaultValue = "root") String username, int pwd){System.out.println("name:"+username+",pwd:"+pwd);return "name:"+username+",pwd:"+pwd ;
}

2.3 一名多值

参数上必须要加上@RequestParam,不然就会只将一个值 直接传给列表接收

 //一key 多值@RequestMapping("emp/test")public String test(@RequestParam List<String> hbs){System.out.println(hbs);return "ok";}

2.4 实体类型

首先要有实体类 有get和set方法

package com.cky.pojo;import lombok.Data;@Data
public class Employee {private String name;private int age;
}
//实体类接收@RequestMapping("emp")public  String employee(Employee employee){System.out.println(employee);return employee.getName();}
}性来传值,实体类属性可以直接再实体类上设置默认值。

3、路径参数接收

比如 user/root/123456
root 和123456 是我们要接收的参数
在这里 我们就要设置动态路径参数 {key}代表这里是路径参数
参数上 要加@PathVariable 注解
证明接收的是路径参数 否则会按照@Param参数来接值
该注解 也可以重置参数名 以及可以确定是否必须传参数 以及默认值

   传入时必须按照实体类属   //路径参数接收@RequestMapping("path/{name}/{pwd}")public String path(@PathVariable String name,@PathVariable Integer pwd){System.out.println("name:"+name+",pwd:"+pwd);return "name:"+name+",pwd:"+pwd;

4、json格式接收参数

前端传递 JSON 数据时,Spring MVC 框架可以使用 @RequestBody 注解来将 JSON 数据转换为 Java 对象。@RequestBody 注解表示当前方法参数的值应该从请求体中获取,并且需要指定 value 属性来指示请求体应该映射到哪个参数上。
其使用方式和示例代码如下:

1、前端发送 JSON 数据的示例:(使用postman测试)

{
"name": "张三",
"age": 18,
"gender": "男"
}

2、定义一个用于接收 JSON 数据的 Java 类,例如:

@Data
public class Person {
private String name;
private int age;
private String gender;
// getter 和 setter 略
}

3、创建一个handler
在控制器中,使用 @RequestBody 注解来接收 JSON 数据,并将其转换为 Java 对象,例如:

  package com.cky.controller;import com.cky.pojo.Person;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.ResponseBody;@Controller@ResponseBodypublic class PersonController {
@PostMapping("/json/data")
//RequestBody 代表我们接收的是信息体
//java并不接收 json的数据格式 我们需要配置
public String test(@RequestBody Person person){System.out.println(person);return person.getName()+person.getGender();
}}    

4、配置json转换器
java原生并不接收json数据,我们需要进行配置,
让Handleradapter 可以进行json转换
首先导入json依赖

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

接着要在配置类上加上**@EnableWebMvc**注解。效果等同于在 XML 配置中,可以使用 <mvc:annotation-driven> 元素!我们来解析<mvc:annotation-driven>对应的解析工作!
@EnableWebMvc注解表示 让HandlerAdapter配置了json转化器

5、结果

在这里插入图片描述

5、@EnableWebMvc 注解

在配置类上添加上 该注解,效果等同于在 XML 配置中,可以使用 <mvc:annotation-driven> 元素!
使用该注解 就等同于同时添加上了 我们所谓的经理Handleradapter和秘书Handlermapping,同时为经理添加上了json转换器,写上该注解之后,其实配置类中就不用导入第三方经理和秘书的类。
可省略:

 @Beanpublic HandlerAdapter HandlerMapping(){return new RequestMappingHandlerAdapter();}@Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}

6、接收请求头和cookie

6.1 接收请求头

接收请求头 要加上注解 @RequestHeader(xxx) xxx代表我们要接收请求头的内容


@Controller
@ResponseBody
public class HeaderContorller {@RequestMapping("header")public String cookie(@RequestHeader("Host") String host){return host;}
}

在这里插入图片描述

6.2 接收Cookie

可以使用 @CookieValue 注释将 HTTP Cookie 的值绑定到控制器中的方法参数。

  @RequestMapping("save")public String save(HttpServletResponse httpServletResponse){Cookie cookie=new Cookie("username","root");httpServletResponse.addCookie(cookie);//保存了一个cookie 名为username 值为rootreturn "ok";}@RequestMapping("cookie")//通过@CookieValue 来获取相应cookie值的内容public String cookie(@CookieValue("username") String name){return name;}

7、原生API的获取

比如java的一些原生api,我们可以在形参列表中自动获取
比如:

  @Autowired //直接注入 ioc容器获取该类的组件对象 装配到ioc容器中private ServletContext servletContext;public String apiget(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest, HttpSession httpSession){//接下来要进行什么操作 直接使用即可httpSession.getServletContext();httpServletRequest.getServletContext();return null;}/**对于servletContext 我们如何获取呢?* 方案1: 使用request/session获取*         httpSession.getServletContext();*         httpServletRequest.getServletContext();* 方案2*    直接全局注入*/

springmvc会在初始化容器的时候,讲servletContext对象存储到ioc容器中!

8、共享域对象操作

8.1 属性共享域回顾

在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContextHttpSessionHttpServletRequestPageContext

  1. ServletContext 共享域:ServletContext 对象可以在整个 Web 应用程序中共享数据,是最大的共享域。一般可以用于保存整个 Web 应用程序的全局配置信息,以及所有用户都共享的数据。在 ServletContext 中保存的数据是线程安全的。
  2. HttpSession 共享域:HttpSession 对象可以在同一用户发出的多个请求之间共享数据,但只能在同一个会话中使用。比如,可以将用户登录状态保存在 HttpSession 中,让用户在多个页面间保持登录状态。
  3. HttpServletRequest 共享域:HttpServletRequest 对象可以在同一个请求的多个处理器方法之间共享数据。比如,可以将请求的参数和属性存储在 HttpServletRequest 中,让处理器方法之间可以访问这些数据。(一次请求,多次转发,只有在服务器端跳转才有用)
  4. PageContext 共享域:PageContext 对象是在 JSP 页面Servlet 创建时自动创建的。它可以在 JSP 的各个作用域中共享数据,包括pageScoperequestScopesessionScopeapplicationScope 等作用域。
    共享域的作用是提供了方便实用的方式在同一 Web 应用程序的多个组件之间传递数据,并且可以将数据保存在不同的共享域中,根据需要进行选择和使用。
    在这里插入图片描述
    setAttribute()
    getAttribute()

接收参数总结在这里插入图片描述

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

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

相关文章

AD教程(一)工程组成及创建

AD教程&#xff08;一&#xff09;工程组成及创建 工程组成 原理图库 绘制电阻模型、芯片模型、电容模型等&#xff0c;即将元件模型绘制出来。 原理图 将绘制的原件模型放置到原理图中&#xff0c;然后再添加连接的导线、网络标号。器件和器件之间的连接关系&#xff0c;在原…

单片机中的 _nop_() 延时以及其相关的基础扩展

使用 _nop_() 函数做延时遇到的一些问题 以及对此延伸出的一些需要了解的基本概念 ...... by 矜辰所致 完善文章内容结构&#xff0c;补充指令周期、机器周期等一些基本概念 2023/10/25前言 最近还是继续做着项目&#xff0c;因为在某 8051 内核芯片上使用到了 I…

Docker数据卷

目录 1.bind mount 2.docker managed volume 1.bind mount docker run -it --rm -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/passwd:/mnt/passwd:ro busybox 2.docker managed volume docker run -d --name web1 webserver:v3 docker inspect web1 cd/var/lib/doc…

泰州市旅游景点门票预订管理系统 vue+uniapp微信小程序

本文从管理员、用户的功能要求出发&#xff0c;泰州市旅游景点管理小程序中的功能模块主要是实现用户、景点类型、景区信息、门票预定。经过认真细致的研究&#xff0c;精心准备和规划&#xff0c;最后测试成功&#xff0c;系统可以正常使用。分析功能调整与泰州市旅游景点管理…

leetcode经典面试150题---4.删除有序数组中的重复项II

目录 题目描述 前置知识 代码 方法一 双指针 思路 图解 实现 复杂度 题目描述 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&…

[java/力扣110]平衡二叉树——优化前后的两种方法

分析 根据平衡二叉树的定义&#xff0c;只需要满足&#xff1a;1、根节点两个子树的高度差不超过1&#xff1b;2、左右子树都为平衡二叉树 代码 public class BalancedBinaryTree {public class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(){}TreeNode(int va…

【OJ for Divide and Conquer】OJ题解

文章目录 A - Ultra-QuickSortB - Hanoi Tower Troubles Again! [找规律递归]C - Fibonacci Again[找规律]E - [Fire Net](https://programmerall.com/article/7276104269/)[DFS 搜索 ⭐⭐]F - Gridland[找规律]G - Maximum Subarray Sum[动态规划/分治..经典⭐]I - Quoit Desi…

C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分

涉及知识点 深度优化(DFS) 记忆化 题目 节点 0 处现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 。给你一个长度为 n - 1 的二维 整数 数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示在树上的节点 ai 和 bi 之间存在一条边。另给你一个下标从 0…

单目深度估计之图像重构原理解析

一、参考资料 浅析自监督深度估计中的光度损失(Photometric Loss) 二、图像重构原理 设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t 1 > <I_{t-1},I_{t},I_{t1}> <It−1​,It​,It1​>&#xff0c;其中 t t t 为时间索引&#xff0c;…

SA实战 ·《SpringCloud Alibaba实战》第12章-服务网关:网关概述与核心架构

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 大家好,我是冰河~~ 一不小心《SpringCloud Alibaba实战》专栏都更新到第12章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringClou…

电商API接口——实现数据同步的实时数据封装接口

常见的数据同步/集成场景多发生于不同的存储系统、不同的存储格式&#xff0c;如从 mysql 同步数据至数仓、excel 或 csv 导入数据库中&#xff0c;但是众多数据同步解决方案很少涉及从 http 接口同步数据。 如淘宝、拼多多等电商平台平台&#xff0c;平台内部不同团队之间的数…

pre-existing shared memory block

发生原因: 1.服务器cpu、内存进行扩容 2.非正常关闭,导致任在占用共享内存段 解决方案: 根据shmid进行关闭 ipcs -mipcrm -m xxx

JavaScript进阶知识汇总~

JavaScript 进阶 给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 1.原型链入门 1) 构造函数 当我们自定义一个函数时(箭头函数与生成器函数除外)&#xff0c;这个函…

LV.12 D13 C工程与寄存器封装 学习笔记

一、C语言工程简介 把模板在linux解压出来 代码写在interface.c就可以了。 map.lds是链接脚本文件&#xff08;负责代码的排布&#xff09; include中是头文件&#xff0c;src中是写好的源代码 start.s是启动代码&#xff0c;在interface.c之前运行&#xff0c;把cpu和栈做一…

mac vscode 使用 clangd

C 的智能提示 IntelliSense 非常不准&#xff0c;我们可以使用 clangd clangd 缺点就是配置繁琐&#xff0c;优点就是跳转和提示代码精准 开启 clangd 之后会提示你关闭 IntelliSense 1、安装插件 clangd 搜索第一个下载多的就是 2、配置 clangd 可执行程序路径 clangd 插…

【数据结构】面试OJ题——时间复杂度2

目录 一&#xff1a;移除元素 思路&#xff1a; 二&#xff1a;删除有序数组中的重复项 思路&#xff1a; 三&#xff1a;合并两个有序数组 思路1&#xff1a; 什么&#xff1f;你不知道qsort&#xff08;&#xff09; 思路2&#xff1a; 一&#xff1a;移除元素 27. 移…

L2-1 插松枝

L2-1 插松枝 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始…

IDEA 2023.2.2 使用 Scala 编译报错 No scalac found to compile scala sources

一、问题 scala: No scalac found to compile scala sources 官网 Bug 链接 二、临时解决方案 Incrementality Type 先变成 IDEA 类型 Please go to Settings > Build, Execution, Deployment > Compiler > Scala Compiler and change the Incrementality type to …

如何使用批量重命名的方法替换重复文件名内容

在文件管理过程中&#xff0c;我们有时会遇到文件名中包含相同部分内容的情况&#xff0c;这不仅会使文件显得混乱&#xff0c;而且还会给文件检索和使用带来不便。为了解决这个问题&#xff0c;我们可以使用云炫文件管理器批量重命名进行批量替换。下面是如何使用这种方法进行…

机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类

1. 预测波士顿房价 1.1 导包 from __future__ import absolute_import from __future__ import division from __future__ import print_functionimport itertoolsimport pandas as pd import tensorflow as tftf.logging.set_verbosity(tf.logging.INFO) 最后一行设置了Ten…