原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Extensions

扩展-如何扩展和定制Stripes

从Stripes1.5开始,在web.xml中可以配置一个或多个包,Stripes将会自动加载所有扩展。这些扩展包含:

在web.xml中添加一个叫做Extension.Packages的初始化参数变量到StripesFilter中。你指定的包自动包含其所有的子包,因此不需要通过*号去做通配。具体示例如下:

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Exception+Handling

异常处理简介

Servlet规范的内建异常处理机制是有限的,对于处理Web应用产生的异常。具体来说,当异常发生时,它只能将请求转向到一个JSP或者一个文件,而不能指向一个servlet或者一个没有可执行代码的JSP。而这些就是Stripes的异常处理机制要去解决的。

Stripes大多数主要的接口都允许开发者抛出任何不想处理的异常。比如处理方法、验证方法等。调用所有抛出的异常,取决于你定义的异常处理策略:Stripes是不会强加给你的。也就说,Stripes的作者建议应该传递不能处理的异常,让Stripes框架帮你处理,而不是捕获、包装或者抛出异常。

阅读全文......

原文链接:https://stripesframework.atlassian.net/wiki/display/STRIPES/Display+Errors

web应用几乎没有例外的会在某些点上生成一些验证错误信息,提示用户做错了什么,应该怎么样正确的去做。这些提示应该与你的应用UI策略一致,能明确的告诉用户如何去处理。下面介绍如何利用Stripes进行错误信息展示。

输出错误

Stripes提供若干输出验证错误信息的标签,这些标签是值得花时间通过阅读文档去了解的。主要的标签是stripes:erros。这个标签可以针对一个表单输出所有的验证错误信息或者仅仅输出一个表单指定域的错误信息。

阅读全文......

原文链接:https://stripesframework.atlassian.net/wiki/display/STRIPES/AJAX

如果你没有听说过Ajax那么你有可能还生活在穴居时代,因此这里我们不会去讲Ajax是什么。如果你真的需要了解,那么建议你点击这里。因为Ajax作为客户端技术,Stripes作为服务器端框架,所以这篇文档主要关注如何使用Ajax技术与Stripes进行交互。如果你关注的是客户端视觉效果和一些Ajax技巧,那么通过谷歌搜索你能得到比本文更好的说明。

有许多不同的方式可用来编写Ajax应用程序。基本上最容易想到的就是调用一些服务器端(或者只是获取静态内容)逻辑完成与屏幕上可见内容的交互而不用去刷新浏览器页面。更复杂(功能也更强大)的方法包括通过调用服务端返回如XML或者JSON结构化数据,然后客户端通过JavaScript进行一些复杂的操作。

阅读全文......

博客文章一直是托管在github上的,对于站点的开发也是基于jekyll进行的,不过之前是通过在Window系统上安装Ruby进行的。最近将操作系统切换到了linux,因此需要在linux下配置jekyll环境。说实在的真没有在Windows上点击exe程序进行安装那么舒服,安装过程中遇到了不少问题。不过还好,最后都一一解决了。

Ruby安装 1

Jekyll是基于Ruby的,因此在安装前需要先安装Ruby。然后通过 gem 进行jekyll安装。

可以通过软件管理中心或者apt-get命令直接安装Ruby,不过就算安装成功也无法使用最新的jekyll3,因为最新的jekyll3要求Ruby的版本必须在2.0以上。通过

阅读全文......

写了个简单的日志统计并发送邮件的脚本,使用到了atnodesmail 命令。同时托管给 crontab 定时调用执行。手动测试的时候运行的很是完美,只可惜,自动化后就各种坑:

  1. atnodes 无法使用!脚本抛出:Permission denied, please try again

  2. mail 中文乱码!

阅读全文......

下面是一些在Ubuntu14下安装Intellj IDEA后配置桌面快捷方式时一些坑,记录下。

JDK环境变量的问题

ubuntu中,我们将环境变量配置在etc/profile 或者当前登陆用户的.bashrc/.bash_profile文件中。因此其对应的使用范围也是不同的。

etc/profile 针对所有登录用户,因此为省事期间,可以将JDK配置在这里,一劳永逸,也就不会出现后续问题。

阅读全文......

SimpleRetryPolicy可以实现指定次数的重试。只需要设置 maxAttempts 参数即可。其默认重试次数是3次。该策略为创建RetryTemplate对象时默认的重试策略。具体使用如下:

SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
simpleRetryPolicy.setMaxAttempts(4);

规定时间内连续重试

TimeoutRetryPolicy可以实现指定时间内的重试。超时时间通过参数 timeout 进行设置。默认超时时间1s。使用方式如下:

// all spend 1s
TimeoutRetryPolicy timeoutRetryPolicy = new TimeoutRetryPolicy(); 
timeoutRetryPolicy.setTimeout(2000L);

组合重试

CompositeRetryPolicy实现了重试策略的组合。通过其 policies 字段,可以为其添加多个重试策略。组合策略执行的过程中,所有策略只要有一个达成终止条件,那么该重试结束。我们可以用组合重试策略实现一些相对比较复杂的重试。比如我们要实现在指定时间1s内重试3次,每次重试间隔0.2秒,就可以使用以下方法:

CompositeRetryPolicy compositeRetryPolicy = new CompositeRetryPolicy();

SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();

TimeoutRetryPolicy timeoutRetryPolicy = new TimeoutRetryPolicy();

FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(200); // 每次重试间隔200ms

compositeRetryPolicy.setPolicies(new RetryPolicy[]{ 
		simpleRetryPolicy,
		timeoutRetryPolicy,
});

阅读全文......

原文地址:http://docs.spring.io/spring-batch/reference/html/retry.html

9.1 RetryTemplate 重试模板方法

Note

The retry functionality was pulled out of Spring Batch as of 2.2.0. It is now part of a new library, Spring Retry.

阅读全文......

在PL/SQL块中使用select语句,可以将数据库数据检索到变量中。

当在PL/SQL块中使用select语句时,必须要带有into子句。语法如下:

SELECT select_list
	INTO {variable_name[,variable_name]... | record_name}
FROM table_name
WHERE condition;

其中,

  • select_list为指定查询列;
  • variable_name为接收指定查询列的标量变量名;
  • record_name为接收指定查询列的记录变量名;

1、使用标量变量接收数据

阅读全文......