1.给后台管理系统的其他页面加左边栏,并抽取共用部分
2.完成产品列表功能
3.商品上下架
4.商品新增和修改功能,注意页面下拉框的展示及一些前台不会传输状态的处理了。
5.注意该部分没有使用文件服务器,算是功能缺失!!!!
6.類目完成。
7.登陸
1)分佈式session
2)sessionid token
3)ip hash
4)單獨一個服務,redis集群主從複製
1》增加卖家信息表,完成dao service 及相关测试
2》完成微信开放平台授权,类似于微信公众平台。
3》实现登陆登出操作。(这里的redis有什么用,又没有用作缓存)
1》》提供的redis没有密码
2》》引入redis依赖,配置redis连接信息
3》》token常量配置,cookie工具类,回头再看看
4》》注意跳转,再研究一下吧!!!
5》》最后再看看有没有办法模拟测试一下吧
5)微信开放平台 微信扫码登陆又他妈不行了!
可以定制化的将微信二维码嵌入自己的页面中。
6)12-8aop实现 登陆验证
定义切面类,查询不到token抛出异常
8.消息
1)微信模板消息
微信公众平台,可以使用测试账号测试
service
List data= Arrays.asList()
注意消息推送的异常没有让其抛而是直接try了,是因为订单操作是有事务注解的,如果不try,有可能影响订单的状态更新等操作。消息推送最好不要影响主业务!
2)websocket(和其他的通信有啥业务场景区别????)
客户端和服务端的通信
客户端放在order/list页面中,使用的html5原生websocket,监听,有后端信息推送来,就做相应操作
<script>
var websocket=null;
if('WebSocket' in window){/*判断下浏览器是否支持*/
/*存在于window对象中说明支持,创建websocket对象*/
websocket= new websocket('ws://稍后完善');
} else{
alert('该浏览器不支持websocket!');
}
websocket.onopen=function(event){
console.log('建立连接');
}
websocket.onclose=function (event) {
console.log('连接关闭');
}
/*收到消息时的事件*/
websocket.onmessage=function (event) {
console.log('收到信息:'+event.data);
//弹窗,播放音乐等!
}
/*发生错误时事件*/
websocket.onerror=function (event) {
alert('websocket通信发生错误!');
}
/*窗口关闭前关闭socket*/
window.onbeforeunload=function () {
websocket.close();
}
</script>
后端:
引入依赖
<!--websocket依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
package com.scbg.config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @program: sell
* @description: websocket配置类
* @author: 三层饼干儿
* @create: 2019-08-22 13:48
**/
@Component
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
后端对应前台事件的处理!
package com.scbg.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @program: sell
* @description: websocket处理类
* @author: 三层饼干儿
* @create: 2019-08-22 15:27
**/
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
private Session session;
private static CopyOnWriteArraySet<WebSocket> webSocketSet=new CopyOnWriteArraySet<>();
/**
* 对应前端websocket连接事件
* @param session
*/
@OnOpen
public void onOpen(Session session){
this.session=session;
webSocketSet.add(this);
log.info("【websocket消息】有新的连接,总数:{}",webSocketSet.size());
}
@OnClose
public void onClose(){
webSocketSet.remove(this);
log.info("【websocket消息】断开连接,总数:{}",webSocketSet.size());
}
@OnMessage
public void onMessage(String message){
log.info("【websocket消息】收到客户端发来的消息:{}",message);
}
public void sendMessage(String message){
for (WebSocket webSocket:webSocketSet){
log.info("【websocket消息】广播消息,message={}",message);
try {
webSocket.session.getBasicRemote().sendText(message);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
测试项目报错:
Description:
Configuration property name 'projectUrl' is not valid:
Invalid characters: 'U'
Bean: projectUrlConfig
Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter
Action:
Modify 'projectUrl' so that it conforms to the canonical names requirements.
解决,命名不规范,原因写得很明确了。。。
测试不成功,加了登陆校验,草!!!!回头看下怎么处理
在创建新订单业务中,加入发送websocket信息!
完善页面,加入音乐等。。。还是没法测,感觉会有问题,api都不像对的样子
9.异常捕获 补充,学习但是没写
1)handler增加捕获下单异常
2)如果出现异常对面不想收到200,可以使用注解。
10mybatis,跟项目无关,就是介绍一下而已。
关于JPA,Hibernat 中的JPA,及Spring-Data-JPA
JPA是规范,Hib对其进行了实现,spring-data对其进行了封装
11.分布式锁
sychronize
1)能解决
2)但是无法细粒度控制
3)只能单点
redis分布式锁
1)细粒度
2)支持分布式
3)多机器上多进程对同一个操作的互斥
实际测试的确比关键字那个快,但是成交量减少太多了呀,难道分布式锁就是为了让不能处理的及时回复一个不能买到?????同一段代码只能一个访问????
12.redis缓存,跟以前差不多,不过都使用注解了!
1)命中
2)失效
3)更新
13.项目部署
1)tomcat
2)java-jar
终于结束了!!!