复习电商笔记-17-ngnix参数解释和商品富文本编译器(前端)

终极的解决方案-新SSO单点登录

将session从系统中独立出来。Apache shiro顶级安全框架,它的session管理就是独立出来的。目前主流做法是利用redis作为session管理的实现,因为redis访问极其快速。

 

 

upstream状态参数

状态

说明

weight

默认为1weight越大,负载的权重就越大

max_fails

允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误

fail_timeout

超时时间

max_fails

次失败后,暂停的时间

backup

其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

 

定义负载均衡设备的Ip及设备状态:

upstream bakend{
      ip_hash;
      server 192.168.163.10:8081 down;
      server 192.168.163.10:8082 weight=2;
      server 192.168.163.10:8083 backup;
}

 

 

IP_HASH

官方解释:

This directive causes requests to be distributed between upstreams based on the IP-address of the client.

The key for the hash is the class-C network address or the entire IPv6-address of the client. IPv6 is supported for ip_hash since 1.3.2 or 1.2.2. This method guarantees that the client request will always be transferred to the same server. But if this server is considered inoperative, then the request of this client will be transferred to another server. This gives a high probability clients will always connect to the same server. (简译:将客户端ip转化成C类网络地址,然后将该网络地址当作hash关键字,来保证这个客户端请求总是被转发到一台服务器上)

源码这里:

for( ;; ) {
for(i = 0; i < 3; i++) {
hash = (hash * 113+ iphp->addr[i]) % 6271;  

for循环 i 取 012三个值,而ip的点分十进制表示方法将ip分成四段(如:192.168.1.1),但是这里循环时只将ip的前三个端作为参数加入hash函数。这样做的目的是保证ip地址前三位相同的用户经过hash计算将分配到相同的后端server。

作者的这个考虑是极为可取的,因此ip地址前三位相同通常意味着来着同一个局域网或者相邻区域,使用相同的后端服务让nginx在一定程度上更具有一致性。

 

 

故障自动切换

nginx转发请求到tomcat,如果某个tomcat宕机,tomcat会进行超时判断,如果某个tomcat宕机,访问不了。它会自动把这个请求转发给其它的tomcat。保证不会因为一个tomcat宕机导致业务无法继续访问。

当宕机服务重启后可以实现自动重新加入集群。

 

 

商品描述

 

 

表设计:*垂直分表

 

 

*富文本编辑器KindEditor使用说明

常见的HTML在线编辑器FCKEditor、CKEditor、KindEditor

最常见的问题:黏贴代码含有HTML标记导致内容超过显示内容,存储时字段超长。黏贴word最终显示和word展示样子有差异。

使用步骤:

第一步:引入js和css。

<link href="/js/kindeditor-4.1.10/themes/default/default.css" type="text/css" rel="stylesheet">
<script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/kindeditor-all-min.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/lang/zh_CN.js"></script>

第二步:在form中增加一个textarea控件,并设置为隐藏。

隐藏域用于保存要提交的数据。

在表格中插入一个textarea控件,visibility设置为不可见,设置name属性。

<tr>
    <td>商品描述:</td>
    <td>
	<textarea style="width:800px;height:300px;visibility:hidden;" name="desc"></textarea>
    </td>
</tr>

第三步:页面加载时执行初始化js方法,创建KindEditor控件。

在页面加载完,执行js,初始化KindEditor控件。跟页面desc控件绑定。用户在KindEditor填写编辑的内容。

<script type="text/javascript">
	var itemAddEditor ;
	$(function(){
		itemAddEditor = KindEditorUtil.createEditor("#itemAddForm [name=desc]");
		KindEditorUtil.init({fun:function(node){
			KindEditorUtil.changeItemParam(node, "itemAddForm");
		}});
	});

可以看到KindEditor的原理就是在隐藏域前动态插了一个iframe,动态嵌入一个网页,用户实际是在这个网页上编辑内容。

第四步:在提交前执行KindEditor控件的同步方法,将数据写入隐藏的textarea中。

当用户点击“提交”按钮时,执行submitForm()方法,在方法中调用itemAddEditor.sync()同步方法,将用户编辑的这个网页的内容填写到隐藏域中,这样form提交就将这个数据提交到后台controller中进行处理。

 

测试富文本编辑器

利用GoogleChrome浏览器的调试功能,点击F12打开调试窗口,在页面商品描述出,鼠标右键,选择右键菜单最下面的“审查元素”,可以看到动态页面的源代码(包括js产生的内容)。在concole中输入:

$(“[name=desc]”) 按回车,调试器展示textare域的代码;

$(“[name=desc]”).val()按回车,调试器展示textare域的内容。没填写,所以返回空串;

在商品描述框中填写内容,例如:这个本本不错。

再执行$(“[name=desc]”).val()按回车,调试器展示仍然为空串,为什么呢?用户填写的内容并没有填入进去;

那如何写呢?

Kinder控件提供了同步方法,调用itemAddEditor.sync();代码

$("[name=desc]").val()按回车,展示出用户填写的内容。

 

 

 

Chrome调试跟踪

在controller中save方法上设置断点,F12打开浏览器调试器,如下图,选择Network,可以查看提交的form表单数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值