Create Maven Project
On the Eclipse, create a Maven project
Click Next button and select Workspace location for project
Click Next button and select maven-archetype-webapp
Click Next button and enter Project Information:
- GroupId: LearnStrutsFrameworkWithRealApps
- Artifact Id: LearnStrutsFrameworkWithRealApps
- Package: com.demo
Click Finish button to finish create Maven project
Add Tomcat Server
Select current project, Right click and select Properties menu. In Properties dialog, select Targeted Runtime in left side after select Tomcat server from server list in right side
Click Ok button to finish
Add JRE System Library
Select current project, Right click and select Build Path\Configure Build Path menu Select JRE System Library in Libraries tab:
Click Edit button and select JRE System Library you need use as below:
Click Finish button to finish
Configure pom.xml
Open pom.xml file and add configurations for Struts 2 as below:
<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>
<!-- Tiles -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-tiles-plugin</artifactId>
<version>2.5.20</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
</dependencies>
<build>
<finalName>LearnStrutsFrameworkWithRealApps</finalName>
</build>
</project>
Configure web.xml
Open web.xml file in src\main\webapp\WEB-INF folder and add configurations for Struts 2 as below:
<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>
<context-param>
<param-name>tilesDefinitions</param-name>
<param-value>
/WEB-INF/tiles.xml,
/WEB-INF/tiles_news.xml,
/WEB-INF/tiles_home.xml,
/WEB-INF/tiles_about_us.xml
</param-value>
</context-param>
<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>
<listener>
<listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Create Configuration File
Create new xml file named struts.xml in src/main/resources folder as below:
<!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">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
</package>
</struts>
Create Custom Tag Handler
Create new package named tags. In this package, create new file named CategoryListTag.java as below:
package tags;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class CategoryListTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
JspWriter writer = getJspContext().getOut();
List<String> categories = new ArrayList<String>();
categories.add("Category 1");
categories.add("Category 2");
categories.add("Category 3");
categories.add("Category 4");
categories.add("Category 5");
if (categories.size() > 0) {
writer.print("<ul>");
for (String category : categories) {
writer.print("<li><a href=\"#\">" + category + "</a></li>");
}
writer.print("</ul>");
}
}
}
Create Custom Tag Library Descriptor
Create new folder named tlds in src\main\webapp\WEB-INF folder. In this folder, create categoryTag.tld file as below:
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>Category Tab Library</short-name>
<uri>categoryTag</uri>
<tag>
<name>categoryiesList</name>
<tag-class>tags.CategoryListTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
Create Actions
Create new package named controllers.action in src/main/java folder. The action class in Struts 2 must be put in a package named action. In this package, create new actions as below:
Home Action
In controllers.action package, create new java class named HomeAction.java as below:
package controllers.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/home")
public class HomeAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Action(value = "index", results = {
@Result(name = SUCCESS, location = "home.index", type = "tiles")
})
public String index() {
return SUCCESS;
}
}
About Us Action
In controllers.action package, create new java class named AboutUsAction.java as below:
package controllers.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/aboutus")
public class AboutUsAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Action(value = "index", results = {
@Result(name = SUCCESS, location = "aboutus.index", type = "tiles")
})
public String index() {
return SUCCESS;
}
}
News Action
In controllers.action package, create new java class named NewsAction.java as below:
package controllers.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/news")
public class NewsAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Action(value = "index", results = {
@Result(name = SUCCESS, location = "news.index", type = "tiles")
})
public String index() {
return SUCCESS;
}
}
Create Views
Create new folder named views in src\main\webapp\WEB-INF folder. In views folder, create new views as below:
Template View
Create new folder named templates. Create new jsp file named mytemplate.jsp as below:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="category" uri="categoryTag" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><tiles:insertAttribute name="title" ignore="true" /></title>
<style type="text/css">
li {
list-style-type: none;
}
</style>
</head>
<body>
<table border="1" cellpadding="5" cellspacing="5" width="500">
<tr>
<td colspan="2">
<s:a namespace="/home" action="index">Home</s:a> |
<s:a namespace="/aboutus" action="index">About Us</s:a> |
<s:a namespace="/news" action="index">News</s:a>
</td>
</tr>
<tr>
<td valign="top" align="left" width="200">
<category:categoryiesList/>
</td>
<td valign="top" align="left">
<tiles:insertAttribute name="content"></tiles:insertAttribute>
</td>
</tr>
<tr>
<td colspan="2">
Copyright PMK Lab
</td>
</tr>
</table>
</body>
</html>
Home View
Create new folder named home. Create new jsp file named index.jsp as below:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<h3>Home Page</h3>
About Us View
Create new folder named aboutus. Create new jsp file named index.jsp as below:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<h3>About Us Page</h3>
News View
Create new folder named news. Create new jsp file named index.jsp as below:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<h3>News Page</h3>
Tile Definitions
In src\main\webapp\WEB-INF folder, create new xml files as below:
Tile Definitions for Page Template
In src\main\webapp\WEB-INF folder, create new xml file named tiles.xml as below:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="mytemplate" template="/WEB-INF/views/templates/mytemplate.jsp">
<put-attribute name="title" value=""></put-attribute>
<put-attribute name="content" value=""></put-attribute>
</definition>
</tiles-definitions>
Tiles Definitions for Home Action
In src\main\webapp\WEB-INF folder, create new xml file named tiles_home.xml as below:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="home.index" extends="mytemplate">
<put-attribute name="title" value="Home Page"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/home/index.jsp"></put-attribute>
</definition>
</tiles-definitions>
Tile Definitions for About Us Action
In src\main\webapp\WEB-INF folder, create new xml file named tiles_about_us.xml as below:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="aboutus.index" extends="mytemplate">
<put-attribute name="title" value="About Us Page"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/aboutus/index.jsp"></put-attribute>
</definition>
</tiles-definitions>
Tiles Definitions for News Action
In src\main\webapp\WEB-INF folder, create new xml file named tiles_news.xml as below:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="news.index" extends="mytemplate">
<put-attribute name="title" value="News Page"></put-attribute>
<put-attribute name="content" value="/WEB-INF/views/news/index.jsp"></put-attribute>
</definition>
</tiles-definitions>
Create Redirect Page
Create new jsp file named index.jsp in src\main\webapp folder as below:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<jsp:forward page="home/index.html"></jsp:forward>
Structure of Project
Run Application
Select project, right click and select Run on Server menu
Access index method in home action with following url:
http://localhost:8080/LearnStrutsFrameworkWithRealApps/home/index.html
Output
Click About Us link from menu
Output
Click News link from menu
Output