基于NIO的高度可扩展服务器架构

(此为译文)

1. Content

2. Thread Architecture

3. The Reactor Pattern

4. Component Architecture

5. Acceptor

6. Dispatcher

7. Dispatcher-Level EventHandler

8. Application-Level EventHandler

9. Conclusion

 

如果你需要编写一个高度可扩[......]

Read more

Posted in Java | Tagged | Leave a comment

struts2中拦截器的使用

struts2中拦截器来源于webwork2,拦截器会在Action执行之前和之后被执行,如下图,这是一种典型的AOP实现:

struts201

从图中也可以看出,拦截器的执行顺序也会因为其配置的顺序的不同而不一样,在Struts2中,在请求对应的Action方法执行之前,配置在前面的拦截器先对用户请求其作用,而在Action方法执行之后,配置在后面的拦截器先对用户的请求起作用。

拦截器的应用场景可以有很多,比如的权限的控制、数据清理、预处理等等,此次正是因为要做权限控制,所以来了解一下。[......]

Read more

Posted in J2EE | Tagged , | Leave a comment

expect命令的使用

expect可用于自动化地执行linux环境下的交互式任务,如需要输入用户名密码的scp,ssh等。使用expect,只需在脚本中定义任务执行过程中可能遇到的情况,然后编写相应的处理语句即可完成对应的任务。

比如下面一段摘抄自网络的使用expect实现自动化scp任务的脚本:

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set passwo[......]

Read more

Posted in Linux | Tagged | Leave a comment

设计模式应用:状态模式

在实际的开发中会遇到很多涉及状态变更的情况,如电梯、商品、订单,另外像编译器实现中代码的解析也是一个状态机的实现。对于这些牵扯到状态变更的情况,你当然也可以使用各种switch……case,if else的组合来实现,但是这样子就不符合开闭原则了(说人话=。=,也即会把代码搞得很乱,降低效率,而且不易于扩展,后续如果要加一个状态,这里得改,那里也得改,对于维护这种代码,说多了都是泪)。

 

这里以一个简单的订单状态变更为例,其状态转换如:

下单——>(付款)——[......]

Read more

Posted in 算法 | Tagged | Leave a comment