Struts 2 Namespace configuration example and explanation

Struts 2 Namespace is a new concept to handle the multiple modules by given a namespace to each module. In addition, it can used to avoid conflicts between same action names located at different modules.

Struts 2 Namespaces are the equivalent of Struts 1 multiple modules

See this picture to understand how a URL match to Struts 2 action namespace.

namespace map url

1. Namespace configuration

Let go through a Struts 2 namescape configuration example to know how it match with URL and folder.

P.S The package “name” will not affect the result, just give a meaningful name.

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="default" namespace="/" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>
 
<package name="common" namespace="/common" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>
 
<package name="user" namespace="/user" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>
 
</struts>

Struts 2 action namespace map to folder structure.

namespace map folder

2. JSP View Pages

3 JSP view pages with same file name but locate at different modules.

Root – webapp/pages/welcome.jsp

<html>
<head></head>
<body>
<h1>Struts 2 Namespace Example</h1>
 
<h2>Welcome - namespace = "root"</h2>
 
</body>
</html>

Common module – webapp/common/pages/welcome.jsp

<html>
<head></head>
<body>
<h1>Struts 2 Namespace Example</h1>
 
<h2>Welcome - namespace = "common"</h2>
 
</body>
</html>

User module – webapp/user/pages/welcome.jsp

<html>
<head></head>
<body>
<h1>Struts 2 Namespace Example</h1>
 
<h2>Welcome - namespace = "user"</h2>
 
</body>
</html>

3. Mapping – How it work?

Example 1
URL : http://localhost:8080/Struts2Example/SayWelcome.action
Will match the root namespace.

<package name="default" namespace="/" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>

And display the content of webapp/pages/welcome.jsp.

Example 2
URL : http://localhost:8080/Struts2Example/common/SayWelcome.action
Will match the common namespace.

<package name="common" namespace="/common" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>

And display the content of webapp/common/pages/welcome.jsp.

Example 3
URL : http://localhost:8080/Struts2Example/user/SayWelcome.action
Will match the user namespace.

<package name="user" namespace="/user" extends="struts-default">
	<action name="SayWelcome">
		<result>pages/welcome.jsp</result>
	</action>
</package>

And display the content of webapp/user/pages/welcome.jsp.

Reference

  1. Struts 2 Namespace Configuration Reference
Tags :

About the Author

mkyong
Founder of Mkyong.com and HostingCompass.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