JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦

1 Vue

1.1 Vue介绍

VUE是前端框架,基于MVVM,实现数据双向绑定

框架是半基础软件,可重用的代码模型

f5aa5f91afbc4dc6821b1f8bef094523.png

1.2 Vue指令

<script src="js/vue.js"></script></head>
<body><div id="id"><!-- 绑定了一个数据模型,vue双向绑定 --><input type="text" v-model="url"><!-- v-bind绑定属性值 --><!-- v-model在表单元素创建双向数据绑定 --><a :href="url">链接1</a><a v-bind:href="url">链接2</a><!-- 插值表达式 -->{{msg}}<input type="button" value="按钮" v-on:click="handle()"><!-- 简化写法 --><input type="button" value="按钮" @click="handle()"><!-- 判定为true就渲染 --><span v-if="msg <= 30">30</span><span v-else-if="msg> 30&&msg<50">30</span><!-- 不管条件都渲染,不满足条件display隐藏 --><span v-show="msg <= 30">340</span><div v-for="ar in arr">{{ar}}</div><div v-for="(ar1,in1) in arr">{{in1}}:{{ar1}}</div></div>
</body>
<script >// 在new vue传递一个对象,el表示接管<div id="id"></div>区域new Vue({el:"#id",data:{url:"https://www.bilibili.com/",msg:20,arr:[1,2]},methods:{handle:function(){alert('hanle');}}})</script>

1.3 生命周期

156dc2d74715449d97129a4ced2d1096.png

    <div id="id"></div>
</body>
<script >// 在new vue传递一个对象,el表示接管<div id="id"></div>区域new Vue({el:"#id",data:{url:"https://www.bilibili.com/",msg:20,arr:[1,2]},mounted(){alert('vue初始化成功, HTML页面渲染成功,发送请求到服务端,加载数据')}})
</script>

326ef1a974754a199dd23d2fe5cb3c76.png

1.4 Vue-cli

 Vue-cli 是Vue官方提供的一个脚手架,用于快速生成一个 Vue 的项目模板

1 统一的目录结构

2 本地调试

3 热部署:代码变动,不需要重新运行,就可以加载最新的程序

4 单元测试

5 集成打包上线

1.5 目录结构 

be3f0020464f40d6803fe3fc0619a007.png

 1.6 前端工程化

Day03-05. 前端工程化-Vue项目_哔哩哔哩_bilibili创建vue文件

启动vue文件

3280f3ee0b54476d85d1db080f5fa832.png

vue.config.js

  //修改端口号由8080到7000devServer: {port: 7000,}

main.js

import Vue from 'vue'
//import App from './App.vue'表示要把App.vue导入当前js文件,命名为App
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({//ES6语法,router:router两个属性名一致,可以简写为一个routerrouter,//render函数作用:将上面导入的app创建的视图创建虚拟DOM元素挂载到#app区域,这部分DOM元素是在App.vue的根组件定义的render: h => h(App)
}).$mount('#app')// 相当于一下代码
new Vue({el:"#app",router:router,render:h=>h(App)
})

1.7 制作组件文件

App.vue

<!-- 模板部分,生成html代码 -->
<template><div>{{ msg }}</div>
</template>
<!-- 控制模板的数据来源和行为 -->
<script>
//export导出一个模块,那么其他地方也可以导入
export default  {data:function(){// {}是对象,msg是数据模型return{msg:"haha"}}
}
</script>
<style>
</style>

2343f3ee46924e4e87de92a42466601e.png

2 Element

Element - 网站快速成型工具

配置Element后:

elementView.vue

<template><div><el-row><el-button>默认按钮</el-button><el-button type="primary">主要按钮</el-button><el-button type="success">成功按钮</el-button><el-button type="info">信息按钮</el-button><el-button type="warning">警告按钮</el-button><el-button type="danger">危险按钮</el-button>
</el-row></div>
</template>
<script>
export default{}</script>
<style></style>

main.js新增:

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);

App.vue 

<template><div><element-view></element-view></div>
</template>
<!-- 控制模板的数据来源和行为 -->
<script>
import elementView from './views/element/elementView.vue';
//export导出一个模块,那么其他地方也可以导入
export default  {components:{elementView},}
</script>
<style>
</style>

ec5f11ce30cf4162a518012892d5473d.png

3 vue-router

VueRouter路由器类

router/index.js 改变:

const routes = [{path: '/',redirect:'/ele'},{path: '/ele',name: 'ele',component: () => import(/* webpackChunkName: "about" */ '../views/element/elementView.vue')}
]

elementView.vue新增: 

<template><div>
//router-link解析成a<router-link to="/ele">点我试试?</router-link>
//渲染相对应组件
<router-view></router-view>
</el-row></div>
</template>

4 ngnix

594af69ce9f340e89014389fda5e7c41.png

打包后放在dist文件夹里

将dist文件夹里面的东西放入fa8a51bb802143179b99172ebe2cd68d.png

c47efba7d02d4ce4a40c9c17e9a6b785.png 打开nginx.exe

输入http://localhost:90/

5 Ajax

5.1 作用

1 异步交互:不重新加载页面,与服务器交换数据并更新网页,比如搜索联想

2 数据交换:通过Ajax可以给服务器发送请求,并获取数据

5.2 原生Ajax

<body><input type="button" value="获取数据" onclick="getData()"><div id="div1"></div></body><script>function getData(){//1. 创建XMLHttpRequest var xmlHttpRequest  = new XMLHttpRequest();//2. 发送异步请求xmlHttpRequest.open('GET','http://yapi.smart-xwork.cn/mock/169327/emp/list');xmlHttpRequest.send();//发送请求//3. 获取服务响应数据xmlHttpRequest.onreadystatechange = function(){if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){//获取响应的数据,然后放到div1这个区域中document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;}}}
</script>

5.3 Axios

对原生Ajax进行封装

Axios中文文档 | Axios中文网 (axios-http.cn)

<body><input type="button" value="获取数据" onclick="get()"><input type="button" value="提交数据" onclick="post()"><script>function get(){// 通过axios发送异步请求getaxios({method: "get",
// 传递数据可以在url后面"?key=word"url: "https://yapi.pro/mock/293482/User/id"
//想获取服务器端相应回来的数据,用成功回调函数then((result) =>xxx
}).then((result) => {console.log(result.data);
});// 简化版本
// axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then((result) => {
//     console.log(result.data);
// });}function post(){axios({method: "post",url: "https://yapi.pro/mock/293482/User/id",data: "height=199"
}).then((result) => {console.log(result.data);
});// 简化版本
// axios.post( "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then((result) => {
//     console.log(result.data);
// });}</script>
</body>

点击获取数据:

370f0e8792f24ef38662ec2f6b5a8947.png

api接口文档管理平台Yapi

YApi Pro-高效、易用、功能强大的可视化接口管理平台

作用:1 api接口管理 2Mock:模拟真实接口,生成模拟测试数据

创建了我的api:
8dee7bbde89846db995686426e2cc3f2.png

6 Maven

6.1 介绍

1 依赖管理,管理jar包

2 统一结构,不同编译器生成的结构可能不同

3 自动化项目构建,根据指令快速完成清理、编译、测试、打包、发布

2b47838aa34546699ba0c0ca128a2216.png

不同阶段有不同文件产生,编译时有编译字节码文件,打包有jar文件 

70cb8c2fbd204ffe9c4b3beec1aba8fa.png

项目对象模型POM,或者称为坐标

6e9ec2aa63934cd185ba49c979a5f9d1.png

d9a6617560ed4d9e8bba9c8677f3de92.png

 依赖管理模型

6.2 依赖管理

6.2.1 创建依赖

Maven Repository: Search/Browse/Explore (mvnrepository.com)

pom.xml

<dependencies><dependency>
//依赖ch.qos.logback下的logback-classic<groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies>

6.2.2 依赖传递

9d231441accb49e2941003850b1f7a88.png

查看依赖关系 

c7c20e331c784ed5a63cc8cb9b88678d.png

解除依赖:

<dependencies><dependency><exclusions><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></exclusions></dependency></dependencies>

 6.2.3 依赖范围

513697b5b27148ef93cdb5ed6bec5b53.png

<dependencies><dependency>
//依赖ch.qos.logback下的logback-classic<groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version><scope>test</scope></dependency></dependencies>

6.2.3 生命阶段

050fb392ae7f4f0c99b9d3a94a7b3229.png

7 SpringBoot 

创建一个SpringBoot工程

2d538b4296354a4685dea7d0522044ed.png

HelloController
//请求处理类
@RestController
public class HelloController {//访问/hello会使用以下方法@RequestMapping("/hello")public String Hello(){System.out.println("hello1");return "hello";}
}

运行Springbootdemo1Application

f7da921d36e04a52bc26cfe7ca35751f.png

ea1d5813ac224c4abed91a11cc287b3a.png

成功!

8 HTTP协议

 Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

HTTP协议是无状态的协议:每次请求-响应都是独立的

1aa1e84689644a8eb209c97b13bf72cb.png

11fe05bd604b439288ef9175121f7ec8.png HTTP响应格式ca16bf7bf6d74a02b61dfd578afcd610.png

Web服务器是一个软件程序,对HTTP协议的操作进行封装 

9 Tomcat

Tomcat(Web容器、Servlet容器)是轻量级Web服务器,支持Servlet/JSP少量JavaEE规
JavaEE:Java企业版
Servlet程序需要依赖于 Tomcat才能运行
72653b4f4abb4956802aa66e87e8e2dc.png

解决乱码:tomcat文件夹 

91d7770bac9f4ccb8b89062650a74e38.png

bf8dea50277f4e1eacdd32cf357df32d.png 解决占用端口

f834e013547942cf8fce1dbab7bcec6e.png

 cmd

netstat -ano | findstr 8080 
taskkill -pid LISTENING占用的pid的数字 -f

53df8a9b71a94863b73bd7cf2e48890b.png

 HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号

改端口号

588aa0e3ddb64385bcc5f40d2e4a2136.png

39ee496820054fe8aeb89f1a916b71c7.png

Tomcat 部署项目:将项目放置到 webapps 目录下
访问方法:localhost:8080/文件夹中的html文件

起步依赖:

1.spring-boot-starter-web:包含了web应用开发所需要的常见依赖

2.spring-boot-starter-test:包含了单元测试所需要的常见依赖

不需要加version,因为在<parent>父工程定义好了

https://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#using.build-systems.starters

 基于Springboot开发的web应用程序,内置了tomcat服务器,当启动类运行时,会自动启动内嵌的tomcat服务器

10 请求响应

10.1 请求HttpServletRequest

@RestController
public class simpleParam {@RequestMapping("/simpleParam")public String param(HttpServletRequest request){String name=request.getParameter("name");String  ageStr=request.getParameter("age");int age=Integer.parseInt(ageStr);System.out.println(name+"---"+age);return "ok";}
}

postman:

2fd2c4eb213f46d0921ce382e1904b3c.png

10.2 获取实体参数

原始程序获取参数:

@RestController
public class simpleParam {@RequestMapping("/simpleParam")public String param(HttpServletRequest request){String name=request.getParameter("name");String  ageStr=request.getParameter("age");int age=Integer.parseInt(ageStr);System.out.println(name+"---"+age);return "ok";}
}

3f6a73d703f34c809742109d6dc46e0e.png

基于springboot方法:

@RestController
public class simpleParam {@RequestMapping("/simpleParam")public String param(String name,Integer age){System.out.println(name+"---"+age);return "ok";}
}
    @RequestMapping("/simpleParam")
//    方法形参与请求参数名不一致,可以用@RequestParam映射public String param(@RequestParam(name="name")String username, Integer age){System.out.println(username+"---"+age);return "ok";

Dog.java

public class Dog {private String name;private String age;// ptg生成
xx
}

User.java

public class user {private String name;private Integer age;private Dog do1;
ptg}
simpleParam
    @RequestMapping("/simplepolo")public String param(user u){System.out.println(u);return "ook";}

 96a058f4b4d84801b2a25aec760dd552.png

10.3 数组集合参数

 @RequestMapping("/arrayParam")public String param(String[] arr){System.out.println(Arrays.toString(arr));return "ook";}

f9b27c26f6c949b78e73f2fd1e2bc724.png

e6971ee337144584b3115bfe6dbc28dc.png

集合参数 

   @RequestMapping("/listParam")public String param(@RequestParam List<String> arr){System.out.println(arr);return "ook";}

10.4 日期参数

    @RequestMapping("/dataParam")
//    pattern与value必须一致,ldt必须与名字保持一致public String param(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime ldt){System.out.println(ldt);return "ook";}

4c828b94b99e4ad8b5b0a57ef315da38.png

10.5 json参数

   @RequestMapping("/jsonParam")public String param(@RequestBody user u){System.out.println(u);return "ook";}

14e451e03eb6482daf14dc8c7ae2341e.png

c3829b7c1178442b985abc9798d6b27e.png

10.6 路径参数

    @RequestMapping("/path/{id}/{name}")public String param(@PathVariable Integer id,@PathVariable String name){System.out.println(id+name);return "ook";}

5d570e312c364cb8bb58bf83221523aa.png

10.7响应HttpServletResponse

@RestController = @Controller + @ResponseBody
@ResponseBody:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为JSON格式响应
统一响应结果:用一个类节省返回值的编写
/*** 统一响应结果封装类*/
public class Result {private Integer code ;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data){return new Result(1, "success", data);}public static Result success(){return new Result(1, "success", null);}public static Result error(String msg){return new Result(0, msg, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
}

应用:

    @RequestMapping("/path/{id}/{name}")public Result param(@PathVariable Integer id, @PathVariable String name){System.out.println(id+name);return Result.success("ook");}

 7a8619c35b9c45eea3d0f36557d3ce39.png

10.8 案例

获取员工数据,返回统一响应结果,在页面渲染展示

3ed006c6ec1f4cfcbee00f8e8949b0f3.png

引入数据:

EmpController
@RestController
public class EmpController {@RequestMapping("/listEmp")//@RequestBody处理将返回对象变为jsonpublic Result  list(){
//        1.加载并解析emp.xml//拿到文件路径String file=this.getClass().getClassLoader().getResource("emp.xml").getFile();
//        解析的file文件,往emp对象封装,解析出list集合List<Emp> emplist= XmlParserUtils.parse(file, Emp.class);
//        2.对数据进行转换处理//基于stream流遍历emplist.stream().forEach(emp->{String gender=emp.getGender();if("1".equals(gender)){emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}});return Result.success(emplist);}}

bfa4776a422c4d0295b6efccc4420d47.png

优化:分层解耦 

6a952b9550b94171b36de3210101e247.png

controller层:获取(调用service层)、返回数据

@RestController
public class EmpController {//高耦合
//    private EmpService empService=new EmpServiceA();@Autowiredprivate EmpService empService;@RequestMapping("/listEmp")//@RequestBody处理将返回对象变为jsonpublic Result  list(){List<Emp> emplist=empService.listEmp();return Result.success(emplist);}
}

service层:业务逻辑处理:将gender的1变为男,2变为女

EmpService.interface

public interface EmpService {
//    获取员工列表public List<Emp> listEmp();
}
EmpServiceA.java
//@Component表示交给IOC容器管理,称为IOC容器的bean
@Component
public class EmpServiceA implements EmpService {//高耦合// private EmpDao empDao=new EmpDaoA();//依赖注入,IOC容器会提供该类型bean对象,并赋值给该变量
@Autowiredprivate EmpDao empDao;List<Emp> emplist=empDao.listemp();@Overridepublic List<Emp> listEmp() {//        2.对数据进行转换处理//基于stream流遍历emplist.stream().forEach(emp->{String gender=emp.getGender();if("1".equals(gender)){emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}});return emplist;}
}

Dao层:加载并解析emp.xml

EmpDao

public interface EmpDao {
//    获取员工列表public List<Emp> listemp();
}
EmpDaoA
//@Component表示交给IOC容器管理,称为IOC容器的bean
@Component
public class EmpDaoA implements EmpDao {@Overridepublic List<Emp> listemp() {//1.加载并解析emp.xml//拿到文件路径String file=this.getClass().getClassLoader().getResource("emp.xml").getFile();
//        解析的file文件,往emp对象封装,解析出list集合List<Emp> emplist= XmlParserUtils.parse(file, Emp.class);return emplist;}
}

11 分层解耦 

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。

service:业务逻辑层,处理具体的业务逻辑。

dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查

dao接口:dao层处理的数据有很多,为了灵活切换各种实现

高内聚:service层仅存放与员工有关的业务逻辑处理

低耦合:降低层与层的关联

使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller

@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。

如果dao包不和controller在同一个文件夹,那么在启动页可以用:@ComponentScan("dao","所在包名")

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

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

相关文章

机器人路径规划:基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(提供Python代码)

一、深度优先搜索算法介绍 深度优先搜索算法&#xff08;Depth-First-Search&#xff09;的基本思想是沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。当节点v的所有边都己被探寻过&#xff0c;搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已…

分布式之Nacos配置中心

Nacos作为配置中心源码分析 1、什么是Naocs配置中心 官方文档&#xff1a; https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config Nacos 提供用于存储配置和其他元数据的 key/value 存储&#xff0c;为分布式系统中的外部化配置提供服务器端和客户端支持。使…

基于springboot+vue的乡政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Spring MVC文件上传配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现&#xff1b;示例代码如下&#xff1a; Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…

win10 配置 oh-my-posh

win10 配置 oh-my-posh 0. 前置1. 安装1.1. 软件1.2. 字体1.3. 激活1.3.1. Git Bash1.3.2. PowerShell 2. 配置2.1. 效果2.2. 说明2.3. 其他2.3.1. 新版PowerShell2.3.2 conda问题 0. 前置 这个东西毕竟是个&#xff0c;命令行美化工具&#xff0c;所以需要先有一个命令行&…

最后的挣扎 - Qt For Android on HuaWei Mate 60Pro (v4.0.0)

简介 为什么叫最后的挣扎, 其实都知道即将到来的 HarmonyOS NEXT 将抛弃Android支持&#xff0c;纯血HarmonyOS 将上线&#xff0c; 此时再说Qt for android支持Huawei HarmonyOS的设备其实并没有多少意思&#xff0c; 但恐怕在大多数基础软件完成兼容前&#xff0c; 很多人还是…

量子计算+HPC!ORNL与Riverlane、Rigetti合作研发

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨沛贤 1000字丨8分钟阅读 近日&#xff0c;英国量子计算初创公司Riverlane和美国量子计算公司Rigetti Computing宣布将参与由美国能源部橡树岭国家实验室&#xff08;OR…

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

【C++】了解一下编码

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. ASCII编码3. unicode4. GBK5. 类型转换 1. 前言 看到string里面还有Template instantiations&#xff1a; string其实是basic_string<char>&#xff0c;它还是一个模板。 再看看wstring&#xff1…

195基于matlab的凸轮机构GUI界面

基于matlab的凸轮机构GUI界面 &#xff0c; 凸轮设计与仿真 绘制不同的凸轮轮廓曲线 &#xff0c;凸轮机构运动参数包括推程运动角&#xff0c;回程运动角&#xff0c;远休止角&#xff0c;近休止角。运动方式&#xff0c;运动规律。运动仿真过程可视化。内容齐全详尽。用GUI打…

el-select使用filterable下拉无法关闭得问题

这里推荐一个前端框架 sakuya / SCUI&#xff0c;他里面有个formTable&#xff0c;可以解决很多订单明细保存得问题。基本沿用element-plus的前端使用模式&#xff0c;让表单表格变的非常容易。 这个的供应商插件&#xff0c;当使用filterable后&#xff0c;点击表格重的选项&…

HarmonyOS NEXT应用开发—视频全屏切换案例

介绍 本示例介绍了Video组件和ohos.window接口实现媒体全屏的功能。 该场景多用于首页瀑布流媒体播放等。 效果图预览 使用说明&#xff1a; 点击全屏按钮&#xff0c;横屏媒体窗口。点击恢复窗口按钮&#xff0c;恢复媒体窗口。 实现步骤 在Video组件内调用 onFullscreen…

Gin 框架中前端向后端传值的几种方式介绍

我将为您详细讲解 Gin 框架中前端向后端传值的几种方式&#xff0c;并给出相应的简单例子。Gin 是一个高性能的 Web 框架&#xff0c;用于构建后端服务。在 Web 应用程序中&#xff0c;前端通常需要向后端发送数据&#xff0c;以便后端能够进行处理。以下是几种常见的前端向后端…

Vue2(六):生命周期、组件、组件的嵌套、VueComponent构造函数、单文件组件

一、生命周期 1.什么是生命周期&#xff1f; 生命周期 1.又名&#xff1a;生命周期回调函数、生命周期函数、生命周期钩子。 2.是什么&#xff1a;Vue在关键时刻帮我们调用的一些特殊名称的函数。 3.生命周期函数的名字不可更改&#xff0c;但函数的具体内容是程序员根据需求…

mybatis源码阅读系列(二)

前言 上一篇文章mybatis源码阅读系列&#xff08;一&#xff09;介绍了mybatis和原生jdbc的区别&#xff0c;并通过代码展示了两者的运行过程和结果&#xff0c;下面让我们继续详细了解下mybatis的执行过程&#xff1b; package com.wyl.mybatis.service;import com.wyl.mybat…

React三大属性---state,props,ref

react的三大属性 react的三大属性分别是state props 和ref 是传递数据的重要内容 State state是组件对象最重要的属性 包含多个key-value的组合呢 存在于组件实例对象中 基本使用 此时demo是通过onClick的回调 所以this是undefined 本来应该是window 但是局部开启了严格模…

【DL经典回顾】激活函数大汇总(十八)(ISRU附代码和详细公式)

激活函数大汇总&#xff08;十八&#xff09;&#xff08;ISRU附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不可或缺的角色&a…

Android Studio 打包 Maker MV apk 详细步骤

一.使用RPG Make MV 部署项目&#xff0c;获取项目文件夹 这步基本都不会有问题&#xff1a; 二.安装Android Studio 安装过程参考教材就行了&#xff1a; https://blog.csdn.net/m0_62491877/article/details/126832118 但是有的版本面板没有Android的选项&#xff08;勾…

ES模块化

Node.js默认并不支持ES模块化&#xff0c;如果需要使用可以采用两种方式。方式一&#xff0c;直接将所有的js文件修改为mjs扩展名。方式二&#xff0c;修改package.json中type属性为module。 导出 默认导出 // 向外部导出内容 export let a 10 export const b "孙悟空…

Vue2 引入使用ElementUI详解

目录 1 安装2 引入2.1 全局引入2.1.1 引入2.1.2 使用 2.2 按需引入2.2.1 引入2.2.2 使用 3 总结 1 安装 推荐使用 npm 的方式安装&#xff0c;它能更好地和 webpack打包工具配合使用。&#xff08;本项目使用安装方式&#xff09; npm i element-ui -S也可以使用其他的包管理…