Struts 2 Interceptors

Interceptors: Interceptors are the program similar to filter to do preprocessng before sending the request to action and modify the response if required after action execution.

We can implement various feature using existing interceptors: double-submit guards, type conversion, object population, validation, file upload, page preparation etc

Interceptor will get executed in the order in which they are specified.

Interceptor Name Description
Alias Interceptor alias parameters can have different names across request.
Chaining Interceptor chain Makes the previous Action's properties available to the current Action.
Checkbox Interceptor checkbox Adds automatic checkbox handling code that detect an unchecked checkbox and add it as a parameter with a default (usually 'false') value.
Cookie Interceptor cookie Inject cookie with a certain configurable name / value into action.
Conversion Error Interceptor conversionError Places error information from converting strings to parameter types into the action's field errors.
Create Session Interceptor createSession Create an HttpSession automatically, useful with certain Interceptors that require a HttpSession to work properly (like the TokenInterceptor)
DebuggingInterceptor debugging Provides several different debugging screens to provide insight into the data behind the page.
Execute and Wait Interceptor execAndWait Executes the Action in the background and then display the user with waiting page.
Exception Interceptor exception Maps exceptions to a result.
File Upload Interceptor fileUpload An Interceptor that to file upload file.
I18n Interceptor i18n Remember the locale selected for a user's session.
Logger Interceptor logger Provides logging by outputting the name of the action being executed.
Message Store Interceptor store Store and retrieve action messages / errors / field errors for action that implements ValidationAware interface.
Model Driven Interceptor modelDriven If Action implements ModelDriven then pushes the getModel Result onto the Value Stack.
Scoped Model Driven Interceptor scopedModelDriven If the Action implements ScopedModelDriven, the interceptor retrieves and stores the model from a scope and sets it on the action calling setModel.
Parameters Interceptor params Sets the request parameters onto the Action.
Scope Interceptor scope Provide mechanism for storing Action state in the session or application scope.
Servlet Config Interceptor servletConfig Provide access to Maps representing HttpServletRequest and HttpServletResponse.
Static Parameters Interceptor staticParams Sets the struts.xml defined parameters onto the action.
Timer Interceptor timer Outputs how long the Action takes to execute.
Token Interceptor token Checks for valid token presence in Action to prevents duplicate form submission.
Token Session Interceptor tokenSession Same as Token Interceptor, but stores the submitted data in session.
Validation Interceptor validation Performs validation using the validators defined in action-validation.xml
Workflow Interceptor workflow Calls the validate method in your Action class. If Action errors are created then it returns the INPUT view.

MethodFiltering:

excludeMethods - method names to be excluded from interceptor processing

includeMethods - method names to be included in interceptor processing

With all these provided interceptors we have option to create our own interceptor also.

Interceptor configuration: We need to specify the interceptors in the struts.xml to get them apply for a request processing.

<struts>
   <package name="ankit" extends="struts-default">
      <action name="examp" 
         class="com.ankit.struts2.ExampAction"
         method="execute">
         <interceptor-ref name="params"/>
         <result name="success">/Output.jsp</result>
      </action>
   </package>
</struts>

Here we have specified extends="struts-default" which means that what ever interceptors and result type specified there can be applied to any action in the configuration file.

For example: we have applied params intreceptor for ExampAction.

Possible interceptor entries in struts.xml file:

-> We can apply any existing interceptor to a action.

-> We can create our own interceptor and need to make an entry for that and then we can apply that interceptor to a action.

-> We can create stack of interceptor, so that we can simply apply that same stack to multiple actions instead of specifying the interceptors to all the actions.

-> Apply stack interceptor to a action

Code Sample for above points:

<struts>
   <package name="helloworld" extends="struts-default">
   <!-- Entry for custom interceptors -->
      <interceptors>
         <interceptor name="custinterceptor"
            class="com.ankit.CustInterceptor" />
      </interceptors>

<!-- Creating stack of interceptors, so that we can
                   apply the stack to multiple actions -->	 
<interceptor-stack name="myStack">
   <interceptor-ref name="exception"/>
   <interceptor-ref name="params"/>
   <interceptor-ref name="custinterceptor" />
</interceptor-stack>
   
   <action name="examp" 
         class="com.ankit.action.ExampAction" 
         method="execute">
         <!-- Applying inbuilt interceptor -->
		 <interceptor-ref name="params"/>
		 <!-- Applying custom interceptor -->
         <interceptor-ref name="custinterceptor" />
         <result name="success">/Output.jsp</result>
      </action>

    <action name="exampone" 
         class="com.ankit.action.ExampOneAction" 
         method="execute">
         <!-- Applying created stack of interceptor -->
         <interceptor-ref name="myStack" />
         <result name="success">/Output.jsp</result>
      </action>
</package>
</struts>
<!-- Apply your stack of interceptors to all actions -->
 <default-interceptor-ref name="myStack"/>