Spring MVC | Spring MVC 的“核心类” 和 “注解”
目录:
- Spring MVC 的“核心类” 和 “注解” :
- 1.DispatcherServlet (前端控制器)
- 2.@Controller 注解
- 3.RequestMapping 注解
- 3.1 @RequestMapping 注解的 “使用”
- 标注在 “方法” 上
- 标注在 “类” 上
- 3.2 @RequestMapping 注解的 “属性”
- 4.组合注解
- 4.1 请求处理方法的 “参数类型” 和 “返回值类型”
- 请求处理方法中的 “参数类型”
- 请求处理方法的 “返回值类型”
- 通过返回值“String类型”进行 “重定向”
- 通过返回值“String类型”进行 “请求forward转发”
- 5.ViewResolver(视图解析器)
Spring MVC 的“核心类” 和 “注解” :
- 在 Spring 2.5之前,只能使用实现Controller接口的方式来开发一个控制器,“SpringMVC的入门” 中例子的就是使用的此种方式。
- 在 Spring 2.5之后,新增加了基于注解的控制器以及其他一些 常用注解 (即Spring2.5之后,可以通过注解来操作Spring),这些注解的使用极大地减少了程序员的开发工作。
1.DispatcherServlet (前端控制器)
DispatcherServlet 的全名是 org.springframework.web.servlet.DispatcherServlet,它在程序中充当着 前端控制器 的角色。 在使用时,只需将其配置在项目的web.xml 文件 中。(在web.xml中配置 “前端控制器”)
在 web.xml 中 配置 DispatcherServlet (前端控制器) 的配置代码如下 :
<?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"><!-- 在web.xml中配置“前端控制器” : DispatcherServlet --><!-- 配置“前端过滤器” : DispatcherServlet --><!-- 假如下面没有通过init-param元素来配置“springmvc配置的位置的话”,应用程序会自动在web-inf目录下找名字为 : SpringMvc-servlet.xml的文件来充当“springmvc配置文件” (此处的名字和 DispatcherServlet的名称(SpringMvc)有关系) --><servlet><servlet-name>SpringMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化时加载SpringMVC的“配置文件” : springmvc-config.xml --><!-- 如果配置“前端控制器”时,没有用<init-param>元素配置“Springmvc配置文件的位置”,应用程序会到web-inf目录下找名字为: "servletName-servlet.xml" 的文件来充当 “springmvc配置文件” --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param><!-- 表示容器启动时立刻加载此Servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMvc</servlet-name><!-- 会将所有的url进行拦截 --><url-pattern>/</url-pattern></servlet-mapping> </web-app>在上述代码中,<load-on-startup>元素和<init-param>元素都是可选的。如果 <load-on-startup>元素的 值为 1,则在应用程序启动时会立即加载该Servlet;如果 <load-on-startup>元素不存在,则应用程序会在第一个Servlet请求时加载该Servlet。 如果 <init-param>元素存在并且通过其子元素配置了 Spring MVC配置文件 ( Springmvc-config.xml )的路径,则应用程序在启动时会加载配置路径下的配置文件; 如果没有通过<init-param>元素配置,则应用程序会默认到WEB-INF目录下寻找如下方式命名 ( servletName-servlet.xml )的配置文件。
//如果配置“前端控制器”时,没有用<init-param>元素配置“Springmvc配置文件的位置”,应用程序会到web-inf目录下找名字为: "servletName-servlet.xml" 的文件来充当 “springmvc配置文件” //其中servletName的"泛指",指的是在web.xml中的配置的DispatcherServlet的"名称",如上面中的DispatcherServlet的名字为: SpringMvc,则servletName则替换为SpringMvc //所以最后会在web-inf目录下找到"SpringMvc-servlet.xml"的文件来充当“springmvc配置文件” servletName-servlet.xml其中,servletName ( 是根据实际情况而定,不是固定的名字 )指的是部署在web.xml 中的 DispatcherServlet的名称,在上面 web.xm中的配置代码中即为SpringMvc,而 -servlet.xml是配置文件名的固定写法,所以应用程序会在 WEB-INF 下寻找 “SpringMvc-servlet.xml” (来充当“springmvc的配置文件”)。
注意点 :(重点,重点,重点 )
( 如果在 web.xml中 配置“前端控制器”时,没有通过<init-param>元素 进行添加“Springmvc配置文件 :springmvc-config.xml ”的位置的话,应用程序会到web-inf目录下找名字为 :“servletName-servlet.xml” 的文件来充当 “springmvc配置文件”。)
2.@Controller 注解
org.springframework.stereotype.Controller 注解类型 ( @Controller )用于指示 Spring 类的实例是一个控制器,其注解形式为 @Controller。该 注解在使用时不需要再实现Controller 接口 (通过将加 @Controller注解的方式来替代“实现controller接口”),只需要将 @Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可。
/*** 控制器类可用实现“@Controller”接口来 替代implements Controller (两者都能实现相同的效果)*/ /*** ① 此处使用@Controller注解的方式来替代 实现“controller接口”,此时要通过设置 *@RequestMapping()注解来映射URL* ②使用注解后,要配置<context:component-scan>元素来进行“指定要扫描的包”,让注解生效*/ public class FirstController2 implements Controller {//其中的方法要配合@RequestMapping注解一起使用}为了保证 Spring能够找到控制器类,还需要在SpringMVC的配置文件 ( springmvc-config.xml )中添加相应的 扫描配置信息 (用 <context:component-scan>元素 ,来指定需要扫描的包,来进行 “根包扫描”),( springmvc-config.xml ) 具体配置信息 如下 :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置“根包扫描”,指定需要扫描的包 --><context:component-scan base-package="com.myh.controller"/></beans>注意点1 : ① 与 实现controller接口不同,使用 @Controller注解 的类中的方法通常使用 @RequestMapping注解来映射URL,这样你可以更直观地映射请求到具体的方法。此外,@controller注解通常与 @Autowired等注解一起使用,以实现依赖注入,这使得控制器之间的解耦
更为方便。
② 在使用@controller注解的类中,你可以使用 @ModelAttribute、@RequestParam等注解来自动绑定请求参
数,也可以使用 @ResponseBody注解来直接将方法返回值写入响应体,这使得处理请求和响应更为简洁。注意点2 :
使用注解方式时,程序的运行 需要依赖Spring的 AOP 包,因此需要向 lib目录中添加spring-aop-.jar,否则程序运行时会报错。spring-aop.jar
3.RequestMapping 注解
3.1 @RequestMapping 注解的 “使用”
Spring 通过 @Controller 注解找到相应的控制器类 后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用org.springframework.web.bind.annotation.RequestMapping注解类型。
RequestMapping注解类型用于 映射一个请求或一个方法 ,其注解形式为 : @RequestMapping,可以使用该注解 标注在一个方法或一个类上。
( 即通过 @Controller注解则用于 标记“控制器类”,@RequestMapping注解则用于 “映射一个方法或一个类” :即前端发送的 “url请求” 通过 “@RequestMapping注解” 能找到对应的“类或方法”上,“类或方法”则对请求做出“响应”。)
(前端url请求 --找到“控制器” —再根据自身携带“url请求信息”,对比“@RequestMapping中的url信息”,找到能做出“响应”的类或方法。)
标注在 “方法” 上
当 标注在一个方法 上时,该方法将成为一个请求处理方法,它会在程序接收到对应的 URL请求时被调用 (即前端的url请求信息 和 该方法上的@RequestMapping( )注解的 url信息一致,该方法就会被调用)。
/*** 控制器类*/ @Controller //比较该类为“控制器类” public class FirstController {/*** 为“前端的url请求” 和 该“方法”中的“/firstController” 设立URL映射关系 :* 只要是 /firstController 的前端url请求 就会请求到该方法上, 执行该方法,并作出响应。*/@RequestMapping(value = "/firstController") public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {...return mav;} }使用 @RequestMapping注解 后,上述代码中的 handleRequest( )方法就可以通过地址:
http://localhost:8080/springMVC_Demo/firstController 进行访问。
标注在 “类” 上
当 @RequestMapping注解 标注在一个类 上时,该类中的所有方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下。
(简而言之 :
@RequestMapping用在类上,就表明前端能通过“url路径 / url请求” 找到被 @RequestMapping标记的“控制器类”上,将 “控制器类” 和 “前端url请求” 进行URL映射绑定。)/*** 控制器类*/ @Controller //比较该类为“控制器类” @RequestMapping(value = "hello") //前端的“url请求”能找到该“控制器类” public class FirstController3 {@RequestMapping(value = "/FirstController3")public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {...return mav;} }由于在 “控制器类”上 添加了 @RequestMapping 注解,并且其value 属性值为“/hello”,所以上述代
码中的 handleRequest( )方法 的请求路径将变为:http://localhost:8080/springMVC_Demo/hello/firstController。如果该类中还包含其他方法,那么在其他方法的请求路径中也需要加入“/hello”。
3.2 @RequestMapping 注解的 “属性”
@RequestMapping注解中 “属性”-详解 :
属性 类型 描述 name String 可选属性,用于为映射地址 指定别名。 value
(默认属性)String[] 可选属性,同时也是 默认属性,用于映射一个请求和一种方法,可以标注在一个方法或一个类上。
ps :
当 value 是其唯一属性时,可以省略属性名,即当注解中只有value这一个属性时,可省略不写value ( 省略属性名 )method RequestMethod[] 可选属性,用于 指定该方法用于处理哪种类型的请求方式,其请求方式包括 GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE 和 TRACE。
例如 method=RequestMethod.GET 表示只支持 GET 请求,如果需要支持多个请求方式则需要通过 { }写成数组的形式,并且多个请求方式之间是有英文逗号分隔。params String[] 可选属性,用于指定Request 中必须包含某些参数的值,才可以通过其标注的方法处理。 headers String[] 可选属性,用于指定Request 中必须包含某些指定的header的值,才可以通过其标注的方法处理。 consumes String[] 可选属性,用于指定处理请求的提交内容类型( Content-type ),比如 application/json、text/html 等。 produces String[] 可选属性,用于指定返回的内容类型,返回的内容类型必须是request请求头( Accept )中所包含的类型。 在上表中,所有属性都是可选的,但其 默认属性是value。当 value 是其唯一属性时,可以省略属性名,例如下面两种标注的含义相同 (因为只有value这个一个属性 ) :
/*** 因为只有value这一个属性,所以value这个属性名可以省略不写。* (这两个注解含义相同)*/ @RequestMapping(value = "hello") @RequestMapping("hello")
4.组合注解
在Spring框架的4.3版本中,引入了 组合注解,来帮助简化常用的HTTP 方法的映射,并更好地表达被注解方法的语义。其组合注解如下所示 :
@GetMapping : 匹配 GET 方式 的请求。
@PostMapping : 匹配 POST 方式 的请求。
@PutMapping : 匹配 PUT 方式 的请求。
@DeleteMapping : 匹配 DELETE 方式 的请求。
@PatchMapping : 匹配 PATCH方式 的请求。以 @GetMapping 为例,该 组合注解是 @RequestMapping(method = RequestMethod.GET)
的 缩写,它会将 HTTP GET映射到特定的处理方法上。例子如下 :
传统的@RequestMapping注解的使用方式 如下 :
//"传统"的@RequestMapping注解使用方式@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)public String selectUserById(String id) {....}新注解 : @GetMapping 的 使用方式 如下 :
//"新注解 :@GetMapping注解的使用//新注解比“传统的注解方式” 使用起来更简单@GetMapping(value = "/user{id}")public String selectUserById(String id) {....}新注解 ( 组合注解 )比“传统的注解方式” 使用起来更简单,可以省略method属性。
4.1 请求处理方法的 “参数类型” 和 “返回值类型”
请求处理方法中的 “参数类型”
在控制器类中,每一个请求处理方法都可以有多个不同类型的参数,以及一个多种类型的返回结果。例如在入门案例中,handleRequest()方法的 参数 就是对应请求的 HttpServletRequest和 HttpServletResponse 两种参数类型。除此之外,还可以使用其他的参数类型,例如在请求处理方法中需要访问HttpSession对象,则可以添加 HttpSession 作为 参数,Spring会将对象正确地传递给方法,其使用示例如下 :
@GetMapping(value = "/user{id}")public String selectUserById(HttpSession session) { //该“请求处理方法”的参数为 : HttpSession....}在 请求处理方法 中, 可以出现的参数类型 如下:(注意: 下面的“请求方法”中的“参数内容” )
.javax.servlet.ServletRequest / javax.servlet.http.HttpServletRequest
javax.servlet.ServletResponse / javax.servlet.http.HttpServletResponse
javax.servlet.http.HttpSession
org.springframework.web.context.request.WebRequest 或
org.springframework.web.context.request.NativeWebRequest
java.util.Locale
java.util.TimeZone (Java 6+) / java.time.Zoneld (on Java 8)
java.io.InputStream / java.io.Reader
java.io.OutputStream / java.io.Writer
org.springframework.http.HttpMethod
java.security.Principal
@PathVariable、@MatrixVariable、@RequestParam、@RequestHeader、@RequestBody
@RequestPart、@SessionAttribute、@RequestAttribute 注解
HttpEntity<?>
java.util.Map / org.springframework.ui.Model / org.springframework.ui.ModelMap
.org.springframework.web.servlet.mvc.support.RedirectAttributes
org.springframework.validation.Errors /org.springframework.validation.BindingResult
org.springframework.web.bind.support.SessionStatus
·org.springframework.web.util.UriComponentsBuilderps :
需要注意的是,org.springframework.ui.Model类型不是一个Servlet API类型,而是一个包含了 Map 对象的 Spring MVC 类型。如果方法中添加了Model 参数,则每次调用该请求处理方法时,Spring MVC 都会创建Model对象,并将其作为参数传递给方法。
请求处理方法的 “返回值类型”
在上面代码案例中,请求处理方法返回的是一个ModelAndView类型的数据 ( 请求处理方法的返回值类型为 :ModelAndView类型 )。除了此种类型外,请求处理方法还可以返回其他类型的数据。
Spring MVC 所支持的常见方法返回类型 ( 返回值类型 )如下 :
返回值类型 描述 ModelAndView (常用) ModelAndView类型中可以 添加Model 数据,并 指定视图 Model (常用) ——— Map ——— View String (常用)
ps :
实际开发中通用String类型跳转“”视图“” + Model参数传递“属性值”。String类型的 返回值可以跳转视图,但不能携带数据。
ps :
String类型除了可以跳转“视图”外,还能 “重定向” 和 “请求转发”。void (常用) void类型主要在 异步请求时使用,它只返回数据,而不会跳转视图。 HttpEntity<?> 或 ResponseEntity<?> ——— Callable<?> ——— DeferredResult<?> ——— 注意点 :
由于==ModelAndView类型未能实现数据与视图之间的解耦,所以在企业开发时,方法的返回类型通常都会使用String。既然 String 类型的返回值不能携带数据,那么在方法中是如何将数据带入视图页面的呢 ?这就用到==了上面所讲解的 Model 参数类型 ( Mode类型 : 属于处理方法中的 参数类型 ),通过该参数类型,即可添加需要在视图中显示的属性。(实际开发中,常用的是 :
① 通过String类型跳转“”视图“” ② 通过Model参数类型传递“属性值”)@Controller //比较该类为“控制器类” @RequestMapping(value = "/firstController") //前端的“url请求”能找到该“控制器类” public class FirstController3 {@GetMapping(value = "/firstController")//返回值类型为 : String : 可跳转“视图”。//处理方法中的“参数类型” : Model(模型对象) : 可传递“属性”(给"视图")--通过Model向视图中添加传递数据public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model) {//向Model(模型对象)中添加数据 --进行数据的传递model.addAttribute("msg", "这是我的第一个Spring MVC程序。");//通过String类型返回“视图“return "WEB-INF/jsp/first.jsp";} }在上述方法代码中,“处理方法”中参数的类型有 : Model (模型对象),通过该参数实例的addAttribute( )方法即可添加所需数据。“处理方法”的返回值类型为 : String类型,String类型除了可以返回上述代码中的视图页面外,还可以进行 重定向与请求转发。
通过返回值“String类型”进行 “重定向”
//通过String类型进行“重定向”@RequestMapping(value = "/update")//返回值类型为 : String ,此处通过String来进行“重定向”public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model) {.....return "redirect:queryUser";}
通过返回值“String类型”进行 “请求forward转发”
//通过String类型进行“forward请求转发”@RequestMapping(value = "/toEdit")public String selectUserById(HttpServletRequest request,HttpServletResponse response ,Model model) {.....return "forward:editUser";}
5.ViewResolver(视图解析器)
Spring MVC 中的 视图解析器 负责解析视图,可以通过在配置文件中定义一个ViewResolver来配置视图解析器,其配置示例如下 :
<!-- 配置“视图解析器” : 在“处理方法”中可直接写要返回的“视图文件名”,不用写“该视图”对应的前后缀 --><!-- 在视图解析器中配置要返回的视图的对应的“前后缀” --><!-- 配置视图解析器 : 可简化在“处理方法”中要填的“视图的路径” --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 设置返回的“视图”对应的“前缀” --><property name="prefix" value="/WEB-INF/jsp"/><!-- 设置返回的“视图”对应的“后缀” --><property name="suffix" value=".jsp"/></bean>在上述代码中,定义了一个id 为viewResolver的 视图解析器,并设置了 视图的前缀和后缀属性。这样设置后,方法中所定义的view 路径将可以简化。例如,上面例子中的逻辑视图名只需设置为“first”,而不再需要设置为“WEB-INF/jsp/first.jsp” (配置了前后置,现在只return “first” 就能返回一个视图),在访问时视图解析器会自动地增加前缀和后缀。
相关文章:
Spring MVC | Spring MVC 的“核心类” 和 “注解”
目录: Spring MVC 的“核心类” 和 “注解” :1.DispatcherServlet (前端控制器)2.Controller 注解3.RequestMapping 注解3.1 RequestMapping 注解的 “使用”标注在 “方法” 上标注在 “类” 上 3.2 RequestMapping 注解的 “属性” 4.组合注解4.1 请求处理方法的…...
Python 创建PPT
本篇为如何使用Python来创建ppt文件。 创建PPT 安装必要的库 命令如下: pip install python-pptx 安装过程: 创建ppt文件 在当前目录下创建一个test的ppt文件。其中包含两页,分别使用了不同的布局。 第一页设置了标题和内容。第二页只设…...
【工具】Git的24种常用命令
相关链接 传送门:>>>【工具】Git的介绍与安装<< 1.Git配置邮箱和用户 第一次使用Git软件,需要告诉Git软件你的名称和邮箱,否则无法将文件纳入到版本库中进行版本管理。 原因:多人协作时,不同的用户可…...
rabbitmq 基本总结
rabbitmq 的基本概念 vhost、broker、producer、 consumer、 exchange、 queue、 routing key rabbitmq 常用的队列类型,工作队列(简单队列),pub/sub, routing key, topic 模式 <dependency><groupId>com.rabbitmq&l…...
7、Copmose自定义颜色和主题切换
Copmose自定义颜色和主题切换 一起颜色的设置的都是在res/values/colors里面去做颜色, 但是当使用compose的时候,抛弃了使用了ui.theme底下的Color.kt和Theme.kt 但是默认使用的是MaterialTheme主题,里面的颜色字段不能定义,因此…...
js-判断变量是否定义
if (typeof myVar undefined) {// myVar (未定义) 或 (已定义但未初始化) } else {// myVar (已定义和已初始化) } 参考 https://www.cnblogs.com/redFeather/p/17662966.html...
视频远程监控平台EasyCVR集成后播放只有一帧画面的原因排查与解决
智慧安防视频监控平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台可支持的接入协议包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议…...
Pulsar 社区周报 | No.2024.03.08 Pulsar-Spark Connector 助力实时计算
关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,…...
Redis--线程模型详解
Redis线程模型 Redis内部使用的文件事件处理器(基于Reactor模式开发的)file event handler是单线程的,所以Redis线程模型才叫单线程模型,它采用IO多路复用机制同时监听多个socket,当被监听的socket准备好执行accep、r…...
[备赛笔记]——5G大唐杯(5G考试等级考考试基础试题)
个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…...
【解读】OWASP 大语言模型(LLM)安全测评基准V1.0
大语言模型(LLM,Large Language Model)是指参数量巨大、能够处理海量数据的模型, 此类模型通常具有大规模的参数,使得它们能够处理更复杂的问题,并学习更广泛的知识。自2022 年以来,LLM技术在得到了广泛的应…...
java数据结构与算法刷题-----LeetCode77. 组合
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 递归实现 解题思路 这种题只能暴力求解,枚举所有可…...
网络安全运营的工作内容(附资料下载)
【推荐】最新网络安全运营方案和实践合集(共80多份).zip 网络安全运营的工作内容是一个多层次、多维度的体系,涵盖了多个关键领域以确保网络环境的稳定和安全。以下是一些主要的工作内容: 安全策略制定与实施: 制定网…...
华为OD面试分享13(2024年)
华为OD面经 二战失败选手,双非一本部门目标院校,数学与应用数学专业,无相关工作经验也没有什么拿得出手的项目。3月中旬开始重新学java(大学里有学过一个学期的java,很水)。期间经常通宵肝,学习框架、刷leedcode,可能是因为数学专业出身,数据结构和算法这一块学起来并…...
Android14之解决报错:No module named sepolgen(一百九十二)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
数电学习笔记——逻辑函数的代数法化简
目录 逻辑函数的化简原则 与或逻辑的化简 1、吸收律(1) ( ABABA) 2、吸收律(2)(3)( AABA;AABAB) 3、多余项定律( ABACBCABAC) 4、拆项法 5、添项法 逻辑函数的化简原则 (1)逻辑函数所用的门最少 (2)各个门的输入端要少 (3)逻辑电路所用的级数要少 (4)逻辑…...
react实战——react旅游网
慕课网react实战 搭建项目问题1.按照官网在index.tsx中引入antd出错?2.typescript中如何使用react-router3.react-router3.1 V63.2 V53.3V6实现私有路由 4.函数式组件接收props参数时定义数据接口?5.使用TypeScript开发react项目:6.要使一个组…...
ChatGPT 串接到 Discord - 团队协作好助理
ChatGPT 串接到 Discord - 团队协作好助理 ChatGPT 是由 OpenAI 开发的一个强大的语言模型,本篇文章教你如何串接 Discord Bot ,协助团队在工作上更加高效并促进沟通与协作。使 ChatGPT 发挥出最大的功效,进一步提升工作效率和团队协作能力。…...
js随机整数
在JavaScript中,您可以使用 Math.random() 函数生成一个0到1之间的随机数(包括0,但不包括1),然后通过适当的缩放和取整,可以得到一个随机整数。以下是一个简单的函数,用于生成指定范围内的随机整…...
.Net预处理器指令
1.最常用的预处理器指令#region #endregion,来定义可在大纲中折叠的代码区域. #region MyClass def public class MyClass { static void Main() { } } #endregion 2.定义符号预处理器指令:来定义或取消定义条件编译的符号: #…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
