在页面执行后运行的Struts 2拦截器?

时间:2013-05-10 04:55:46

标签: java struts2 interceptor

我正在使用Struts 2.使用拦截器,我在每个页面执行开始时创建一个数据库连接。

例如,如果用户转到“myAction.do”,它将创建数据库连接,然后调用myAction.do方法。

我现在正在寻找的是拦截器或在页面执行后自动调用方法的任何其他方式,这将关闭数据库连接。

这可能吗?

2 个答案:

答案 0 :(得分:5)

在拦截器中,您可以编写预处理和后处理逻辑。

预处理逻辑将在操作执行之前执行 执行动作后执行后处理逻辑。

  

Struts2提供了非常强大的控制请求的机制   使用拦截器。拦截器负责大部分   请求处理。它们在之前和之前由控制器调用   在调用动作之后,它们位于控制器和之间   行动。拦截器执行日志记录,验证,文件等任务   上传,双重保护等。

无论你在执行动作后执行的invocation.invoke();之后写什么

SEE HERE FOR EXAMPLE

答案 1 :(得分:1)

http://blog.agilelogicsolutions.com/2011/05/struts-2-interceptors-before-between.html

中详细说明

你可以有拦截器:

  1. 行动前
  2. 行动与结果之间
  3. 查看后渲染
  4. 如网站所述,此处为代码示例

    拦截之前

    public class BeforeInterceptor extends AbstractInterceptor {
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
          // do something before invoke
           doSomeLogic();
          // invocation continue    
          return invocation.invoke();
        }
      }
    }
    

    在行动和结果之间

    public class BetweenActionAndResultInterceptor extends AbstractInterceptor {
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
          // Register a PreResultListener and implement the beforeReslut method
          invocation.addPreResultListener(new PreResultListener() { 
            @Override
            public void beforeResult(ActionInvocation invocation, String resultCode) {
              Object o = invocation.getAction();
              try{
                if(o instanceof MyAction){
                  ((MyAction) o).someLogicAfterActionBeforeView();
                }
                //or someLogicBeforeView()
              }catch(Exception e){
                invocation.setResultCode("error");
              }
            }
          });
    
          // Invocation Continue
          return invocation.invoke();
        }
      }
    }
    

    查看后渲染

    public class AfterViewRenderedInterceptor extends AbstractInterceptor {
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
          // do something before invoke
          try{
            // invocation continue    
            return invocation.invoke();
          }catch(Exception e){
            // You cannot change the result code here though, such as:
            // return "error"; 
            // This line will not work because view is already generated  
            doSomeLogicAfterView();
          } 
        }
      }
    }