Interceptor in Struts 2

This project will demonstrate how to use Interceptor in Struts 2

  • Strust2
    • src/main/java
      • controllers.action
        • DemoAction.java
      • interceptors
        • DateLogInterceptor.java
        • TimeLogInterceptor.java
        • BrowserInterceptor.java
    • src/main/resources
      • struts.xml
    • src
      • main
        • webapp
          • WEB-INF
            • views
              • demo
                • index.jsp
            • web.xml
          • index.jsp
    • pom.xml
package controllers.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@InterceptorRefs({
    @InterceptorRef(value = "dateLogInterceptor"),
    @InterceptorRef(value = "browserInterceptor"),
    @InterceptorRef(value = "defaultStack")
})
@Namespace("/demo")
public class DemoAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    @Action(value = "index", results = {
        @Result(name = SUCCESS, location = "/WEB-INF/views/demo/index.jsp")
    }, interceptorRefs = {
        @InterceptorRef(value = "timeLogInterceptor")
    })
    public String index() {
        return SUCCESS;
    }

}
package interceptors;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class DateLogInterceptor implements Interceptor {

    private static final long serialVersionUID = 1L;

    public void destroy() {
    }

    public void init() {
    }

    public String intercept(ActionInvocation actionInvocation) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date today = new Date();
        String accessTime = simpleDateFormat.format(today);
        System.out.println("Access Date: " + accessTime);
        return actionInvocation.invoke();
    }

}
package interceptors;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class TimeLogInterceptor implements Interceptor {

    private static final long serialVersionUID = 1L;

    public void destroy() {
    }

    public void init() {
    }

    public String intercept(ActionInvocation actionInvocation) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
        Date today = new Date();
        String accessTime = simpleDateFormat.format(today);
        System.out.println("Access Time: " + accessTime);
        return actionInvocation.invoke();
    }

}
package interceptors;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class BrowserInterceptor implements Interceptor {

    private static final long serialVersionUID = 1L;

    public void destroy() {
    }

    public void init() {
    }

    public String intercept(ActionInvocation actionInvocation) throws Exception {
        ActionContext context = actionInvocation.getInvocationContext();
        HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);
        String ip = request.getRemoteAddr();
        String url = request.getRequestURL().toString();
        System.out.println("Client Info");
        System.out.println("IP: " + ip);
        System.out.println("Url: " + url);
        return actionInvocation.invoke();
    }

}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Learn Struts 2 with Real Apps</title>
</head>
<body>

    <h3>Index Page</h3>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<jsp:forward page="demo/index.html"></jsp:forward>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.convention.default.parent.package" value="controllers"/>

    <package name="controllers" extends="struts-default">
        <interceptors>
            <interceptor name="dateLogInterceptor" class="interceptors.DateLogInterceptor" />
            <interceptor name="timeLogInterceptor" class="interceptors.TimeLogInterceptor" />
            <interceptor name="browserInterceptor" class="interceptors.BrowserInterceptor" />
        </interceptors>
    </package>

</struts>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
            http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">

    <display-name>Learn Struts 2 Framework with Real Apps</display-name>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>struts.devMode</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>struts.action.extension</param-name>
            <param-value>html</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>LearnStrutsFrameworkWithRealApps</groupId>
    <artifactId>LearnStrutsFrameworkWithRealApps</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>LearnStrutsFrameworkWithRealApps Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Struts 2 Framework -->

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.20</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.5.20</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
            <version>2.5.20</version>
        </dependency>

    </dependencies>

    <build>
        <finalName>LearnStrutsFrameworkWithRealApps</finalName>
    </build>
</project>

Screenshots