淘淘商城第三天笔记

问题描述:

传智播客 Java 学院 传智. 入云龙 淘淘商城第三天

1 第二天内容回顾

1、展示商品列表。

a) 分页插件的使用PageHelper 。

b) easyUIDataGrid 的使用方法

2、商品类目选择

a) easyUI 异步tree 控件的使用。

3、图片上传

a) 为什么要有图片服务器

b) FastDFS

c) http 服务器。Nginx 。

4、Nginx

a) http 服务器、虚拟主机、反向代理及负载均衡。 b) 虚拟主机

i. 基于端口

ii. 基于域名

2 课程计划

1、nginx 反向代理和负载均衡

2、FastDFS 的使用

3、实现图片上传功能

传智播客 Java 学院 传智. 入云龙

3 Nginx 的反向代理

3.1 什么是反向代理

正向代理

传智播客 Java 学院 传智. 入云龙 反向代理:

反向代理服务器是引用在服务端。决定哪台服务器提供服务。

3.2 反向代理的模拟

3.2.1 反向代理

应该有一个nginx 服务器有多个应用服务器(可以是tomcat ) 可以使用一台虚拟机,安装一个nginx ,多个tomcat ,来模拟。

传智播客 Java 学院 传智. 入云龙

3.2.2 负载均衡

只需要在upstream 的server 后面添加一个weight 即可代表权重。权重越高,分配请求的数量就越多。默认权重是1

4 图片服务器的搭建

4.1 什么是FastDFS

FastDFS 是用c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

传智播客 Java 学院 传智. 入云龙

4.2 文件上传流程

传智播客 Java 学院 传智. 入云龙 4.3 文件下载流程

4.4 上传文件的文件名

客户端上传文件后存储服务器将文件ID 返回给客户端,此文件ID 用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

? 组名:文件上传后所在的storage 组名称,在文件上传成功后有storage 服务器返回,需

要客户端自行保存。

? 虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了

store_path0则是M00,如果配置了store_path1则是M01,以此类推。

? 数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据

文件。

文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

传智播客 Java 学院 传智. 入云龙 4.5 FastDFS 搭建

可以使用一台虚拟机来模拟,只有一个Tracker 、一个Storage 服务。 配置nginx 访问图片。

4.5.1 搭建步骤

第一步:把fastDFS 都上传到linux 系统。

第二步:安装FastDFS 之前,先安装libevent 工具包。

yum -y install libevent

第三步:安装libfastcommonV1.0.7工具包。

1、解压缩

2、./make.sh

3、./make.sh install

4、把/usr/lib64/libfastcommon.so文件向/usr/lib/下复制一份

第四步:安装Tracker 服务。

1、解压缩

2、./make.sh

3、./make.sh install

安装后在/usr/bin/目录下有以fdfs 开头的文件都是编译出来的。 配置文件都放到/etc/fdfs文件夹

4、把/root/FastDFS/conf目录下的所有的配置文件都复制到/etc/fdfs下。

5、配置tracker 服务。修改/root/FastDFS/conf/tracker.conf文件。

传智播客 Java 学院 传智. 入云龙

6、启动tracker 。/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

重启使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 第五步:安装storage 服务。

1、如果是在不同的服务器安装,第四步的1~4需要重新执行。

2、配置storage 服务。修改/root/FastDFS/conf/storage.conf文件

3、启动storage 服务。

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

第六步:测试服务。

1、修改配置文件/etc/fdfs/client.conf

传智播客 Java 学院 传智. 入云龙

2、测试

/usr/bin/fdfs_test /etc/fdfs/client.conf upload anti-steal.jpg

第七步:搭建nginx 提供http 服务。

可以使用官方提供的nginx 插件。要使用nginx 插件需要重新编译。

fastdfs-nginx-module_v1.16.tar.gz

1、解压插件压缩包

2、修改/root/fastdfs-nginx-module/src/config文件,把其中的local 去掉。

3、对nginx 重新config

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi \

--add-module=/root/fastdfs-nginx-module/src

4、make

5、make install

6、把/root/fastdfs-nginx-module/src/mod_fastdfs.conf文件复制到/etc/fdfs目录下。编辑:

传智播客 Java 学院 传智. 入云龙

7、nginx 的配置

在nginx 的配置文件中添加一个Server : server {

listen 80;

server_name 192.168.101.3;

location /group1/M00/{

#root /home/FastDFS/fdfs_storage/data;

ngx_fastdfs_module;

}

}

8、将libfdfsclient.so 拷贝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

9、启动nginx

4.6 图片服务的使用

官方提供一个jar 包

使用方法:

1、把FastDFS 提供的jar 包添加到工程中

2、初始化全局配置。加载一个配置文件。

3、创建一个TrackerClient 对象。

4

、创建一个

TrackerServer 对象。

5、声明一个StorageServer 对象,null 。

6、获得StorageClient 对象。

传智播客 Java 学院 传智. 入云龙

4.7 使用工具类上传图片

传智播客 Java 学院 传智. 入云龙 5 图片上传功能

5.1 功能分析

5.1.1 请求的参数:

5.1.2 请求的url : /pic/upload

参考文档:

传智播客 Java 学院 传智. 入云龙

5.1.3 添加jar 包:

Commons-io 、fileupload ,两个jar 包。

5.1.4 在springmvc.xml 中配置多媒体解析器

5.1.5 响应的内容

返回格式(JSON)

需要创建一个pojo 描述返回值。

传智播客 Java 学院 传智. 入云龙

5.2 Service 层

接收图片数据,把图片上传到图片服务器,返回PictureResult 。需要使用FastDFSClient 工具类。

参数:MultiPartFile pictureFile

返回值:PictureResult

传智播客 Java 学院 传智. 入云龙

5.3 Controller

接收上传的图片信息,调用Service 把图片上传到图片服务器。返回json 数据。需要使用

5.4 加载属性文件

1、创建一个属性文件

2、使用spring 容器扫描属性文件。

3、@Value注解取属性的值。

5.5 解决浏览器兼容性问题

要求返回的数据是一个文本类型,要求content-type 为text/plan

传智播客 Java 学院 传智. 入云龙

传智播客 Java 学院 传智. 入云龙

6 父子容器

子容器可以访问父容器的对象,父容器不能访问子容器中的对象。

1个回答 分类:综合 2018-01-23

问题解答:

我来补答
 
 
展开全文阅读
剩余:2000