2013-05-10 3 views
5

Я использую Struts 2. Используя перехватчик, я создаю соединение с базой данных в начале выполнения каждой страницы.Перехватчик Struts 2, который запускается после выполнения страницы?

Так, например, если пользователь переходит к «myAction.do», он создаст соединение с базой данных, а затем вызовет метод myAction.do.

Теперь я ищу перехватчик или любой другой способ автоматического вызова метода после выполнения страницы, который закроет соединение с базой данных.

Возможно ли это?

ответ

4

В перехватчике вы можете написать логику предварительной обработки и пост-обработки.

Логика предварительной обработки будет выполняться до того, как действие будет выполнено, а после обработки будет выполняться логика обработки после завершения обработки .

Struts2 обеспечивает очень мощный механизм управления запросом с использованием перехватчиков. Перехватчики отвечают за большую часть обработки запроса . Они вызываются контроллером до и после вызова действия, поэтому они находятся между контроллером и действием. Перехватчики выполняет такие задачи, как ведение журнала, одобрению, File автозагрузку, дважды подать охранником и т.д.

Все, что вы будете писать после того, как invocation.invoke();, который будет выполнять после того, как действие выполняет

SEE HERE FOR EXAMPLE

+0

Я понимаю, что 'перехватывать()' называется предварительной обработки, но какой метод называется постобработка? Является ли 'destroy()' всегда называемой пост-обработкой для каждого запроса или только раз в то время? –

+0

см. Я обновил свой ответ – PSR

+0

Удивительный, спасибо большое. Я приму свой ответ, как только это позволит. Еще один вопрос: что, если я хочу запустить собственный метод действия, например, если я хотел запустить 'myAction.setSomeValue()' непосредственно перед 'invocation.invoke()', вы знаете, как это можно сделать? –

1

полностью описана в http://blog.agilelogicsolutions.com/2011/05/struts-2-interceptors-before-between.html

Вы можете использовать перехватчик:

  1. До действий
  2. между действием и результатом
  3. После Посмотреть Вынесено

Как уже упоминалось на сайте здесь образцы кода

Перед перехватчик

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(); 
     } 
    } 
    } 
} 
Смежные вопросы