Пример Struts2 wellcome

В статье рассматривается разработка простого примера с использованием фреймворка Struts2. При разработке примера были определены :

  1. web.xml - дескриптор приложения;
  2. struts.xml - файл конфигурации с описанием действия HelloWorld;
  3. HelloWorldAction.java - класс обработки действия;
  4. index.jsp - открываемая по умолчанию страница JSP;
  5. success.jsp - JSP страница приветствия.

В примере использован фильтр SetCharacterEncodingFilter, который позволяет на уровне настройки приложения в файле web.xml решить вопрос с кириллицей.

Структура проекта в IDE Eclipse представлена на следующем скриншоте.

1. Дескриптор приложения web.xml

В десрипторе приложения подключен фильтр StrutsPrepareAndExecuteFilter для обработки запросов фреймворком Struts2. Кроме этого используется фильтр SetCharacterEncodingFilter для определения кодировки запросов и ответов браузеров в UTF-8.

<?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/j2ee" 
         xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd 
                             http://xmlns.jcp.org/xml/ns/javaee 
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_9" version="2.4">
  <display-name>Struts 2 Example</display-name>
  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

В предыдущих версиях Struts2 использовался FilterDispatcher. В примере используется версия struts2-core-2.5-BETA3.jar, которая считает FilterDispatcher deprecated, и просит перейти к StrutsPrepareAndExecuteFilter.

StrutsPrepareAndExecuteFilter перехватывает все обращения браузера клиента к серверу, подобно сервлетному фильтру для их обработки во фреймворке Struts2.

2. Определение действия в файле конфигурации 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="HelloWorld" class="example.HelloWorldAction">
            <result name="SUCCESS">/success.jsp</result>
        </action>
    </package>
</struts>

Внутри тега <struts> располагаются пакеты (<package>) действий, которые имеют общие свойства в рамках одной области (namespace). namespace занимает особое место в описании пакета и может использоваться в обращении к действиям пакета.

В данном файле конфигурации описано действие HelloWorld класса HelloWorldAction.java . Если действие вернет значение SUCCESS, то фреймворк перенаправит запрос на страницу success.jsp.

Атрибуты для тега <package>

  • name – название пакета. Должно быть уникальным в приложении (файле конфигурации);
  • extends – название расширяемого (родительского) пакета;
  • namespace – область пакета, определяющая обращение к действиям пакета;
  • action - используется для определения действия Action.

3. Действие HelloWorldAction.java

Действия (action) - это основной строительный элемент фреймворка. Struts2 это действие-ориентированный фреймворк, и действия выполняют основную работу при обработке HTTP запроса пользователя к приложению.

Листинг класса HelloWorldAction.java

package example;

public class HelloWorldAction
{
    private String userName = null;
	private String message; 
	  
    public HelloWorldAction() {}

    public String execute()
    { 
        setMessage ("Добро пожаловать, " + getUserName()); 
        return "SUCCESS"; 
    } 
  
    public String getMessage ()
    { 
    	return message;
    } 
  
    public void setMessage ( String message )
    { 
        this.message = message; 
    } 
    public String getUserName() {
  		return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

4. Страница index.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>

<html>
  <head>
     <title>Добро пожаловать!</title>
  </head>
  <body>
    <s:form action="HelloWorld" >
        <s:textfield name="userName" label="Ваше имя" />
        <s:submit />
    </s:form>
  </body>
</html>

Следующий код <%@ taglib prefix="s" uri="/struts-tags" %> подключает библиотеку тегов Struts2. при нажатии на кнопку Submit серверу будет передано Ваше имя в текстовом поле userName и выполнено действие HelloWorld.

На следующем скриншоте представлен интерфейс страницы.

На странице необходимо ввести свое имя и нажать кнопку Submit.

5. Страница success.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<html>
  <head>
    <title>Struts приветствует Вас</title>
  </head>
  <body>
    <h1><s:property value="message" /></h1>
    <i>Приветствие от Struts2</i>
  </body>
</html>

Тег <s:property value="message"/> отображает свойство message действия HelloWorldAction.

На следующем скриншоте представлен интерфейс страницы success.jsp.

После выполнения всех шагов можно тестировать пример. Для этого необходимо открыть страницу
http://localhost:8080/StrutsExample/index.jsp. На странице следует ввести свое имя и нажать кнопку Submit. После нажатия на кнопку сервер выполнит действие HelloWorld и откроет страницу success.jsp с обработанным в Struts2 приветствием.

Скачать пример

Исходный код примера, рассмотренного в тексте страницы, можно скачать здесь (5.2 Мб).

  Рейтинг@Mail.ru