近期工作总结(2)

5、要做的系统如果上线,将是给非常多人用的,随意一些访问量就能让我之前的做系统完全崩溃,高并发在这个时候开始经历了一些。采取的解决方案就是使用缓存技术,如memcache等。memcache实现的方式是将一些经常使用的信息,采用key,value的方式存储到内存中。可以设置其有效期,可以存储,更新,删除,全部删除。这中缓存技术因为是存储在缓存中的,所以存取速度非常快。但是,同时也是由于存储在缓存中的,所以一旦该服务器宕机,或者该服务器上的服务被停止重启,都会导致之前缓存的数据全部丢失。在缓存中存储一些有效数据可以有效的大幅度的降低访问数据库的频率。
6、做一个系统的开发,尤其是我们这中之前已经有个样例系统,我们要进行重新构建的项目,项目需求基本已经确定。一开始的需求文档那叫一个寒碜,不过幸好有个系统看着做。随后需求的讨论不断进步,最先形成的成型的文档是根据需求做出来的数据字典。我做的一个模块有部分是关于IP号码管理的,着手建表,才发现现在要用到oracle的sequence。以前只是听说过,甚至专门看过几遍,不过最终还是都忘了,应为没有用过。。。这次好了,好好理解了一下,而且有十几应用了,状况好太多。sequence,序列,虽然名字是跟表名相关的,但实际上这两者之间没啥大的关系。序列是可以被任何表使用的,他的作用就是不停的产生一个新的最大值,从而避免使用相同的值产生的冲突。小的系统里,甚至可以所有表使用同一个序列,所有表的主键都从一个序列里产生。
7、算法。在做IP相关的数据存储的时候,发现表里存储IP值的时候不是存储的字符串,而是数字(设计的字段类型是varchar)好吧,那就想办法把一个字符串算成一个可以反解析出来的数字吧,总不能存完了不管了,咱还得取不是。研究了一下原来系统里对于IP的转换。。。 汗颜~~  哈哈 看了半天还是不太明白,应该是用数据库的正则把IP值的各个块取出来,然后转换成数字,然后计算成了一个位数比较少的数字,再拼接起来。。。贴出来
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘1’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘2’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘3’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘4’), ‘XX’)),2,’0′);
反计算:
to_number(substr(ip_num_hex, 1, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 3, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 5, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 7, 2), ‘XX’);
以后再研究吧。
8、生成Bean和Dao的方式都不是自己手写的,有个小工具叫codeGen,不知道是这里自己写的还是从网上搞来的开源的小东西,但是对于生成统一的数据库管理相关代码确实挺好使,在配置文件里写好链接数据的配置,然后在主函数里写入自己要生成的表名,运行一遍就可以了。不过到目前为止生成的文件,包名总是错误的,这里也是可以在代码里修改的。不明白管理这个小工具的家伙为啥总是不改捏。咱先不管了,好东西先留着呗。
9、做着做着就到了做前台的时候了。开始的时候并没有打算用jQuery EasyUI,不过组里有个小伙对这个玩意很熟,在做另外一个项目的时候也是用的EasyUI,在我们埋头解决数据查询出来后结果的分页的时候,拉出来EasyUI的Datagrid以及其页码栏,很好使,很好看,参数与公司集成的分页查询符合,于是果断采用了。jQuery是本来就会用的,所以也没什么稀奇,不过我就得好好学学了,毕竟之前不但EasyUI接触较少,连jQuery都很少接触,少有的接触机会还是自己学习的时候去学了一下基础。现在终于有可以实战一下了。乍一开始,对于jQuery的选择器并没有什么特别的感觉,而且我使用的时候基本上都是使用指定ID的方式(未完待续)

近期工作总结(1)

来新公司已经有一个多月的时间了.呃,准确点也就一个月零5天.哈哈.虽然时间其实并不多,但是学到的东西可不少.尤其用到了一些以前自己没有用过的东西.期间碰到了大大小小各种问题,到目前为止基本都解决了,但是怕稍微久一点就会全忘掉,所以在博客里做个记录.虽然现在都不一定全部记得.

项目挺大,前台展现部分功能丰富且复杂,要做第三方接口接入.我一开始被带我的人安排去做前台的一些东西,看了几天代码,自以为已经熟悉了一些了,可以下手做,所以给老师要活.头给安排了一个做第三方数据请求自动登录的功能来做。由于之前没有接触过类似的东西,所以一开始就是在看,熟悉整个系统,整个熟悉下来之后,发现有如下一些我没有用过的东西:
1、过滤器Filter。以前的时候顶多在web.xml文件里设置一下servelet的路径,中间的业务请求大部分甚至连servelet都没有通过,就直接用jsp里声明个实例调用后面的Java代码了。这种方式的好处是开发起来效率高,也好调试,但是安全性太差,代码也容易混乱,不易进行统一管理规划。声明一个Filter的语法如下:<filter>
<filter-name>FilterName</filter-name>
<filter-class>
org.*.filter.FilterName
</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
这样的过滤器在一个web.xml中可以声明多个,其对相同内容的过滤的顺序就是按照声明的顺序由上到下。可以用来进行一些校验和设置的操作,如设置字符集,校验是否登录,校验是使用何种类型网络等等。
2、在这个项目开始之初,带我的人就告诉了我估计要用到的几个大的框架,如Controllar会使用struts,类管理控制会使用spring,展示方面主要使用jquery,后来引入了jquery的展示框架easyUI,界面上可能会用到的EL,处理大数据要使用的memcache等,因为第一次接触原因,第一次在工作中接触的原因,开始干活的效率都有点低,但是后来就快起来了。struts1.x在本系统中忠实的执行着控制中心的角色,基本整个系统中需要修改struts相关东西的地方只有两个,一个是要设置其配置文件,把自己要用的请求与类名关联起来,另一个就是要写这个类里的方法,把要处理的方法写出来。由于公司封装的框架的原因,我们用来指定前台请求调用的处理类的方法时,只需要在*.do的请求后添加一个参数do=****Manage.functionName就可以直接实现了。
3、对于spring这个东西,以前还是稍微看过一点,跟struts一样。其实struts看的最多了,因为ssh总是一开始就看struts,而且很久以前就看过一些struts,更容易看进去一些。Spring单独的IOC这部分其实并不难,更何况公司框架还给出了一个SpringHelper,可以使用其生成指定名称的类的实例。然而并不能所有一切都那么顺心如意,现在系统中就有地方使用这个去生成新的类的实例有问题,启动报错。所以我自己用的时候,一般还是使用注解来自动生成。使用spring注解的时候,需要在spring的配置文件中加入配置,这个之前的文章里有写过,回头再看看吧。
4、界面上获取后台传过来的值的时候,一般不再写Java代码,而是直接使用EL。而要访问哪些数据,在由后面处理程序返回时,通过设置attribute等方式放到request里就行了;在页面上使用的方式更加简单,直接使用${}符号,在花括号中间填上自己想要的那个实例的名字就可以获取到相应的实例,并且可以调用其方法,获取其属性。用起来很方便。
《未完待续》

jQuery中给字符串替换值

jQuery字符串替换

[html]
  1. <head>
  2.         <title>test</title>
  3.         <script type=”text/javascript” src=”./jquery/jquery-1.7.1.js”></script>
  4.         <script type=”text/javascript”>
  5.             $(function(){
  6.                 var $inputValue = $(“#input”).val();
  7.                 re = new RegExp(“‘”,”i”);
  8.                 $inputValue = $inputValue.replace(re, “a”);
  9.                 alert($inputValue);
  10.             });
  11.         </script>
  12.     </head>
  13.     <body>
  14.         <a id=”a”>test</a>
  15.         <input id=”input” type=”text” value=”a”a”>
  16.     </body>

脚本说明:其中RegExp(“‘”,”i”)中第一个参数为你所想替换掉的字符串,第二个参数为替换字符串中第一个所匹配的,第二个参数也可以为”g”,表示替换字符串中所有匹配的字符串。replace(re,”a”)第一个参数为之前的对象,第二个参数为所要替换为的参数。

以上实例结果为:弹出“aa’a”,即为:将<input>的value中第一个匹配的单引号替换为a字符。
以上引自<http://blog.csdn.net/fengspg/article/details/7820165>

JS操作cookie实现单点登录

对于单点域名共享登录信息,我建议使用cookie是比较好的。

用cookie是因为它可以共享信息。
cookie是不能跨域访问的,但是在二级域名是可以共享cookie的。
然后你把你的项目统一平台,域名也统一,这样就可以实现cookie的单点登录了。
比如:http://tieba.baidu.com
http://mp3.baidu.com
这样的就算是统一域名。而二级域名可以共享cookie。
cookie的四个可选属性:
1 cookie的生存期属性:expires;默认情况下,cookie只在浏览器会话期存在.退出浏览器就丢失;可以用expires设置时间;退出浏览器后就不会丢失并存为客户端浏览器的cookie文件;过了时间后cookie失效,还会自动删除cookie文件.
2 path属性:默认情况下,在同一个目录下文件可以调用;
3 domain属性:例如设成”.baidu.com”则在.baidu.com下的所有服务器下的文件都可以调用cookie.
4 安全属性:默认情况下为false;用http协议不安全传输;true:用https等协议安全传输.
Javascript代码

Javascript代码  收藏代码
  1. /**
  2. 函数名称:getCookie
  3. 函数功能:获取指定名称的cookie的值
  4. 输入参数:需要测试的字符串
  5. 返回参数:
  6. */
  7. function getSSOCookie()
  8. {
  9.     var arrStr = document.cookie.split(“; “);
  10.     for(var i = 0;i < arrStr.length;i ++){
  11.         var temp = arrStr[i].split(“=”);
  12.         if(temp[0] == “sso”) {
  13.           return unescape(temp[1]);
  14.         }
  15.     }
  16.     return “”;
  17. }
  18. /**
  19. 函数名称:addCookie
  20. 函数功能:添加cookie
  21. 输入参数:需要测试的字符串
  22. 返回参数:
  23. */
  24. function addSSOCookie(objValue)
  25. {
  26.     var str = “sso” + “=” + escape(objValue);
  27.     if(true){//为0时不设定过期时间,浏览器关闭时cookie自动消失
  28.         str += “; path=/”;
  29.     }
  30.     document.cookie = str;
  31. }
  32. /**
  33. 函数名称:delCookie
  34. 函数功能:删除cookie
  35. 输入参数:需要测试的字符串
  36. 返回参数:
  37. */
  38. function delCookie()
  39. {//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
  40.     var date =  new  Date();
  41.     date.setTime(date.getTime() – 10000);
  42.     document.cookie = “sso” + “=a; expires=” + date.toGMTString()+”; path=/”;
  43. }

用户在统一加载平台认证系统认证通过后,使用addSSOCookie,用户权限信息保存到了cookie中,其他平台通过调用getSSOCookie,取得用户信息。这样用户就可以不再受平台限制,而实现自由访问各个系统了。

在addSSOCookie方法中,没有设置cookie的失效时间,这样在浏览器关闭后,cookie就自动消失。注意:这样cookie的有效性只能在同一浏览器进程,如果重新打开了一个浏览器进程,cookie信息是获取不到的,也就是单点登录只能在同一个浏览器进程有效。如果想在不用浏览器进程中共享cookie信息,那就设置失效时间,如下:
Javascript代码

Javascript代码  收藏代码
  1. function addCookie(objValue,objHours){//添加cookie
  2.            var str = “sso”+ “=” + escape(objValue);
  3.             if(objHours > 0){//为0时不设定过期时间,浏览器关闭时cookie自动消失
  4.                 var date = new Date();
  5.                 var ms = objHours*3600*1000;
  6.                 date.setTime(date.getTime() + ms);
  7.                 str += “; expires=” + date.toGMTString()+”; path=/; domain=.hanj.com”;
  8.             }
  9.             document.cookie = str;
  10.         }

这样cookie在指定的时间后失效。但这样安全性不能保证,如果时间设置太短,用户在使用中,可能cookie就失效了,需要重新登录。如果时间过长,用户在下次访问,或电脑重起访问,cookie还在有效期中,有可能别其他人使用。cookie不能准确的删除,存在安全隐患。