Introduction:
- The chapter will explain the interceptor “cookie” in Struts 2 with an example program.
cookie Interceptor:
- Cookies are textual information of user that is stored on user’s browser. For performing this application, make sure that you enable cookies in your browser from cookie settings.
- In this web application, the information of user name is stored in user’s browser. So the application will retrieve name and password from user.
- So the first.jsp can be coded as:
// first.jsp <%-- Document : first Created on : Nov 20, 2014, 12:34:17 PM Author : Admin --%> <%@page contentType = "text/html" pageEncoding = "UTF-8"%> <%@taglib prefix = "s" uri = "/struts-tags" %> <!DOCTYPE html> <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title> Main Login Page </title> </head> <body> <s:form action = "click" method = "POST"> <h1> Enter details </h1> <hr/> <s:label value = "Enter Username"/> <s:textfield name = "name"/> <s:label value = "Enter password"/> <s:textfield name = "password"/> <s:submit name = "SUBMIT"/> <s:reset name = "RESET"/> </s:form> </body> </html>
- The next.jsp will gather the information from first.jsp, and will allow login as per credentials are matched.
- So, next.jsp can be written as follows:
//next.jsp <%-- Document : next Created on : Nov 20, 2014, 12:50:20 PM Author : Admin --%> <%@page contentType = "text/html" pageEncoding = "UTF-8"%> <%@taglib prefix = "s" uri = "/struts-tags" %> <!DOCTYPE html> <html> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"> <title> After Login </title> </head> <body> <h1> Welcome Page </h1> <hr/> <h4> <s:label value = "Hello "/> <s:property value = "name"/> </h4> </body> </html>
- The first.jsp will run as follows:
Figure: First dry run of application
- The action class will only verify user’s credentials. So Myaciton1.java will be coded as:
// Myaction_1.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package action_class; import com.opensymphony.xwork2.ActionSupport; import java.util.Map; import org.apache.struts2.interceptor.CookiesAware; /** * * @author Admin */ public class Myaction_1 extends ActionSupport implements CookiesAware { private String name,password; private Map cookiesMap; public Map getCookiesMap() { return cookiesMap; } public String getPassword() { return password; } public String getName() { return name; } public void setPassword(String password) { this.password = password; } public void setName(String name) { this.name = name; } public String execute() { if(name == “abc” && password == “xyz”) { setName("Hello" + getName()); return SUCCESS; } else { return “failure”; } } public void setCookiesMap(Map cookiesMap) { this.cookiesMap = cookiesMap; } } }
- Now to combine our JSP’s with action class, we need to configure our struts.xml.
//struts.xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name = "default" namespace = "/" extends = "struts-default"> <action name = "click" class = "action_class.Myaction_1"> <interceptor-ref name = "cookie"> <param name = "cookiesName"> name </param> <param name = "cookiesValue"> name </param> </interceptor-ref> <result name = "success"> jsp/next.jsp </result> </action> </package> </struts>
- The cookie interceptor element is given under action element with following syntax:
<action name = "Name of Action" class = "Name of action class">
<interceptor-ref name = "cookie">
<param name = "cookiesName1"> name of cookie1 </param>
<param name = "cookiesValue1"> value of cookie1</param>
<param name = "cookiesName2"> name of cookie2 </param>
<param name = "cookiesValue2"> value of cookie2</param>
</interceptor-ref>
</action>
- N number of cookies can be declared and used in any web application. Make sure that the value of cookies must be some field name, that is, name of a text field or any of HTML controls.
- Also, <param> element with cookies name and value is mandatory. So in our application we are storing only user name in cookies form.
- And at last, web.xml can be given as:
//web.xml <?xml version = "1.0" encoding = "UTF-8"?> <web-app version = "3.1" 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"> <filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file> jsp/first.jsp </welcome-file> </welcome-file-list> </web-app>
- So the application will run as follows: