Руководство Struts2 для начинающих (XML Config)
1. Введение
This document was written based on:
- Eclipse 4.6
- Struts 2 (2.3.20)
Вы смотрите руководство по созданию приложения Hello World Struts, используя XML для конфигурации. Вы можете посмотреть похожий пример используя Annotation для конфигурации по ссылке:
2. Создать Maven Project
- File/New/Other..



Ввод:
- Group ID: org.o7planning
- Artifact ID: Struts2XML
- Package: org.o7planning.tutorial.struts2xml

Project создан и не беспокойтесь про сообщение об обшибке. Потому что вы еще не объявили библиотеку Servlet.

Maven создавший webapp project может быть структурирован неправильно. Вам нажно исправить.

Это иллюстрация Project после завершиения:

3. Конфигурация Maven
Конфигурируйте Maven чтобы объявить библиотеки для использования. Включая библиотеки Servlet, Struts2.Также Maven Tomcat Plugin чтобы запустить приложения прямо в Eclipse.
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>Struts2XML</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Struts2XML 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>
<!-- Jstl for jsp page -->
<!-- http://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- JSP API -->
<!-- http://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</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>
</dependencies>
<build>
<finalName>Struts2XML</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: /Struts2XML : 8080) -->
<!--
<configuration>
<path>/</path>
<port>8899</port>
</configuration>
-->
</plugin>
</plugins>
</build>
</project>
Теперь ваш project не имеет больше сообщений об ошибкеi.
4. Конфигурация Struts & 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>Struts2XML</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>/WEB-INF/pages/Login.jsp</welcome-file>
</welcome-file-list>
</web-app>

struts.xml это файл resource который должен находиться в src/main/resources, этот файл выполняет обязанность конфигурации struts.
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>
<constant name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources"
value="ApplicationResources" />
<package name="default" namespace="/" extends="struts-default">
<action name="login"
class="org.o7planning.tutorial.struts2xml.action.LoginAction">
<result name="success" type="redirect">/userInfo</result>
<result name="error">/WEB-INF/pages/Login.jsp</result>
</action>
<action name="userInfo"
class="org.o7planning.tutorial.struts2xml.action.UserInfoAction">
<result name="userInfoPage">/WEB-INF/pages/UserInfo.jsp</result>
</action>
</package>
</struts>
5. Code Project
Создать файл ApplicationResources.properties в src/main/resources:

ApplicationResources.properties
label.username= Username
label.password= Password
label.login= Login
error.login= Invalid Username/Password. Please try again.

Login.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts 2 - Login Application </title>
</head>
<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror />
<s:form action="/login" method="post">
<s:textfield name="username" key="label.username" size="20" />
<s:password name="password" key="label.password" size="20" />
<s:submit method="execute" key="label.login" align="center" />
</s:form>
<br>
Username: admin, password: admin123
</body>
</html>
UserInfo.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>User Info</title>
</head>
<body>
<h2>Hello, ${loginedUsername}...!</h2>
</body>
</html>
LoginAction.java
package org.o7planning.tutorial.struts2xml.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 7299264265184515893L;
private String username;
private String password;
@Override
public String execute() {
HttpServletRequest request = ServletActionContext.getRequest();
if (this.username != null && this.password != null && this.username.equals("admin")
&& this.password.equals("admin123")) {
HttpSession session = request.getSession();
// Сохранить userName в session.
session.setAttribute("loginedUsername", this.username);
return "success";
} else {
addActionError(getText("error.login"));
return "error";
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserInfoAction.java
package org.o7planning.tutorial.struts2xml.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserInfoAction extends ActionSupport {
private static final long serialVersionUID = 7299264265184515893L;
@Override
public String execute() {
return "userInfoPage";
}
}
6. Поток программы
Иллюстрация ниже описывает поток програииы, когда пользователь заходит на веб страницу до момента когда Server отвечает на запрос.

7. Запуск приложения
Чтобы запустить приложение прямо на Eclipse, вам нужна конфигурация для запуска Tomcat Maven Plugin.


Ввод:
- Name: Run Struts2XML
- Base Directory: ${workspace_loc:/Struts2XML}
- Goals: tomcat7:run


Tomcat Maven Plugin запущен

В браузере, введите ссылку:

Если вы ввели неправильные username/password страница покажет как в иллюстрации ниже:

При правильном вводе:
