Struts – Wildcards example
Struts wildcards can helps to reduce the repetition in your struts-config.xml file, as long as your Struts project is following some regular file structure. For example, in User module, to implement the CRUD function, your struts-config.xml may look like following
1. No Wildcards
You need to create four action mappings for each list, add, delete and update function, and a lot of repetition.
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd"> <struts-config> <action-mappings> <action path="/ListUserAction" type="com.mkyong.common.action.UserAction" parameter="ListUser" > <forward name="success" path="/pages/ListUser.jsp"/> </action> <action path="/AddUserAction" type="com.mkyong.common.action.UserAction" parameter="AddUser" > <forward name="success" path="/pages/AddUser.jsp"/> </action> <action path="/EditUserAction" type="com.mkyong.common.action.UserAction" parameter="EditUser" > <forward name="success" path="/pages/EditUser.jsp"/> </action> <action path="/DeleteUserAction" type="com.mkyong.common.action.UserAction" parameter="DeleteUser" > <forward name="success" path="/pages/DeleteUser.jsp"/> </action> </action-mappings> </struts-config>
2. With Wildcards
With Struts wildcards feature, your struts-config.xml can cut down into one action mapping.
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd"> <struts-config> <action-mappings> <action path="/*UserAction" type="com.mkyong.common.action.UserAction" parameter="{1}User" > <forward name="success" path="/pages/{1}User.jsp"/> </action> </action-mappings> </struts-config>
Let’s see an use case, try access via http://localhost:8080/StrutsExample/EditUserAction.do. The “EditUserAction.do” will match the “/*UserAction” pattern, and the * matched string “Edit” is represent by {1} for later use.
In above case, the wildcards action mapping will change from
<action path="/*UserAction" type="com.mkyong.common.action.UserAction" parameter="{1}User" > <forward name="success" path="/pages/{1}User.jsp"/> </action>
to
<action path="/EditUserAction" type="com.mkyong.common.action.UserAction" parameter="EditUser" > <forward name="success" path="/pages/EditUser.jsp"/> </action>
Conclusion
Both struts-config.xml samples have the same functionality, but with less repetition in wildcards support. However, DO NOT overuse this wildcards feature in your project, it’s less manageable than the normal declaration.