为Struts 2应用程序创建进度条(等待页面)

Struts 2模拟进度条的原理

对于一些需要较长时间才能完成的任务,在Web开发中,会由HTTP协议会因为超时而断开而面临许多风险,这是在桌面开发不曾遇到的。Struts 2提供的execAndWait拦截器就是为了处理和应付这种情况而设计的。注意,该拦截器不在"defaultStack"中,所以必须在使用它的动作里声明它,并且必须放在拦截器栈的最后一个。

使用了该拦截器后,动作依然正常执行,只是该拦截器会分配一个后台线程处理动作的运行,并在动作完成之前把用户带到一个"等待"页面。,该页面每隔一段时间刷新一次,直到那个后台线程执行完毕为止。如果用户随后又触发了同一个动作,但顶一个动作尚未执行完毕,这个拦截器将继续向用户发送"等待"结果;如果他已经执行完毕,用户会看到该动作的最终结果。
"等待"结果的行为与"dispatcher"结果的行为很相似,但是要注意的是,"等待"结果对应的视图带有如下的meta标签:

该标签的作用就每隔多少秒就重新加载一次同样的URL。"5"是5秒,"url=/Struts2/default_progressbar.action"表示要加载的URL。
Struts 2是一个灵活强大的框架,如果你不喜欢Struts 2提供的默认"等待页面",你也可以自己设计自己的等待页面,若在动作声明中,没有找到"等待"结果,将使用默认值。

execAndWait拦截器

execAndWait拦截器 可以接收以下参数:

  • threadPriority:分配给相关线程的优先级,默认值为Thread.NORM_PRIORITY。
  • delay:向用户发送"等待"结果前的毫秒数,默认值为0。如果你不想立刻发送"等待"结果,可以将该参数设置为一个值。例如,你想让动作超过2秒还未完成时才发送"等待"结果,需要将其值设置为2000.
  • delaySleepInterval:每隔多少毫秒唤醒主线程(处理动作的后台线程)去检查后台线程是否已经处理完成,默认值是100。这个值设为0时无效。

示例:使用默认视图与自定义视图

创建一个动作类,该动作类的工作为挂起30秒:

配置struts.xml文件:

测试页面:

自定义等待页面:

最终结果页面:

在浏览器中输入:http://localhost:8081/Struts2/test.jsp,获得如下页面2011110117040626

首先点击,"default_view"链接:
2011110117061560
查看它的源代码:

这次点击"customer_view"链接:

2011110117104414

2011110117105659

这是自定义界面,最后动作执行完毕后,都会获得最终页面

2011110117121914

引用自:http://www.blogjava.net/athrunwang/archive/2011/11/18/364200.html

Mac图片圈点软件Skitch

一直想在Mac下面找一个免费的好用的图片圈点,截图,截屏软件,增加点注释啊,画个箭头啊什么简单的功能,只要好用即可,找了半天,总算找到一个好用的软件Skitch。 在Mac商店中搜索Skitch ,然后下载即可。现在是免费的了,被Evernote收购之后就免费了,蛮好用的,强烈推荐。

How To Get The ServletContext In Struts 2

早期版本中可以如下操作

如果报告

则代表这个版本的stucts2 中不支持这种写法,貌似2.3.16 版本的就不行,则可以通过实现ServletContextAware 接口来让spring拦截器来完成注入即可。

Ubuntu 13.10 卸载 Apache2 重新安装找不到apache2.conf

Ubuntu 13.10 卸载 Apache2 重新安装后在 /etc/apache2 目录下apache2.conf不存在 或者里面内容为空,解决方法如下

Ubuntu 13.10 Apache 2.2 通过 AJP 整合 Tomcat 7

前置条件为Apache 2.2,Tomcat 7都是通过apt-get install来安装的版本。

1.开启ApacheAJP协议支持,Apache 2.2已经默认在/var/lib/apache2/module目录下面包含了AJP协议模块,只要打开支持就可以了。

2.编辑VirtualHost,在Ubuntu下面这个目录在/etc/apache2/sites-available下面

可以看到default.confdefault-ssl.conf两个类似的文件,我这边的default.conf莫名的被重命名成了000-default.conf,倒也无妨。

之间增加

注意,此处的8009端口,要对应下面的Tomcat 7中配置的AJP的端口。

3.修改Tomcat 7的配置文件

去掉被注释掉的,如果没有则增加

注意是增加或去掉原来的配置信息,不是修改默认的8080端口上的“HTTP 1.1”部分

另外注意,如果直接去掉注释,那么根据The AJP Connector中的介绍说明(注意address部分),如果没有指定IP地址的话,默认是绑定任意地址,这样就导致外网也可以访问这个端口。因此出于安全考虑,我们需要增加这个address的设置,并且绑定到127.0.0.1。最终结果如下:

4.重启Tomcat 7Apache 2

5.验证是否成功

TomcatROOT目录(/var/lib/tomcat7/webapps)下面创建一个index.jsp里面随便写点东西即可,不需要是JSP,比如可以写 "Hello JSP"
然后访问http://127.0.0.1/index.jsp如果能正常显示出来,则代表配置成功。

6.如果重启Apache2出现:

/etc/apache2/apache2.conf文件最后加上:

7.出于安全原因,禁止外网访问Tomcat8080端口

只允许Tomcat在本地的8080端口监听即可,修改

添加 address="127.0.0.1"

重启Tomcat7

8.Apache2Tomcat进行反向代理的时候,会发生重定向问题。

配置参考
在Ubuntu 12.04 LTS上安装OpenGrok浏览Android源码
具体的Apache2的配置文件如下:"/etc/apache2/sites-available/default"

则在正常访问http://www.mobibrw.com/AndroidXRef的时候是正常的,但是在点击里面按钮的时候会报告404跳转错误。ProxyPass后面必须携带"/",否则就会出现404问题。

产生这个错误的原因是:Apache2进行代理的时候更改了URL路径,而Tomcat7并不知道URL发生变化了,因此没有在跳转时候携带Apache2增加的跳转地址。

解决方法是在Tomcat7的配置文件/var/lib/tomcat7/conf/server.xml中的Host字段中增加

即可。

如下所示:

为maven设置镜像解决国内下载依赖时超时的问题

国内访问repo1.maven.org访问不了,导致maven不能下载依赖,解决方法是自己设置maven的mirrors,就是设置镜像:

在~/.m2/目录下建立一个settings.xml文件,内容如下

最好是公司或者自己设置的镜像地址,公网地址基本上不怎么靠谱,不是修改了包的内容打广告就是稳定性很差。

注意,如果由于更换代理导致问题,可以尝试删除~/.m2/repository 目录。

Tomcat 7.0 启用gzip压缩配置

打开 conf/server.xml 文件可以看到:

要使用 gzip 压缩功能,可以在 Connector 实例中加上如下属性:

  1. compression="on" 打开压缩功能
  2. compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
  3. noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
  4. compressableMimeType="text/html,text/xml" 压缩类型

修改完成后

验证是否成功, 用 wireshark 抓包,可以看到如图所示:tomcat_gzip

VelocityTracker简单用法

VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出

当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等,下面简单介绍一下用法。

下面是我写的一个简单Demo:

代码很简单,我们可以求出move过程中的伪瞬时速度, 这样在做很多控件的时候都是可以用到的,比如系统Launcher的分页,

ScrollView滑动等, 可根据此时的速度来计算ACTION_UP后的减速运动等。实现一些非常棒的效果。

原始链接 http://blog.csdn.net/bingxianwu/article/details/7446799

判断一个点是否在指定区域内

在图像处理时,我们会经常需要判断一个点是否位于多边形区域内。比较好用的是射线法。

射线法

算法思想非常巧妙:从待判断的点向某一个方向引射线,计算和多边形交点的个数,如果个数是偶数或者0则点在多边形外,如果是奇数,则在多边形内,如下图:

1

这里有二种特殊情况:

C的实现如下:

再来个C#版的

 

值得一提的是射线法对于带岛的多边形依然有效:

2

改进:传统的射线法一开始就直接计算点和多边形的交点个数,这样的话,会花费大量的时间来作拓扑关系的判断,我们可以首先计算出最小外包矩形,迅速排除不在矩形内部的点,然后再做上面的判断。