+商城首页-整合thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
渲染一级分类
package com.like.mall.product.controller.web;
/**
* @author like
* @since 2020-11-19 14:49
* web 路径跳转
*/
@Controller
public class IndexController {
@Resource
CategoryService categoryService;
@GetMapping({"/", "/index.html"})
public String indexPage(Model model) {
// 1.查询所有的一级分类
List<CategoryEntity> ens = categoryService.getLevelFirstCategory();
model.addAttribute("data",ens);
return "index";
}
}
<select id="getLevelFirstCategory" resultType="com.like.mall.product.entity.CategoryEntity">
select * from `mall-product`.pms_category
where parent_cid = 0;
</select>
获取所有二级分类和三级分类的json
/**
* 获取所有二级和三级分类的json数据
*
* @return {@link Map<String, List<Catelog2Vo>>}
*/
@ResponseBody
@GetMapping("/index/catalog.json")
public Map<String, List<Catelog2Vo>> getCatalogJson() {
return categoryService.getCatalogJson();
}
}
@Override
public Map<String, List<Catelog2Vo>> getCatalogJson() {
// 1.找出所有的一级分类
List<CategoryEntity> level1 = getLevelFirstCategory();
// 2.封装数据
return level1.stream()
.collect(Collectors.toMap(k -> k.getCatId().toString(), v -> {
// 3.查找当前一级分类下的二级分类
List<CategoryEntity> level2 = baseMapper.selectList(new QueryWrapper<CategoryEntity>()
.eq("parent_cid", v.getCatId()));
// 4.封装二级分类vo
List<Catelog2Vo> vo2s = new ArrayList<>();
if (level2 != null) {
vo2s = level2.stream()
.map(i2 -> {
Catelog2Vo Vo2 = new Catelog2Vo();
Vo2.setCatalogId(String.valueOf(v.getCatId()));
Vo2.setId(i2.getCatId().toString());
Vo2.setName(i2.getName());
// 5.寻找三级分类
List<CategoryEntity> level3 = baseMapper.selectList(new QueryWrapper<CategoryEntity>()
.eq("parent_cid", i2.getCatId()));
// 6.封装三级级分类vo
List<Catelog2Vo.Catelog3Vo> vo3s = null;
if (level3 != null) {
vo3s = level3.stream().map(i3 -> {
Catelog2Vo.Catelog3Vo Vo3 = new Catelog2Vo.Catelog3Vo();
Vo3.setCatalog2Id(i3.getParentCid().toString());
Vo3.setId(i3.getCatId().toString());
Vo3.setName(i3.getName());
return Vo3;
}).collect(Collectors.toList());
}
Vo2.setCatalog3List(vo3s);
return Vo2;
}).collect(Collectors.toList());
}
return vo2s;
}));
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Catelog2Vo {
private String catalogId; // 一级父分类id
private List<Catelog3Vo> catalog3List; // 三级子分类id
private String id;
private String name;
/**
* 二级分类vo
*
* @author like
* @date 2020/11/22 16:47:07
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Catelog3Vo {
private String catalog2Id;
private String id;
private String name;
}
}
nginx搭建域名访问环境(反向代理)
1.在hosts中添加配置
ip(nginx所在的ip) like.mall.com
2.让nginx进行反向代理,所有请求like.mall.com->发送到商城首页
nginx的配置文件
vim /root/app/nginx/conf/nginx.conf
# 全局块 配置影响nginx的全局指令,如:用户组,pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# events块 配置影响nginx服务器或用户的网络连接 如:每个进程的最大连接数,选取哪种数据驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等
events {
worker_connections 1024;
}
# http块 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置,如文件引入,mime-type定义,日志自定义,是否使用sendifle传输文件,连接超时时间,单连接请求数等
http {
# http全局块 如upstream,错误页面连接超时等
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
# server块 配置虚拟主机的相关参数,一个http中可以有多个server
server {
listen 80;
listen [::]:80;
server_name localhost;
charset utf-8;
#access_log /var/log/nginx/host.access.log main;
# location 配置请求的路由,以及各种页面的处理情况
location / {
charset utf-8;
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
压力测试-jemter
- 响应时间:用户从客户端发起一个请求到客户端接收从服务端返回的响应结束所耗费的时间
- hps:每秒点击次数
- tps:系统每秒处理数
- qps:每秒处理查询次数
nginx动静分离
1.把static中的index上传到nginx中的html中
2.在所有请求路径中添加/static/
3.修改配置文件