关于java:CGB2010京淘项目Day07

48次阅读

共计 6401 个字符,预计需要花费 17 分钟才能阅读完成。

cgb2010- 京淘我的项目 Day07

  1. 常识总结

========

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. 无状态,在调用一个接口(拜访、操作资源)的时候,能够不必思考 上下文,不必思考以后状态,极大的升高了复杂度。简略、低耦合

  1. 实现商品文件上传

============

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
@AllArgsConstructor
public 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_IMAGE
image.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 特点

  1. 反向代理服务器是介于用户和服务器之间的
  2. 用户间接拜访代理服务器, 认为代理服务器就是实在的服务器.
  3. 用户不分明实在的服务器到底是谁.
  4. 反向代理是服务器端代理. 爱护了实在的服务器信息.
  5. 反向代理次要的作用 拜访服务器取得服务器数据的.

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…

正文完
 0