cgb2010-京淘我的项目Day07
- 常识总结
========
1.1 RestFul长处
面试题目: 当初越来越多的企业应用间接应用restFul形式实现业务传参. restFul有什么长处? 为什么不必传统的形式传递数据??
例子: 将业务数据动静的拼接到URL地址中.
http://localhost:8091/addUser/100/tomcat猫/18/女
惯例: http://localhost:8091/addUser?id=100&name=“tomcat猫”&age=18&sex=“女”
答案:
1.轻量,间接基于http 利用不同的申请的形式实现不同的CURD操作.面向资源,高深莫测,具备自解释性。
2.数据形容简略,个别以xml(当初用的大量 结构复杂),json做数据交换。
3.无状态,在调用一个接口(拜访、操作资源)的时候,能够不必思考上下文,不必思考以后状态,极大的升高了复杂度。简略、低耦合
- 实现商品文件上传
============
2.1 页面URL剖析
2.2 参数阐明
2.3 页面JS剖析
2.4 文件上传返回值剖析
{“error”:0,“url”:“图片的保留门路”,“width”:图片的宽度,“height”:图片的高度}
error: 示意错误信息 0 上传胜利!! 1.上传失败.
url地址: 图片虚构门路地址(辨别实在磁盘地址)
width/height 作为图片/宽和高必须的属性.
2.5 商品回显VO封装
`package com.jt.vo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;/** * @author 刘昱江 * 工夫 2021/1/26 */@Data@Accessors(chain = true)@NoArgsConstructor@AllArgsConstructorpublic class ImageVO { // {"error":0,"url":"图片的保留门路","width":图片的宽度,"height":图片的高度} private Integer error; //0 失常 1 失败 private String url; private Integer width; private Integer height; public static ImageVO fail(){ return new ImageVO(1, null, null, null); } public static ImageVO success(String url,Integer width,Integer height){ return new ImageVO(0, url, width, height); }}`
2.6 正则表达式介绍
2.6.1 正则介绍
正则表达式,又称规定表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些合乎某个模式(规定)的文本。
许多程序设计语言都反对利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最后是由Unix中的工具软件(例如sed和grep)遍及开的。正则表达式通常缩写成“regex”,复数有regexp、regex,复数有regexps、regexes、regexen。
2.6.2 正则表达式语法
2.6 编辑FileController
`/** * 实现文件上传 * 1.页面URL地址:http://localhost:8091/pic/upload?dir=image * 2.参数信息: uploadFile * 3.返回值: ImageVO对象 */ @RequestMapping("/pic/upload") public ImageVO uploadFile(MultipartFile uploadFile){ return fileService.upload(uploadFile); }`
2.7 编辑properties配置文件
`#指定图片存储配置信息image.localDirPath=E:/JT_IMAGEimage.urlPath=http://image.jt.com`
2.8 编辑FileService
`package com.jt.service;import com.jt.vo.ImageVO;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.time.format.DateTimeFormatter;import java.util.Date;import java.util.HashSet;import java.util.Set;import java.util.UUID;/** * @author * 工夫 2021/1/26 */@Service@PropertySource(value = "classpath:/properties/image.properties",encoding = "UTF-8")public class FileServiceImpl implements FileService{ //形式1: 利用汇合实现数据的校验 private static Set<String> typeSet = new HashSet<>(); @Value("${image.localDirPath}") private String localDirPath; // = "E:/JT_IMAGE"; @Value("${image.urlPath}") private String urlPath; // = "http://image.jt.com"; static {//动态代码块 为属性赋值,初始化实例对象的. typeSet.add(".jpg"); typeSet.add(".png"); typeSet.add(".gif"); } /** * 知识点: * 1.代码的安全性 * 2.多问一下本人如果什么什么 应该怎么办?? * * 文件上传业务阐明: * 1.校验文件上传是否为图片类型? jpg|png|gif.... * 2.为了避免恶意程序 木马.exe.jpg * 3.为了保障检索速度,须要将图片 分目录存储. * 4.如何避免文件重名??? * @param uploadFile * @return * * 正则语法: * 1.{n} 指定次数 * 2.[a-z] 字符必须满足汇合中的一个元素 * 3.(a|n|z) 分组的写法 满足a或者n或者z */ @Override public ImageVO upload(MultipartFile uploadFile){ //1.校验文件类型 abc.jpg String fileName = uploadFile.getOriginalFilename().toLowerCase(); //1.1 利用正则表达式校验是否满足图片格式要求 if(!fileName.matches("^.+.(jpg|png|gif)$")){ return ImageVO.fail(); } //2.校验是否为图片对象 try { BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream()); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); if(width==0 || height==0){ return ImageVO.fail(); } //3.实现分目录存储 //3.1 动静生成hashcode编码 之后2位一隔 生成多级目录.目录层级太深 笛卡尔积较大 遍历不便 //3.2 能够动静以以后的工夫为存储的目录构造 yyyy/MM/dd String dateDirPath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date()); //文件存储的目录 E:/JT_IMAGE/2021/01/26/ String fileDirPath = localDirPath + dateDirPath; File fileDir = new File(fileDirPath); if(!fileDir.exists()){ //判断文件目录是否存在 fileDir.mkdirs(); //创立目录 } //4.利用UUID动静生图片名称 uuid.jpg String uuid = UUID. randomUUID().toString().replace("-", ""); //abc.jpg String fileType = fileName.substring(fileName.lastIndexOf(".")); String newFileName = uuid + fileType; //5.实现文件上传 File realFile = new File(fileDirPath + newFileName); uploadFile.transferTo(realFile); //6.编辑图片的虚构门路 //6.1磁盘地址: E:JT_IMAGE202101261b0e435933ac42cabec53b20ffbcfe90.png //6.2虚拟地址 http://image.jt.com202101261b0e435933ac42cabec53b20ffbcfe90.png String url = urlPath + dateDirPath + newFileName; return ImageVO.success(url,width,height); } catch (IOException e) { e.printStackTrace(); return ImageVO.fail(); } } /** * 知识点: * 1.代码的安全性 * 2.多问一下本人如果什么什么 应该怎么办?? * * 文件上传业务阐明: * 1.校验文件上传是否为图片类型? jpg|png|gif.... * 2.为了避免恶意程序 木马.exe.jpg * 3.为了保障检索速度,须要将图片 分目录存储. * 4.如何避免文件重名??? * @param uploadFile * @return */ /* @Override public ImageVO upload(MultipartFile uploadFile) { //1.校验是否为图片类型 String fileName = uploadFile.getOriginalFilename(); //1.1因为大小写问题 导致校验异样bug 所有全副转化为小写 fileName = fileName.toLowerCase(); //1.2截取下标 int index = fileName.lastIndexOf("."); //1.3 如果下标为-1示意没有后缀 应该提前结束 if(index == -1){ //没有后缀.程序应该提前结束 return ImageVO.fail(); } //1.4校验是否为图片类型 String fileType = fileName.substring(index); if(!typeSet.contains(fileType)){ //图片类型不符 return ImageVO.fail(); } return null; }*/}`
2.9 页面成果展示
1).上传图片实现之后,显示域名地址如下
2).切换磁盘地址 查看门路是否正确
3 Nginx
3.1 Nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0公布于2004年10月4日。
其将源代码以类BSD许可证的模式公布,因它的稳定性、丰盛的功能集、示例配置文件和低系统资源的耗费而闻名。2011年6月1日,nginx 1.0.4公布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
特点:
1.占用内存少 tomcat服务器启动200M Nginx服务器启动时 2M
2.并发能力强 tomcat并发能力150-200左右 Nginx并发能力 3-5万/秒
3.Nginx次要的性能做反向代理
4.Nginx能够作为负载平衡服务器应用
3.2 对于图片回显业务阐明
网络虚拟地址:http://image.jt.com/2021/01/2...
实在的磁盘地址:E:JT_IMAGE202101261b0e435933ac42cabec53b20ffbcfe90.png
阐明:因为某些起因,用户无奈间接拜访图片服务器.须要一个代理进行直达.
3.3 反向代理
3.3.1 概念
反向代理服务器位于用户与指标服务器之间,然而对于用户而言,反向代理服务器就相当于指标服务器,即用户间接拜访反向代理服务器就能够取得指标服务器的资源。同时,用户不须要晓得指标服务器的地址,也毋庸在用户端作任何设定。反向代理服务器通常可用来作为Web减速,即应用反向代理作为Web服务器的前置机来升高网络和服务器的负载,进步拜访效率
3.3.2 特点
- 反向代理服务器是介于用户和服务器之间的
- 用户间接拜访代理服务器,认为代理服务器就是实在的服务器.
- 用户不分明实在的服务器到底是谁.
- 反向代理是服务器端代理.爱护了实在的服务器信息.
- 反向代理次要的作用 拜访服务器取得服务器数据的.
3.4 正向代理
3.4.1 阐明
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。客户端能力应用正向代理。
3.4.2 特点
1.正向代理服务器介于用户和指标服务器之间
2.用户十分分明的晓得服务器网址是谁.
3.服务器端不分明实在的用户是谁.
4.正向代理个别都是客户端代理.爱护了用户的信息.
5.正向代理个别都是为了获取网络资源.例如路由器
3.5 对于正向/反向代理阐明
4 对于虚拟机阐明
4.1 查看虚拟机网卡
4.2 设定虚拟机网段
4.2.1 虚构网络编辑器设定
4.2.2 虚构网络编辑器设定
4.2.3 虚拟机设定
1).网关阐明
2).设定DHCP
3).查看IP地址 ipconfig
4.2.4 运行Linux零碎
4.2.5 VT-X异样阐明
因为计算机出厂时,敞开了虚拟化的开关. 须要通过BIOS零碎操作CPU选项 开启VT-X选项.
进入BIOS 快捷键: F2
4.2.6 近程软件下载
https://mobaxterm.mobatek.net...