Java中实现文件上传
目录
1、文件上传本地
1.1 原理
1.2 如何使用文件上传
1.2.1 引入文件上传的依赖
1.2.2 配置文件上传拦截器
1.2.3 完成文件上传的代码
2、文件上传oss服务器
2.1 为什么需要上传到oss服务器
2.2 如何使用oss
2.2.1 开启oss服务
2.2.2 在Java中引入依赖
2.2.3 查看自己ID和密钥
2.2.4 代码
3、案例
3.1 引入相关依赖
3.2 创建实体类
3.3 创建controller层
3.3.1 创建StudentController
3.3.2 创建UploadController
3.4 创建dao层
3.4.1 BaseDao
3.4.2 StudentDao
3.5 配置SpringMvc配置文件
3.6 编写upload.jsp文件
1、文件上传本地
1.1 原理
1.2 如何使用文件上传
1.2.1 引入文件上传的依赖
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!--jackson依赖:把controller层方法返回的java对象转化为json字符串--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version></dependency><!--文件上传依赖--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency></dependencies>
1.2.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>
1.2.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>
@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服务器
2.1 为什么需要上传到oss服务器
如果项目搭建了集群。那么导致文件数据无法共享。
如果项目的target删除了。导致文件数据丢失。
2.2 如何使用oss
2.2.1 开启oss服务
oss服务器网址
点击上面链接,跳转到阿里云的oss服务器页面,完成登录后,会进入oss管理控制台,如图所示
然后点击创建Bucket,操作如下图
2.2.2 在Java中引入依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>
2.2.3 查看自己ID和密钥
2.2.4 代码
@PostMapping("/upload2")public String upload2(MultipartFile myfile){// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 填写Bucket名称,例如examplebucket。String bucketName = "XXXXX";//上传到oss后的名字String objectName = UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();// 创建OSSClient实例。/*** String endpoint,自己的endpoint* String accessKeyId, 自己的id* String secretAccessKey自己的密钥*/String accessKeyId="XXXXXXX";String secretAccessKey="XXXXXXX";OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);try {InputStream inputStream = myfile.getInputStream();// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);// 创建PutObject请求。PutObjectResult result = ossClient.putObject(putObjectRequest);} catch (Exception oe) {}finally {if (ossClient != null) {ossClient.shutdown();}}return "success";}
3、案例
springmvc+jdbc+elementui+vue
添加和展示所有的功能
3.1 引入相关依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ykq</groupId><artifactId>qy174-springmvc04</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!--jackson依赖:把controller层方法返回的java对象转化为json字符串--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version></dependency><!--文件上传依赖--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!--oss的依赖--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency><!--mysql的jar--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency></dependencies>
</project>
3.2 创建实体类
@Data
public class Student implements Serializable {private Integer id;private String name;private String phone;private String email;private Integer age;private Byte gender;private Date createtime;private String head;}
3.3 创建controller层
3.3.1 创建StudentController
@Controller
@RequestMapping("/student")
public class StudentController {private StudentDao studentDao=new StudentDao();@GetMapping("/list")@ResponseBody //把java对象转化为json字符串public List<Student> list(){List<Student> list = studentDao.findAll();return list;}@PostMapping("/add")@ResponseBody //把java对象转化为json字符串public int add(@RequestBody Student student){int add = studentDao.add(student.getName(), student.getPhone(), student.getEmail(), student.getAge(), student.getGender(), student.getHead());return add;}
}
3.3.2 创建UploadController
@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";}@PostMapping("/upload2")@ResponseBodypublic String upload2(MultipartFile file){// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 填写Bucket名称,例如examplebucket。String bucketName = "qy174-8888";//上传到oss后的名字String objectName = UUID.randomUUID().toString().replace("-","")+file.getOriginalFilename();// 创建OSSClient实例。/*** String endpoint,自己的endpoint* String accessKeyId, 自己的id* String secretAccessKey自己的密钥* XX* XXX*/String accessKeyId="XXX";String secretAccessKey="XXX";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 "失败";}
}
3.4 创建dao层
3.4.1 BaseDao
public class BaseDao {protected Connection conn;protected PreparedStatement ps;protected ResultSet rs;//数据源对象private static DataSource dataSource;//静态代码块中static {try {//创建一个属性对象Properties properties = new Properties();//加载属性文件InputStream inputStream = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");properties.load(inputStream);//获取连接池对象dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}//获取连接对象public void getConn() throws Exception{conn = dataSource.getConnection();}//关闭资源public void closeAll(){if(rs!=null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(ps!=null){try {ps.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}//通用的增删改方法public int edit(String sql,Object...params){try {getConn();ps=conn.prepareStatement(sql);//为占位符赋值for(int i=0;i<params.length;i++){ps.setObject(i+1,params[i]);}int row = ps.executeUpdate();return row;} catch (Exception e) {e.printStackTrace();} finally {closeAll();}return 0;}}
/**1. 四个属性: connection preparedStatement ResultSet DataSource2. 静态代码块:[获取连接池]3. 获取连接对象的方法4. 关闭资源方法5. 通用的增删改方法*/
3.4.2 StudentDao
public class StudentDao extends BaseDao {//求总条数 select count(*) from t_studentpublic int getCount(){try {getConn();String sql="select count(*) as c from t_student";ps=conn.prepareStatement(sql);rs=ps.executeQuery();while (rs.next()){int c = rs.getInt("c");return c;}} catch (Exception e) {e.printStackTrace();} finally {closeAll();}return 0;}//查询所有学员信息--单元测试public List<Student> findAll(){List<Student> list=new ArrayList<Student>();try {getConn();String sql="select * from t_student";ps=conn.prepareStatement(sql);rs=ps.executeQuery();while (rs.next()){Student s=new Student();s.setId(rs.getInt("id"));s.setPhone(rs.getString("phone"));s.setEmail(rs.getString("email"));s.setAge(rs.getInt("age"));s.setName(rs.getString("name"));s.setCreatetime(rs.getDate("createtime"));s.setGender(rs.getByte("gender"));s.setHead(rs.getString("head"));list.add(s);}} catch (Exception e) {e.printStackTrace();} finally {closeAll();}return list;}//根据id查询学员信息public Student findById(String id){Student s=null;try {getConn();String sql="select * from t_student where id=?";ps=conn.prepareStatement(sql);ps.setObject(1,id);rs=ps.executeQuery();while (rs.next()){s=new Student();s.setId(rs.getInt("id"));s.setPhone(rs.getString("phone"));s.setEmail(rs.getString("email"));s.setAge(rs.getInt("age"));s.setName(rs.getString("name"));s.setCreatetime(rs.getDate("createtime"));s.setGender(rs.getByte("gender"));s.setHead(rs.getString("head"));}} catch (Exception e) {e.printStackTrace();} finally {closeAll();}return s;}//添加方法public int add(String name,String phone,String email,int age,int gender,String head){String sql="insert into t_student(id,name,phone,email,age,createtime,gender,head) values(null,?,?,?,?,now(),?,?)";return edit(sql,name,phone,email,age,gender,head);}//修改public int update(String id,String name,String phone,String email,int age,int gender){String sql="update t_student set name=?,phone=?,email=?,age=?,gender=?,createtime=now() where id=?";return edit(sql,name,phone,email,age,gender,id);}//删除方法public int delete(String id){String sql="delete from t_student where id=?";return edit(sql,id);}
3.5 配置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"><!--com.ykq 扫描该包以及该包下的子包--><context:component-scan base-package="com.Hs"/><!--开启注解驱动 不要导错mvc 默认使用的不是注解模式--><mvc:annotation-driven/><!--放行静态资源--><mvc:default-servlet-handler/><!--视图解析--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/views/"/><property name="suffix" value=".jsp"/></bean><!--文件上传解析器 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></beans>
3.6 编写upload.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%--表单: 提交方式必须为post enctype编码:multipart/form-data文件编码--%><form method="post" action="/upload2" enctype="multipart/form-data"><%--input必须设置文件文件框 而且必须起名称--%>选择上传的文件:<input type="file" name="myfile"/><br><input type="submit" value="上传"/></form>
</body>
</html>
相关文章:
Java中实现文件上传
目录 1、文件上传本地 1.1 原理 1.2 如何使用文件上传 1.2.1 引入文件上传的依赖 1.2.2 配置文件上传拦截器 1.2.3 完成文件上传的代码 2、文件上传oss服务器 2.1 为什么需要上传到oss服务器 2.2 如何使用oss 2.2.1 开启oss服务 2.2.2 在Java中引入依赖 2.2.3 查看自…...
一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语
我们可能有时候在处理字符时需要处理到非ASCII的字符,比如将表情、阿拉伯语转换为Unicode字符,从而避免在传输时会出现乱码的情况。 Unicode验证网站: unicode转换网站 目的:转换下面除ASCII字符外的字符为Unicode字符…...
小白的晋升之路
编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...
WebLogic:CVE-2017-10271[XML反序列化]
漏洞成因 Weblogic的WLS Security组件对外提供 webservice服务 其中使用了XMLDecoder来 解析用户传入的XML数据 在解析的过程中出现 反序列化漏洞 ,导致可执行任意命令 原理:https://xz.aliyun.com/t/10172 靶场部署 1.进入靶场目录 cd /vulhub-maste…...
Day13--JavaWeb学习之Servlet后端渲染界面
基于Day12中登录页面实现的修改,这里实现的是如果登录成功,跳到LoginSuccess页面中展示后端查询到数据库中的信息,并实现在浏览器实现插入数据和删除数据(mybaits)。 当输入账号密码正确后进入LoginSuccess页面&#x…...
【MySQL】全面剖析索引失效、回表查询与索引下推
1.索引失效的情况 以tb_user表举例,id为主键索引、name和phone字段上建立了一个普通索引,name和phone均为varchar类型。 索引列运算 当在 WHERE 子句或 JOIN 子句中对列使用函数或表达式时,索引会失效。 执行以下语句,可以发现执…...
1、爬⾍概述
1. 什么是爬虫? 爬虫(Web Crawler)是一种通过编写程序自动访问并提取互联网上数据的技术。爬虫可以帮助我们在浏览网页时自动收集和保存一些有用的数据,例如图片、视频和文本信息。简单来说,爬虫就是自动化的浏览器。…...
科普文:微服务之分布式链路追踪SkyWalking单点服务搭建
1. 概述 1.1 概念 SkyWalking 是什么? SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 提供分布式追…...
R 语言学习教程,从入门到精通,R的安装与环境的配置(3)
1、R 基础语法 一门新的语言学习一般是从输出 “Hello, World!” 程序开始,R 语言的 “Hello, World!” 程序代码如下: myString <- "Hello, World!" print ( myString )以上示例将字符串 “Hello, World!” 赋值给 myString 变量&#x…...
【Pageadmin】之cms漏洞
方法一:上传模块拿webshell 首页如下 第一步:访问admin/login,登录后台 第二步:使用哥斯拉工具生成payload 然后自动生成了一个asp的payload 第三步:上传文件 将asp文件压缩为压缩包,上传。 解压访问1.asp…...
AIGC重塑设施农业:让农事操作更智能,生产效率更高
设施农业是现代农业的重要组成部分,随着人工智能等前沿技术的快速发展,这个领域迎来了新的变革机遇。尤其是大语言模型(Large Language Model,LLM)技术的崛起,其强大的语言理解和知识汇聚能力,为设施农业智能化发展带来了新的想象空间。本文将深入探讨大模型技术在设施农业生产…...
netty应用-手写RPC
文章目录 手写RPC之案例定位与通信过程介绍RPC框架案例定位服务端与客户端架构通信过程1. 服务注册与发现2. 请求序列化与传输3. 请求处理与响应4. 响应反序列化与结果处理实现细节1. 服务端2. 客户端技术选型关键挑战总结手写RPC之请求响应通信协议定制协议结构示例消息头格式…...
私域流量变迁与精细移动化趋势下的AI智能名片小程序源码应用探索
摘要:随着移动互联网技术的飞速发展,私域流量的价值日益凸显,成为企业营销战略的重要组成部分。私域流量的精细化和移动化趋势不仅改变了传统的营销格局,也为新兴技术的应用提供了广阔空间。本文深入探讨了私域流量的变迁历程&…...
数据结构初阶之排序(下)
前言 上一期内容中我们了解了基本排序中的插入与选择排序,今天我将为大家带来剩下的几种排序算法 快速排序 快速排序是Hoare于1962年提出的⼀种⼆叉树结构的交换排序⽅法,其基本思想为:任取待排序元素序列中的某元素作为基准值,…...
RGB图像的读取与保存
目录 1、安装imageio 2、读取照片 3、保存照片 4、resize 5、示例代码 1、安装imageio pip install imageio -i https://pypi.tuna.tsinghua.edu.cn/simple 2、读取照片 import imageio img imageio.imread(image_path) 3、保存照片 import imageio import numpy as…...
江协科技51单片机学习- p35 AD/DA模拟/数字采样
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
C#裁剪图像的几种方法总结
前言 我们在上位机软件开发过程中经常需要裁剪图像,本文就是对c#中常见的裁剪图像方法进行总结。 1、克隆 直接调用Bitmap的Clone函数,然后指定需要裁剪的区域即可裁剪图像,该种方法不会损失精度 public static Bitmap CropImage_Clone(Bi…...
被遗忘的哑终端 —— 键盘键位演变的启发者
注:机翻,未校对。 The Forgotten World of Dumb Terminals 被遗忘的哑终端世界 A quick journey through the lost age of “glass teletypes.” 快速穿越失落的“玻璃电传打字机”时代。 From the earliest days of digital computers, researchers o…...
APACHE安装与应用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
预警器件控制思考
预警器件控制思考 最小示例思想 当读取到环境信息与环境阈值的时候, 我们预警系统就要根据这些信息做出判断,是否要启动器件。 最简单的就是, 举温度temp的例子, temp(温度)与temp_th(阈值), 通过判断, 得出是否要启动器件. 如果在一段时间内, 一直是环境异常, 我…...
[Day 43] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的隱私保護機制 隨著區塊鏈技術的廣泛應用,隱私保護成為了一個至關重要的問題。區塊鏈以其去中心化和透明性的特點,為數據管理和交易提供了新的方法。然而,這些特點也帶來了新的挑戰,尤其是在隱私保護方面。本文將深入探討…...
【星海随笔】路由器的启动过程
路由器的启动过程 1.加电之后,ROM运行加电自检程序(Post),检查路由器的处理器、接口、内存等硬件设备。2.执行路由器中的启动程序(Bootstrap),搜索操作系统。路由器操作系统扩张部分可以从Flash RAM中装入,也可从 TFT…...
[翻译] Asset Administration Shells
关于资产管理外壳 (AAS) 资产管理外壳 (AAS) 是工业4.0中的关键概念,为产品、资源(如设备)和过程提供信息隐藏和更高层次的抽象。AAS 是技术和设备无关的机器可读描述,提供访问资产属性和功能的统一接口。与现有解决方案不同&…...
linux 常用磁盘维护命令
badblocks 功能说明:检查磁盘装置中损坏的区块。 语 法:badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块] 补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。…...
滑动窗口大总结!!!妈妈以后再也不担心我不会做滑动窗口啦~
写在前面:全部题都源于力扣 讲解题目一:最小覆盖子串题目二:字符串排列题目三:找所有字母异位词题目四:无重复字符的最长子串题目五:滑动窗口的最大值 讲解 滑动窗口算法技巧主要用来解决子数组问题&#…...
从地铁客流讲开来:客流统计与清分释义
一、常见的客流统计 1. 进站客流 定义:指在某个时间段内,乘客进入地铁站的数量。示例:如果某天早上8点到9点之间有5000人次进入地铁站,则这段时间内的进站客流为5000人次。 2. 出站客流 定义:指在某个时间段内&…...
《Excelize权威指南》新书发布
在数据洪流涌动的数字化时代,数据处理与分析已跃升为解锁无限洞察力的金钥匙,赋能商业智慧、重塑医疗健康版图、驱动教育科研创新。然而,当数据量级爆炸式增长,传统工具如 Excel 虽被誉为数据处理领域的常青树,其手动操…...
Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记
概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...
【设计模式】代理模式详解
1.简介 代理模式是常用的Java设计模式,该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类,并在事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类对象与一个委托类对象关…...
Python变量和简单的数据类型
1、变量 massageHello python world! print(massage) massageHello world print(massage) 运行这个代码发现,同一个变量出现两个不同的结果 Hello python world! Hello world 在程序中,可随时修改变量的值&…...
网站开发 保证书/社群营销怎么做
数值运算 描述 获得用户输入的一个字符串,格式如下:…...
北京便宜网站建设/国内网站排名
...
给公司做个网站多少钱/深圳关键词优化软件
当我使用Java生成的有效负载及其签名发出post请求时,服务器接受该请求。在当我使用相同的有效负载并使用相同的算法生成签名但现在使用python时,我总是得到Bad Padding异常。在我比较了两个程序生成的sha,它们看起来是一样的,所以…...
室内设计师工资一般多少/2022年百度seo
反欺诈方向的实际应用很多,我有做过保险业反欺诈和零售快消业的欺诈检测,抛砖引玉的谈谈反欺诈项目的"道"和"术"。 具体的学习方法可以参考我最近的文章: 机器学习门下,有哪些在工业界应用较多,前…...
广西网站建设费用/提高工作效率英语
前言今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次…...
网站流量增加/广告营销留电话网站
多线程之间共享数据的方式探讨 方式一:代码一致 如果每个线程执行的代码相同,可以用一个 Runnable 对象,这个 Runnable 对象中存放那个共享数据(卖票系统可以这样做)。 public class MultiThreadShareData {public s…...