孙豪杰的博客

POS万达电商的灵丹妙药

所以通过POS级可以获取用户的交易数据,通过交易返利可以促进用户使用自己的会员身份,提高会员的活跃度。通过POS可以连接线上的资源,比如积分,代金券等,真正的线上线下互通。所以当万达电商推出自己的POS机的时候,将会很快实现了王健林的大会员,大数据的万达电商目标。再这个基础之上,玩电商能玩的,玩用户想玩的,万达电商将实现线上线下一体化的新万达广场。

POS万达电商灵丹妙药。

Spring,Mybastis,,Mysql多数据源事务不回滚的问题解决

因为架构升级,导致同样的功能在两套完全的里的系统中分别提供,又因为不能完全切换,所以系统1.0和系统2.0的数据要做到同步,所以为实现数据一致性,所以开发了一套数据同步系统,涉及到了多个数据源,调试过程中有数据异常导致的部分数据没有插入成功,但是存在数据没有回滚的情况。
1、本类调用@Transactional注解的方法事务不其中用
2、部分数据库引擎不支持事务,比如Mysql的Myisam引擎。
3、Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚
4、多数据源事务不能完全回滚

[JavaWeb及时通讯项目实战]第四章-用户聊天功能实现

我们在上一章开发了在线用户列表功能,本章我们开发聊天功能。聊天功能主要包括聊天记录显示,聊天内容发送和聊天信息接收。在在线用户列表中非当前用户后面存在“聊天”,下面我们实现这个按钮的功能,点击时建立当前用户与该用户的聊天链接。在/js/master.js中添加实现,在master.vm中引入master.js方法。chat函数实现获取用户的聊天界面,包括聊天记录以及发送聊天信息界面,替换到id=chatDiv的div中,具体实现如下:

[JavaWeb即时通讯项目实战]第三章-用户列表展示

上一章我们实现了用户登录的功能,登录后可以查看所有在线用户,这样才可以选择与谁聊天,因此本章实现在线用户列表的功能。用户可能存在很多,需要对用户列表做分页展示,列表分页是一个共用性比较强的功能,因此我们把分页作为一个通用的模块开发。

[JavaWeb即时通讯项目实战]第二章-主界面与登录

为了演练我们前面学到的知识,因此我们做一个简单的及时通讯web项目,包括用户登录,用户在线列表,个人对个人聊天功能,设计界面如下(程序员出品必属渣品):
界面分为四部分:
1、登录框,无密码登录
2、在线用户列表,所有登录服务器的用户会显示在每个人的用户列表中
3、用户聊天记录,显示当前用户与另外一个用户的猎头记录,并在聊天过程中刷新聊天记录
4、用户聊天记录发送功能

[JavaWeb即时通讯项目实战]第一章-SpringMVC,Spring和Mybatis框架项目搭建

当我们直接使用servlet开发web功能时,每个新的连接需要在web.xml中配置,获取参数时需要使用request.getParameter(“name”)去获取数据,为了解决这些类似的任务,很多解决这些问题的工程被开发出来,我们称之为框架,我们这里使用Spirng MVC做为前端的框架。
在数据库访问层,入参和出参的映射也是一些类似而繁琐的功能,借助mybatis可以跟方便的完成这些功能。
在StudentListServlet中为了返回学生列表,我们在方法中创建业务对象StudentInfoBo,那么每次请求都会创建新的对象,这些直接创建的对象,是依赖的一种,StudentListServlet直接依赖StudentInfoBo,为了解除这种直接依赖实现类的方式,我们引入Spring管理对象的生命周期和依赖关系。

[JavaWeb教程]第四章-java数据库开发

内存中的数据在程序重启或者服务器重启时会丢失,所以数据需要保存在硬盘中,关系型数据库是比较常用的数据存储方式,采用二维表(行列)模型存储的方式更加容易理解,关系型数据库有很多oracle, mysql 和 sql server是比较常用的,java web项目中经常使用mysql作为数据库存储。
1、sql是面向表的语言,java是面向对象的语言,所以java通过jdbc访问数据库时,最好有一个映射类,把sql的操作封闭在Dao(database access object数据库访问层)层,而不向其他的java代码中扩散,因此这里创建了Po(persistent object 持久化对象)对象StudentPo,属性与表列一一对应。
2、java与mysql的交互是通过网络连接实现的,所以我们在执行操作之前需要与mysql建立连接,这里把建立连接的过程封装为一个静态方法中ConnectionUtil.getConnection();
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password); //创建与mysql的连接,url为地址,username用户名,password密码。其中url的格式为jdbc:mysql://ip:端口/数据库名称?useUnicode=true&characterEncoding=UTF8,
”useUnicode=true&characterEncoding=UTF-8“设置字符传输编码方式为utf-8为了解决中文乱码问题。
3、数据的交互模式:
创建链接 ; Connection conn = ConnectionUtil.getConnection();
创建执行语句;pstmt = conn.prepareStatement(sql);
设置参数;pstmt.setInt(1, id);每个”?”表示一个参数,从1开始顺序设置。
执行语句;rowNum = pstmt.executeUpdate();更新(增删改)执行,返回影响的行数
pstmt.executeQuery();查询执行,返回结果集ResultSet
遍历结果集,把数据存储到PO中;rs.next()获取下一行,rs.getString(“name”)获取该行对应单元格的值。
关闭执行语句;pstmt.close();
关闭连接;conn.close();

[JavaWeb教程]第三章-Servlet开发

前面我们介绍到了form表单,其中action属性是把表单数据提交的路径,那么数据在服务器端是怎么处理的呢?我们一起来学习一下java servlet开发实现数据在服务器端的处理。
request,请求,前面我们学习Socket时,讲到了socket有一个输入流,一个输出流,用于客户端和服务器端之间通信。这里的request就可以理解为输入流的封装,实现了客户端和服务器端的http交互。
response,应答,输出流的封装。
session,每次点击,提交数据都是一次交互,客户端(这里可以理解为浏览器)和服务器端的一段时间内的全部的交互称为回话(session),session有过期时间,两次请求超出了服务器设置(可变更)的session过期时间,第二次请求就会创建新的回话。
cookie,客户端按照域名存储的键值对信息,可以持久化到硬盘。键值对中有一个key sessionId(也可以变更,但是作用类似)是实现session的关键数据。当客户端访问服务器端时,服务器端会查看是否存在sessionId如果存在,则会把本次请求和session关联,如果不存在则创建新的session,并把sessionId赋值给请求的cookie,客户端会把cookie信息在本地保存。大部分的sessionId的cookie信息时内存存储,没有持久化到硬盘,所以重启浏览器会导致创建新的session。
servletContext,实例容器,每个web服务器存在一个servletContext,启动时创建,关闭时销毁,所以我们重启服务后学生信息个数被清空。

[JavaWeb教程]第二章-jQuery简明开发教程

为了给网页增加动态效果,设计了在浏览器(最近新出的note.js技术,可以使用javascript在服务端运行,这里不讨论这点)上运行的javascript,直接使用javascript不太方便,所以基于javascript语言开发了很多工具包,其中最常用的一个就是jquery,也是本章学习的主题。
我们基本把jquery常用的方法都介绍了一遍,包括各种选择器,数据获取,文档处理以及数组遍历,Ajax提交工具等,一篇不到1万字的文章肯定不能完全介绍jquery,开发中需要不断的查参考手册才能使用更快速的方法解决问题。

[JavaWeb教程]第一章-HTML简明开发教程

网页界面一般会有网页设计师开发,程序员在开发好的静态界面上做动态扩展,所以也需要学习html语言,会一些简单的开发和修改。另外很多小公司没有专业的网页设计师,程序员会在一些基础上(就是扒别人做好的网页)做开发和变更,因此作为一个Java工程师有必要学习一下HTML基础开发。本文介绍常用的h,span,div,br,font,i,b,a,img,ul,ol,li,tatble,form等常用标签。