SSH框架电子商城-系统技术分析
——————·今天距2020年62天·——————
这是ITester软件测试小栈第71次推文
大家好
我是coco小锦鲤
双十一还有半把个月才到
淘宝京东唯品会
天猫苏宁当当网
都在放大招让我们买买买
而一个最可怕的病毒
蔓延了主流社交软件
双十一全民开喵铺
冷静一想
如果一个活动能让上亿人痛恨交加
其实也侧面证明了它的成功
相信这几天淘宝和支付宝的打开率
一定是蹭蹭蹭的往上涨
谁不想有这风光的一天呢?
怎么去做一个购物平台呢?
coco这就给大家陆续分享
SSH框架电子商城系列文章
今天主要对系统技术进行介绍
包括SSH框架
MySQL
C3p0连接池
EasyUI框架
JavaMail邮件服务
一
SSH
SSH即Struts+Spring+Hibernate,是典型的J2EE三层结构,分为表现层、中间层和数据访问层。三层体系将数据表现、业务逻辑和数据访问分开。业务逻辑、数据访问、权限拦截及合法性校验等工作放在中间层处理,客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库打交道。框架相当于一个工具,比如你在挖矿的时候,需要一把铲子,和一个动作,框架就是这把铲子和动作。在各种整合的方案中,SSH已成为JavaEE应用开发的主流体系,原理图如下:
二
MySQL
MySQL是一个开放源码的小型关联式数据库管理系统,凭借速度快、轻量级、成本低、优化的SQL查询算法、开源免费等优势被广泛地应用在Internet上的中小型网站中。
MySQL优点:
1.有效利用服务器资源:当单个服务器资源过盛时,可以充分利用剩余的资源来提供更多的服务。
2.节约服务器资源:当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从复制,这时多实例就再好不过了。
3.方便后期架构扩展:当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以用一组物理数据库服务器在上面部署多个实例,方便后续扩展、迁移。
jdbc.properties添加如下信息:
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/ITester_B2CShop
jdbc.user = root
jdbc.password =123
三
C3P0
C3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。它有效的提高了数据库与应用程序之间的访问效率,并且具有编码简单、易用性好、支持连接复用的特性。
具体如何使用c3p0连接池呢?
(1)下载jar包;
(2)配置文件;
作为一个数据库连接池自然有很多参数要设置,当然就算不设置也有默认的,不过那不一定能满足要求。配置文件没有什么特别的要求,可以是xml也可以是properties甚至与txt都行,下面是我们要做的电子商城的C3P0连接池配置:
C3P0连接池配置:
* 引入外部属性文件:
* jdbc.properties
* 配置连接池:<!-- 配置连接池: --><!-- 引入外部属性文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置C3P0连接池: --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.user}"/><property name="password" value="${jdbc.password}"/></bean>
连接池的好处是不必每次连接都新建一个连接,可以直接从池中取,节约内存资源。
四
EasyUI
JQuery EasyUI是一种基于jQuery、Angular.、Vue和React的用户界面插件集合。是基于JQuery的UI插件集合体,只需要开发者了解一些简单的HTML标签,就可以打造出功能丰富并且美观的UI界面,而且也有利于节省网页的开发时间和规模。
EasyUI优点:
1.可以创建现代化,互动,JavaScript应用程序,提供必要的功能。
2.不需要写很多代码,只需要通过编写一些简单HTML标记,就可以定义用户界面。
3.是个完美支持HTML5网页的完整框架。
4.节省网页开发的时间和规模。
5.很简单但功能强大。
EasyUI包括以下Demo:
五
JavaMail邮件服务
JavaMail是处理电子邮件的应用程序接口,它预置了一些最常用的邮件传送协议的实现方法。JavaMail协议包括定义了邮件客户端软件的简单邮件传输协议(SMTP )以及邮件客户端与POP3服务器的通讯规则的邮局协议(POP3)。JavaMail发送邮件的原理图如下:
JavaMail 下载地址: https://github.com/javaee/javamail/releases
下载的这个JavaMail版本,包含了SMTP, IMAP, 和 POP3 协议的实现。
JavaMail API 按照功能可以划分为如下三大类:
1.创建和解析邮件的API;
2.发送邮件的API;
3.接收邮件的API;
在理解下面通过代码实现邮件的发送时,我们可以将邮件发送假想为火箭运载卫星发送。其中Message 是卫星,Transport 是火箭,而卫星和火箭的构建都需要 Session 的帮助,这样的关系更加便于记忆。
使用 JavaMail 发送简单的纯文本邮件:
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;/*** 邮件发送工具类* @author ITester.coco**/
public class MailUitls {/*** 发送邮件的方法* @param to :收件人* @param code :激活码*/public static void sendMail(String to,String code){/*** 1.获得一个Session对象.* 2.创建一个代表邮件的对象Message.* 3.发送邮件Transport*/// 1.获得连接对象Properties props = new Properties();props.setProperty("mail.host", "localhost");Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("service@shop.com", "111");}});// 2.创建邮件对象:Message message = new MimeMessage(session);// 设置发件人:try {message.setFrom(new InternetAddress("service@shop.com"));// 设置收件人:message.addRecipient(RecipientType.TO, new InternetAddress(to));// 抄送 CC 密送BCC// 设置标题message.setSubject("来自ITester商城官方激活邮件");// 设置邮件正文:message.setContent("<h1>ITester商城官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.36.103:8080/shop/user_active.action?code="+code+"'>http://192.168.36.103:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");// 3.发送邮件:Transport.send(message);} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}}public static void main(String[] args) {sendMail("ITester@B2CShop.com","HelloWorld");}
}
邮件发送问题:
1.发件人的邮箱账户名和密码:有的邮箱设置了独立密码,还有的必须用授权码登录(qq邮箱)。
2.发件人的SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。
3.有可能收件人地址,发件人地址等信息都正确,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试。
六
易宝支付
易宝支付是中国支付行业的开创者和领导者,也是互联网金融(ITFIN)和移动互联领军企业,国内领先的第三方电子支付服务提供商,为个人网上银行客户提供了网上消费支付结算方式,使客户真正做到足不出户,网上购物。其原理图如下:
方式:通过中间企业再连接到在线银行;
特征:风险大,适合小型的付款,维护容易;
创建Utils工具类 :PaymentUtil.java 这个类是用商户(企业)的密钥(易宝分配的)和一些付款的信息加起来产生验证字段。(以下展示部分代码)
public class PaymentUtil {
private static String encodingCharset = "UTF-8";/*** 生成hmac方法* @param p0_Cmd 业务类型* @param p1_MerId 商户编号* @param p2_Order 商户订单号* @param p3_Amt 支付金额* @param p4_Cur 交易币种* @param p5_Pid 商品名称* @param p6_Pcat 商品种类* @param p7_Pdesc 商品描述* @param p8_Url 商户接收支付成功数据的地址* @param p9_SAF 送货地址* @param pa_MP 商户扩展信息* @param pd_FrpId 银行编码* @param pr_NeedResponse 应答机制* @param keyValue 商户密钥* @return*/public static String buildHmac(String p0_Cmd,String p1_MerId,String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat,String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId,String pr_NeedResponse,String keyValue) {StringBuilder sValue = new StringBuilder();// 业务类型sValue.append(p0_Cmd);// 商户编号sValue.append(p1_MerId);// 商户订单号sValue.append(p2_Order);// 支付金额sValue.append(p3_Amt);// 交易币种sValue.append(p4_Cur);// 商品名称sValue.append(p5_Pid);// 商品种类sValue.append(p6_Pcat);// 商品描述sValue.append(p7_Pdesc);// 商户接收支付成功数据的地址sValue.append(p8_Url);// 送货地址sValue.append(p9_SAF);// 商户扩展信息sValue.append(pa_MP);// 银行编码sValue.append(pd_FrpId);// 应答机制sValue.append(pr_NeedResponse);return PaymentUtil.hmacSign(sValue.toString(), keyValue);}/*** 返回校验hmac方法* * @param hmac 支付网关发来的加密验证码* @param p1_MerId 商户编号* @param r0_Cmd 业务类型* @param r1_Code 支付结果* @param r2_TrxId 易宝支付交易流水号* @param r3_Amt 支付金额* @param r4_Cur 交易币种* @param r5_Pid 商品名称* @param r6_Order 商户订单号* @param r7_Uid 易宝支付会员ID* @param r8_MP 商户扩展信息* @param r9_BType 交易结果返回类型* @param keyValue 密钥* @return*/public static boolean verifyCallback(String hmac, String p1_MerId,String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,String r8_MP, String r9_BType, String keyValue) {StringBuilder sValue = new StringBuilder();// 商户编号sValue.append(p1_MerId);// 业务类型sValue.append(r0_Cmd);// 支付结果sValue.append(r1_Code);// 易宝支付交易流水号sValue.append(r2_TrxId);// 支付金额sValue.append(r3_Amt);// 交易币种sValue.append(r4_Cur);// 商品名称sValue.append(r5_Pid);// 商户订单号sValue.append(r6_Order);// 易宝支付会员IDsValue.append(r7_Uid);// 商户扩展信息sValue.append(r8_MP);// 交易结果返回类型sValue.append(r9_BType);String sNewString = PaymentUtil.hmacSign(sValue.toString(), keyValue);return sNewString.equals(hmac);}/*** @param aValue* @param aKey* @return*/public static String hmacSign(String aValue, String aKey) {byte k_ipad[] = new byte[64];byte k_opad[] = new byte[64];byte keyb[];byte value[];try {keyb = aKey.getBytes(encodingCharset);value = aValue.getBytes(encodingCharset);} catch (UnsupportedEncodingException e) {keyb = aKey.getBytes();value = aValue.getBytes();}Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);Arrays.fill(k_opad, keyb.length, 64, (byte) 92);for (int i = 0; i < keyb.length; i++) {k_ipad[i] = (byte) (keyb[i] ^ 0x36);k_opad[i] = (byte) (keyb[i] ^ 0x5c);}MessageDigest md = null;try {md = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {return null;}md.update(k_ipad);md.update(value);byte dg[] = md.digest();md.reset();md.update(k_opad);md.update(dg, 0, 16);dg = md.digest();return toHex(dg);}
以上
That‘s all
下一期将具体的介绍系统设计
包括项目的运行环境
项目概要设计与详细设计
敬请期待
ITester软件测试小栈
往期内容宠幸
叮—这有一打让你666的测试终极资料包,请查收!
打开PyCharm永久激活的这两个锦囊,再也不用担心写代码的时候让我付费了!
QQ空间面试题放送,速度教科书式扑街补救offer!
金九银十加薪季,测试题预热一波。
测试面试题集-测试基础理论
测试用例集-公交卡测试用例
测试用例集-QQ登录功能测试用例
Selenium自动化测试-1.selenium介绍及环境安装
Selenium自动化测试-2.浏览器基本操作
Selenium自动化测试-3.元素定位(1)
Selenium自动化测试-3.元素定位(2)
Selenium自动化测试-3.元素定位(3)
Selenium自动化测试-4.By定位及如何确定元素唯一
Selenium自动化测试-5.脚本录制神器Katalon Recorder
Selenium自动化测试-6.鼠标键盘操作
Selenium自动化测试-7.获取元素属性信息
Selenium自动化测试-8.iframe处理
速看,APP测试之ADB最全指南!
APP测试之Monkey压力测试(一)
APP测试之Monkey压力测试(二)
快来星标 置顶 关注我
后台回复资源取干货
想要获取相关资料和软件 ?
Q群:701841415
SSH框架电子商城-系统技术分析相关推荐
- (四)java B2B2C Springboot仿淘宝电子商城系统技术解决方案
鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台.愿意了解源码的朋友直接求求交流分享技术:二一四 ...
- ssh mysql 电子商城_电子商城系统的设计与实现(SSH,MySQL)(含录像)
电子商城系统的设计与实现(SSH,MySQL)(含录像)(论文14800字,程序代码,MySQL数据库) 本系统前台主要使用JSP作为开发语言,后台使用MySQL作为数据库管理系统,开发环境是MyEc ...
- java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 从上图可以看出 ...
- java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解...
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, ...
- 计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...
- java B2B2C Springboot电子商城系统
大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 需要JAVA Spring Cloud大型企业分布式 ...
- Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做
Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做 [免费赠送源码]Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业 ...
- 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统
一.基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统,主要分为用户端和管理端两个模块. ...
- 电子商城系统运费模板设计
最近公司要求完善我们商城的运费模板功能,使运费计算更加精确.我接到任务之后就着手分析,到目前为止已实现了一部分.现在把相关的东西记录在这里,为了方便日后自己查看,也希望能够帮助部分初学者,给他们一个个 ...
最新文章
- r语言 调用c windows,R:window()函数
- flipdim--按指定维数翻转矩阵
- python 动态导入类_从动态导入模块中类的字符串名动态实例化?
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
- Error during job, obtaining debugging information... FAILED: Execution Error, return code 2 from org
- 优雅的读懂支持向量机 SVM 算法
- java匿名对象_面向对象
- undefined reference to '__android_log_print'解决方案
- [.Net]轻量ORM——Dapper
- 参考平面及其高度_国家标准照度参考表
- 神舟 桌面显示计算机,神舟(Hasee)笔记本电脑重装系统步骤详解
- unity中的游戏推出代码
- 知名休闲服饰品牌——慕尚集团借力泛微实现统一办公、业务协同
- JAVA设计模式之概述
- 服务器光信号灯亮红灯,路由器光信号闪红灯是怎么回事
- MFC 初始化D3D
- 词袋 图像检索 matlab,词袋模型BoW图像检索Python实战
- IOS唤起键盘后--导致页面底部空白问题
- 今日小软——GoldWave、CHM2PDF Pilot与Highlight
- 专题二:无穷小量阶的比较-一刷
热门文章
- php爬取js对象,php如何用正则解析html中的js对象
- 嵌入式电路设计(自己的第一个pcb电路)
- java 32 64 性能,Java 64位的性能是否优于32位版本?
- android8.0应用图标适配调整_怎样更换macOS Big Sur 应用图标
- bgp状态idle什么原因_当bgp的邻居状态机处于什么状态是,标志着与邻居的tcp连接已经正常建立...
- junetxtdb.class.php,PHP-site
- java jsch session 多久会断开_What?纯Java居然能实现Xshell!
- python格式化输出作业_Python格式化输出
- 《Python入门到精通》运算符
- 【防守方基础】危险报文识别