为了在Action处理过程中可以访问到当前请求HttpServerRequest对象,通俗的说就是request.getParameter可以取到值.我们可以使用依赖注入机制的接口注入方法.接口注入需要的是已经被实现了的接口。这个接口包含了相应属性的setter,为Action提供值
我做的这个神话网的例子中,有一个action需要request.getParameter取得value,所以我实现了ServletRequestAware接口,同进声明了一个HttpSerletRequest的属性.看起来好像是线程不安全的,其实在struts2中并没有问题,因为每个请求过来的时候都会产生一个新的Action对象实例,它并没有和其他请求共享一个对象,所以不需要考虑线程安全问题。
最后为这个Action关联上ServletConfigInterceptor拦截器。这个拦截器提供了一系列功能去获取HttpServletRequest,并可以把它注入到实现了ServletRequestAware接口Action中。我的这个项目使用xdoclet2,和annotation所以我们在action上方加入以下代码
*@xwork.actionname="" namespace="" method=""
* @xwork.interceptor-ref name="servlet-config"
* @xwork.interceptor-ref name="params"
网摘:
拦截器提供了把HttpServletRequest 自动set到action中的功能,让我们能通过request, 把所需的值传回到JSPs