devstory

Le Tutoriel de Struts2 pour débutant (XML Config)

  1. Introduction
  2. Créer le Projet Maven
  3. Configuration de Maven
  4. Configuration de Struts & web.xml
  5. Code Project
  6. Le flux du programme
  7. Exécution de l'application

1. Introduction

This document was written based on:
  • Eclipse 4.6
  • Struts 2 (2.3.20)
Vous êtes en train de voir Hello World Struts, qui utilise XML pour configurer. Vous pouvez voir l'exemple similaire utilisant Annotation afin de configurer à:

2. Créer le Projet Maven

  • File/New/Other..
Saisissez:
  • Group ID: org.o7planning
  • Artifact ID: Struts2XML
  • Package: org.o7planning.tutorial.struts2xml
Ne vous inquiétez pas du message d'erreur lorsque le projet a été créé. La raison en est que vous ne déclarez pas la bibliothèque Servlet.
Eclipse crée la structure du projet webapp Maven peut être fausse. Vous devez la réparer
C'est l'image de l'achèvement du projet:

3. Configuration de Maven

La configuration de Maven déclare la bibliothèque qui est utilisée y compris les bibliogthèque Servlet, Struts2. Elle configure également Maven Tomcat Plugin qui sert à exécuter des applications en lignes directement sur 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>
Maintenant il n'y a plus le message d'erreur.

4. Configuration de 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 est un fichier resource, il doit être mis dans src/main/resources, ce fichier sert à configurer 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

Créez le fichier ApplicationResources.properties dans 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();
			
			// Stockez userName dans la 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. Le flux du programme

L'illustration ci-dessus décrit le flux du programme utilisateur accède à la page du site Web pour que Server recoive une réponse..

    7. Exécution de l'application

    Afin d'exécuter l'application directement sur Eclipse, vous devez configurer pour exécuter Tomcat Maven Plugin.
    Saisissez:
    • Name: Run Struts2XML
    • Base Directory: ${workspace_loc:/Struts2XML}
    • Goals: tomcat7:run
    Tomcat Maven Plugin est en train d'exécuter
    Dans le navigateur, saisissez le chemin:
    Si vous saisissez username/password incorrectement, une page sera affichée comme celle-ci:
    Le cas où vous les saisissez correctement: