Hướng dẫn sử dụng Struts2 Namespace

1- @Namespace Annotation

@Namespace là một annotation (chú thích) nó có thể sử dụng để chú thích tại mức (level) package hoặc class.  Và nó sẽ có tác dụng đối với các lớp Action nằm trong package được chú thích hoặc các lớp Action được chú thích bởi @Namespace.
Thông thường nếu lớp Action của bạn không được chú thích bởi @Namespace, và cũng không nằm trong một package được chú thích bởi @Namespace, mặc định coi như nó đã được chú thích bởi @Namespace(value = "/")
// Cấu hình một Action:

@Action(value = "hello", //
results = {
  // ...
)
public class HelloAction  extends ActionSupport

// ==================================
// Cũng giống với:

@Namespace(value ="/")
@Action(value = "hello", //
results = {
  // ...
)
public class HelloAction  extends ActionSupport
Hình minh họa dưới đây chỉ ra cách truy cập vào một Action nằm trong một namespace.
@Namespace được chú thích trên package:
@Namespace("/path1/path2")
package org.o7planning.struts2namespace.action;

2- Tạo Maven Project

Trên Eclipse tạo một Maven Web App Project rỗng có tên Struts2Namespace.

3- Cấu hình Struts2, pom.xml & web.xml

Cấu hình Struts2 trong web.xml:
web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     id="WebApp_ID" version="3.0">
 
    <display-name>Struts2Namespace</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>

    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
   

</web-app>
Cấu hình maven:
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>org.o7planning</groupId>
  <artifactId>Struts2Namespace</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Struts2Namespace 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>



        <!-- Servlet Library -->
        <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>


        <!-- http://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.20</version>
        </dependency>

        <!-- http://mvnrepository.com/artifact/org.apache.struts/struts2-convention-plugin -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.3.20</version>
        </dependency>

    </dependencies>


    <build>
        <finalName>Struts2Namespace</finalName>
        <plugins>

            <!-- Config: Maven Tomcat Plugin -->
            <!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!-- Config: contextPath and Port (Default: /Struts2Namespace : 8080) -->
                <!-- <configuration> <path>/</path> <port>8899</port> </configuration> -->
            </plugin>


        </plugins>
    </build>

</project>

4- Struts2 Action & Jsp

AboutUsAction.java
package org.o7planning.struts2namespace.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(value = "/web/info")
@Action(value = "aboutUs", //
        results = { //
                @Result(name = "success", location = "/WEB-INF/pages/aboutUs.jsp") //
        } //
)
public class AboutUsAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    @Override
    public String execute() {

        return "success";
    }

}
/WEB-INF/pages/aboutUs.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>About Us</title>
</head>
<body>

 <h3>About o7planning</h3>
 <p>Address: Vietnam</p>
 <p>Contact: ... </p>

</body>
</html>

5- Chạy ứng dụng

Nhập vào:
  • Name: Run Struts2Namespace
  • Base directory: ${workspace_loc:/Struts2Namespace}
  • Goals: tomcat7:run