Struts 2 Hello World Example

In this example, we show you how to create a hello world example in Struts 2.

The following libraries or tools are used :

  • Maven 3
  • Eclipse 3.7
  • Struts 2.3.1.2

1. Final project structure

Let review the final project structure of this tutorial, in case you get lost in later steps.

struts2 foder structure

2. Struts2 dependencies

Use Maven to download the entire Struts2 dependencies. Add “struts2-core” in pom.xml.

File : pom.xml


<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>com.mkyong.common</groupId>
	<artifactId>Struts2Example</artifactId>
	<packaging>war</packaging>
	<version>com.mkyong.common</version>
	<name>Struts2Example 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>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.3.1.2</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>Struts2Example</finalName>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

3. Convert to Eclipse project

Compile and convert the to Eclipse web project in command prompt :


mvn eclipse:eclipse -Dwtpversion=2.0

Review the Eclipse .classpath file, the following Struts2 dependencies are downloaded :

File : .classpath


<classpath>
  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="var" path="M2_REPO/asm/asm/3.3/asm-3.3.jar"/>
  <classpathentry kind="var" path="M2_REPO/asm/asm-commons/3.3/asm-commons-3.3.jar"/>
  <classpathentry kind="var" path="M2_REPO/asm/asm-tree/3.3/asm-tree-3.3.jar"/>
  <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.jar" />
  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/2.0.1/commons-io-2.0.1.jar"/>
  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.5/commons-lang-2.5.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.18/freemarker-2.3.18.jar"/>
  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.11.0.GA/javassist-3.11.0.GA.jar"/>
  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
  <classpathentry kind="var" path="M2_REPO/ognl/ognl/3.0.4/ognl-3.0.4.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/apache/struts/struts2-core/2.3.1.2/struts2-core-2.3.1.2.jar"/>
  <classpathentry kind="lib" path="C:/Program Files/Java/jdk1.6.0_13/lib/tools.jar"/>
  <classpathentry kind="var" path="M2_REPO/org/apache/struts/xwork/xwork-core/2.3.1.2/xwork-core-2.3.1.2.jar"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

4. JSP view pages

A JSP login page to use the Struts 2 tags to display username and password input fields and submit button.

Fie : login.jsp


<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
	<h1>Struts 2 Hello World Example</h1>

	<s:form action="Welcome">
		<s:textfield name="username" label="Username" />
		<s:password name="password" label="Password" />
		<s:submit />
	</s:form>

</body>
</html>

File : welcome_user.jsp – A JSP view page to display a welcome message to user.


<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
	<h1>Struts 2 Hello World Example</h1>

	<h2>
		Hello
		<s:property value="username" />
	</h2>

</body>
</html>

Both Struts 1 and Struts 2 has very similar UI tags syntax, just a little different in term of naming the HTML elements, for example :

Struts 1


<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html:form action="Welcome">
   <html:text property="username"/>
</html:form>

Struts 2


<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form action="Welcome">
	<s:textfield name="username" label="Username"/>
</s:form>

5. Action, put all business logic here

A simple Struts2 Action class, it’s used to declared all the business logic inside.

File : WelcomeUserAction.java


package com.mkyong.user.action;

public class WelcomeUserAction{

	private String username;
	 
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	// all struts logic here
	public String execute() {

		return "SUCCESS";

	}
}

In Struts2, the Action class is not required to implement any interface or extend any class, but it’s required to create an execute() method to put all the business logic inside and return a String value to tell user where to redirect.

Note
You may see some users implement the com.opensymphony.xwork2.Action class, but it’s totally optional, because the com.opensymphony.xwork2.Action is just provide some handy constant values only.
Note
Struts1’s Action class is required to extends the org.apache.struts.action.Action. But Struts 2 Action class is optional, but you are still allow to implement the com.opensymphony.xwork2.Action for some handy constant values or extends the com.opensymphony.xwork2.ActionSupport for some common default Action implementation functions.

5. Struts configuration file

A Strut configuration file to link all stuff together. The xml file name must be “struts.xml”.

File : struts.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<package name="user" namespace="/User" extends="struts-default">
		<action name="Login">
			<result>pages/login.jsp</result>
		</action>
		<action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
			<result name="SUCCESS">pages/welcome_user.jsp</result>
		</action>
	</package>

</struts>

Declare a package and warp the action classes inside, the action classes are self-explanatory, but you may interest at following new tag :

1. package name=”user”
Just a package name, don’t really care about it.

2. namespace=”/User”
It’s used to match the “/User” URL pattern. See this article – Struts 2 namespace example and explanation.

Note
Actually, the Struts2 Namespaces is equivalent to Struts 1 multiple modules

3. extends=”struts-default”
It means the package is extends the struts-default package components and interceptors, which is declared in the struts-default.xml file, located at the root of the struts2-core.jar file.

6. web.xml

Configure the Web Application Deployment Descriptor (web.xml) file to integrate Struts2 to your web project.

File web.xml


<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Struts 2 Web Application</display-name>

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
                org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
                </filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

7. Run it

In Struts2, you can access the action class directly with a suffix of .action.

http://localhost:8080/Struts2Example/User/Login.action

struts2 hello world example1

http://localhost:8080/Struts2Example/User/Welcome.action

struts2 hello world example2

Download It

Download it – Struts2-Hello-World-Example.zip (7 KB)

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Duc Minh Trinh
Guest
Duc Minh Trinh

thank you so much.it’s very helpful with me.

Jithin
Guest
Jithin

Could you pls hlelp me to know why we are using this command in this example ?
mvn eclipse:eclipse -Dwtpversion=2.0

Karamjit Singh Sehdev
Guest
Karamjit Singh Sehdev

Hi Mkyong,

I use eclipse on linux.The command mentioned above for converting to eclipse project is not working on linux.Kindly provide solution.

Reed Williams
Guest
Reed Williams

Hi can you recommend a good, but simple, and step by step, Struts 2, install/setup guild? Can you recommend other tools/software that will be needed to work with Struts 2, & similar install/setup guilds for them as well? Thank you.

Amtrak
Guest
Amtrak

Check the struts videos on javabrains.koushik.org

Igor Janicki
Guest
Igor Janicki

great pity. nice and clear article :) however attached example does not work … :/
alt least at my machine. the java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter still ocuurs.

john dear
Guest
john dear

Hi,

in jsp file , Can not find the tag library descriptor for “/struts-tags” eclipse.. help me.
thank u.

Anurag
Guest
Anurag

Hi Myyong,

i have upload my struts2 website on shared server but i hv facing problem while calling .action class it gives me 404 action not found error.

please suggest solution
thanking you

anurag

?????
Guest
?????

Dude, Thanks for your effort

slowrunner
Guest
slowrunner

Great example – thanks.

Imported to Eclipse Luna (for J2EE Developers) and Tomcat 7.0 integrated server installed to Eclipse, originally got error about web app conflict cannot change to 2.3. Changed header on web.xml to 2.4 web container and ran maven update:

Had an error about a tools.jar could not be found – deleted from the project resources list.

Also added a default mapping in struts.xml, so could “run on server” and it would go straight to login.jsp:

User/pages/login.jsp

User/pages/welcome_user.jsp

Hamma
Guest
Hamma

Thanks for short and sweet tutorials.

Himalay Majumdar
Guest
Himalay Majumdar

Just want to point out that name of “struts.xml”? is case sensitive. It won’t accept “Struts.xml” at least.

gg
Guest
gg

yup

?? seiko
Guest
?? seiko

????

suressh
Guest
suressh

Hi Mkyoung!

May i know the steps to create struts 2 project using maven.

Anonymous
Guest
Anonymous

Posting the working struts.xml. Also changed the jsps to be directly under webapp

source code

login.jsp

welcome_user.jsp

Anonymous
Guest
Anonymous

I got this working by putting the jsps directly under the webapp folder and changing the struts.xml as follows :

login.jsp

welcome_user.jsp

prasad
Guest
prasad

How to Host struts web application in FTP Server like Hostable.com

Efrain
Guest
Efrain

I think you should look at other side, I mean, for a Java web application (Struts or not) you’ll need a host service that supports a Java Enterprise Application container a Servlet container at least, such as Tomcat, Glassfish, JBoss, etc.

Often applications developed in Java are meant for enterprise, so is the company the one who has all the infrastructure. However, you can find Java EE hosting services, probably Heroku could offer what you are looking for.

Regards,
Efrain

Say_sal
Guest
Say_sal

Hi to all, it’s truly a nice for me to pay a quick visit this web site, it contains valuable Information.

ski holiday
Guest
ski holiday

Hey very nice web site!! Guy .. Beautiful .. Wonderful ..
I will bookmark your website and take the feeds
additionally? I am glad to find so many helpful information here in the submit, we need work out
more techniques on this regard, thanks for sharing.
. . . . .

Mohammed
Guest
Mohammed

Our closest celestial neighbor does not get must respect among astronomers.
Riders with a skiing background have a tendency to
try to face the boat, this will often lead to a face plant as they
catch or drop their front edge. I also came across an interesting food pairing article – Food
Pairing Ideas for Lager Beer – in case you actually want some food
with your lager.

Eve
Guest
Eve

Hi myyong,

I followed the instruction steps by steps. Then I encounter the error:

com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
WARNING: Could not find action or result
There is no Action mapped for namespace [/] and action name [] associated with context path []. – [unknown location]

I double checked that there is no spelling errors or configuration errors in the project.
Beside, if the web app is built on struts 2 individually without GAE, it works fine.

Could you help me solve this problem?
Thanks in advance,
Eve

gazete oku
Guest
gazete oku

Nice blog here! Also your web site rather a lot up fast!
What host are you the usage of? Can I am getting your affiliate link
to your host? I wish my site loaded up as fast as yours lol

http://www.ro-obermeyer.de/
Guest
http://www.ro-obermeyer.de/

Thank you, I’ve recently been looking for info approximately this topic for ages and yours is the best I have came upon till now. However, what about the conclusion? Are you sure in regards to the supply?

naturalanxietyremediestips.com
Guest
naturalanxietyremediestips.com

Quality content is the key to attract the viewers to go
to see the site, that’s what this web site is providing.

seo
Guest
seo

Are you able to guidebook me personally on your internet marketer or even the guy which deals with your website, I’d like to determine if it would be easy to be described as a invitee poster.

Roger
Guest
Roger

Hello mkyoung,

I went through tutorials on hibernate. Thank you.

This tutorial is a big blank. How to create directory structure is not included here.

The struts 1 tutorial does not work either. Must be too old a version of eclipse etc. cannot get running. Anyway I have no found struts 1 or struts 2 tutorial to be successful.

The attached example may work yet the tutorial does not help to create like the attached example.

Thank you.

Vizyondaki Filmler
Guest
Vizyondaki Filmler

For the reason that the admin of this web page is working,
no doubt very rapidly it will be renowned, due to its feature contents.

How to Transfer Pictures from Android to iPhone
Guest
How to Transfer Pictures from Android to iPhone

This design is steller! You certainly know how to
keep a reader entertained. Between your wit and your videos,
I was almost moved to start my own blog (well, almost.
..HaHa!) Great job. I really enjoyed what you had to say, and more than that, how you presented it.
Too cool!

Todo tipo de adivinanzas
Guest
Todo tipo de adivinanzas

Thanks , I have just been searching for information about this topic
for a while and yours is the greatest I have found
out so far. However, what about the conclusion? Are you certain about the supply?

Anonymous
Guest
Anonymous

Howdy! I just wish to offer you a big thumbs up for the excellent info you have
got right here on this post. I am coming back to your blog for more soon.

Battlefield 3 hacks And cheats
Guest
Battlefield 3 hacks And cheats

Good day very nice blog!! Guy .. Excellent .. Amazing .
. I will bookmark your blog and take the feeds additionally?

I’m glad to find a lot of useful information here in the post, we’d like develop
more techniques on this regard, thanks for sharing. . . .
. .