Статьи

Руководство по Struts 2: создание приложения Struts 2 в Eclipse

Добро пожаловать в часть 2 серии из 7 частей, где мы познакомимся с миром Struts 2 Framework. В предыдущей статье мы рассмотрели основы Struts2, его диаграмму архитектуры, жизненный цикл обработки запросов и краткое сравнение Struts1 и Struts2. Если вы еще не ознакомились с предыдущей статьей, я настоятельно рекомендую вам сделать это, прежде чем начинать практическую работу сегодня.

Вещи, которые нам нужны

Прежде чем мы начнем с нашего первого примера Hello World Struts 2, нам понадобится несколько инструментов.

  1. JDK 1.5 выше ( скачать )
  2. Tomcat 5.x выше или любой другой контейнер (Glassfish, JBoss, Websphere, Weblogic и т. Д.) ( Скачать )
  3. Eclipse 3.2.x выше ( скачать )
  4. JAR-файлы Apache Struts2 🙁 скачать ). Ниже приведен список файлов JAR, необходимых для этого приложения.

    • Обще-каротаж 1.0.4.jar
    • FreeMarker-2.3.8.jar
    • OGNL-2.6.11.jar
    • struts2-ядро-2.0.12.jar
    • xwork-2.0.6.jar

    Обратите внимание, что в зависимости от текущей версии Struts2 номер версии вышеуказанных jar-файлов может изменяться.

Наша цель

Наша цель — создать базовое приложение Struts2 со страницей входа. Пользователь введет учетные данные для входа в систему, и в случае успешной аутентификации он будет перенаправлен на страницу приветствия, на которой будет отображено сообщение « Привет, <имя пользователя>…!» «. Если пользователь не аутентифицирован, он будет перенаправлен обратно на страницу входа.

Начиная

Давайте начнем с нашего первого приложения на базе Struts2.
Откройте Eclipse и перейдите в Файл -> Создать -> Проект и выберите Динамический веб-проект на экране мастера создания нового проекта.

После выбора Dynamic Web Project нажмите Далее .

Напишите название проекта. Например StrutsHelloWorld . Как только это будет сделано, выберите целевую среду выполнения (например, Apache Tomcat v6.0). Это для запуска проекта в среде Eclipse. После этого нажмите Готово .

Как только проект создан, вы можете увидеть его структуру в Project Explorer.

Теперь скопируйте все необходимые JAR-файлы в папку WebContent -> WEB-INF -> lib. Создайте эту папку, если она не существует.

Сопоставление Struts2 в WEB.xml

Как обсуждалось в предыдущей статье ( Введение в Struts2 ), точкой входа приложения Struts2 будет определение фильтра в дескрипторе развертывания (web.xml). Следовательно, мы определим запись класса org.apache.struts2.dispatcher.FilterDispatcher в web.xml.

Откройте файл web.xml, который находится в папке WEB-INF, и скопируйте следующий код.

<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Struts2 Application</display-name><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>Login.jsp</welcome-file></welcome-file-list></web-app>

Приведенный выше код в web.xml отобразит фильтр Struts2 с помощью url / *. URL-адрес по умолчанию для приложения struts2 будет /*.action. Также обратите внимание, что мы определили Login.jsp как файл приветствия.

Класс действий

Нам понадобится класс Action, который будет аутентифицировать нашего пользователя и содержит значение для имени пользователя и пароля. Для этого мы создадим пакет net.viralpatel.struts2 в исходной папке. Этот пакет будет содержать файл действия.

Создайте класс с именем LoginAction в пакете net.viralpatel.struts2 со следующим содержимым.

package net.viralpatel.struts2;public class LoginAction {private String username;private String password;public String execute() {if (this.username.equals("admin")&& this.password.equals("admin123")) {return "success";} else {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;}}

Обратите внимание, что вышеупомянутый класс действия содержит два поля: имя пользователя и пароль, которые будут содержать значения из формы, а также содержит метод execute (), который будет аутентифицировать пользователя. В этом простом примере мы проверяем, является ли имя пользователя admin и пароль admin123 .

Также обратите внимание, что в отличие от класса Action в Struts1, класс действия Struts2 является простым классом POJO с необходимыми атрибутами и методом.

Метод execute () возвращает значение String, которое будет определять страницу результатов. Также в Struts2 имя метода не является фиксированным. В этом примере мы определяем метод execute (). Вы можете захотеть определить метод authenticate () вместо этого.

ResourceBundle

ResourceBundle — очень полезная сущность Java, которая помогает убрать статический контент из исходного файла. Большинство приложений определяют файл пакета ресурсов, такой как файл ApplicationResources.properties, который содержит статические сообщения, такие как имя пользователя или пароль, и включает его в приложение.

ResourceBundle пригодится, когда мы хотим добавить поддержку интернационализации (I18N) в приложение.

Мы определим файл ApplicationResources.properties для нашего приложения. Этот файл свойств должен присутствовать в папках WEB-INF / classes при компиляции исходного кода. Таким образом, мы создадим исходную папку с именем resources и поместим в нее файл ApplicationResources.properties.

Чтобы создать исходную папку, щелкните правой кнопкой мыши свой проект в Project Explorer и выберите New -> Source Folder .

Укажите ресурсы имени папки и нажмите « Готово» .

Создайте файл ApplicationResources.properties в папке ресурсов.

Скопируйте следующий контент в ApplicationResources.properties.

label.username= Usernamelabel.password= Passwordlabel.login= Login

JSP

Мы создадим два файла JSP для визуализации вывода пользователю. Login.jsp будет отправной точкой нашего приложения, которое будет содержать простую форму входа в систему с именем пользователя и паролем. При успешной аутентификации пользователь будет перенаправлен на Welcome.jsp, который покажет простое приветственное сообщение.

Создайте два файла JSP Login.jsp и Welcome.jsp в папке WebContent вашего проекта. Скопируйте следующий контент в него.

Login.jsp

<%@ page contentType="text/html; charset=UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><html><head><title>Struts 2 - Login Application | ViralPatel.net</title></head><body><h2>Struts 2 - Login Application</h2><s:actionerror /><s:form action="login.action" 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></body></html>

welcome.jsp

<%@ page contentType="text/html; charset=UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><html><head><title>Welcome</title></head><body><h2>Howdy, <s:property value="username" />...!</h2></body></html>

Обратите внимание, что мы использовали тег struts2 <s:> для визуализации текстовых полей и меток. Struts2 поставляется с мощной встроенной библиотекой тегов для более эффективной визуализации элементов пользовательского интерфейса.

Файл struts.xml

Struts2 считывает конфигурацию и определение класса из XML-файла с именем struts.xml . Этот файл загружается из пути к классам проекта. Мы определим файл struts.xml в папке ресурсов . Создайте файл struts.xml в папке ресурсов.

Скопируйте следующий контент в 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="false" /><constant name="struts.custom.i18n.resources"value="ApplicationResources" /><package name="default" extends="struts-default" namespace="/"><action name="login"class="net.viralpatel.struts2.LoginAction"><result name="success">Welcome.jsp</result><result name="error">Login.jsp</result></action></package></struts>

Обратите внимание, что в приведенном выше файле конфигурации мы определили действие входа нашего приложения. Два пути результата отображаются с LoginAction в зависимости от результата метода execute (). Если метод execute () вернет успех, пользователь будет перенаправлен в Welcome.jsp, а в Login.jsp.

Также обратите внимание, что константа указывается с именем struts.custom.i18n.resources . Эта константа указывает файл пакета ресурсов, который мы создали на предыдущих этапах. Нам просто нужно указать имя файла пакета ресурсов без расширения (ApplicationResources без .properties).

Наш LoginAction содержит метод execute (), который является методом по умолчанию, вызываемым Sturts2. Если имя метода отличается, например authenticate (); тогда мы должны указать имя метода в теге <action>.

<action name="login" method="authenticate"class="net.viralpatel.struts2.LoginAction">

Почти сделано

Мы почти закончили с приложением. Вы можете запустить приложение сейчас и увидеть результат самостоятельно. Я предполагаю, что вы уже настроили Tomcat в Eclipse. Все, что вам нужно сделать:
Открыть представление сервера из Windows -> Показать представление -> Сервер. Щелкните правой кнопкой мыши в этом представлении и выберите New -> Server и добавьте данные вашего сервера.
Чтобы запустить проект, щелкните правой кнопкой мыши имя проекта в Project Explorer и выберите «Запуск от имени» -> «Выполнить на сервере» (сочетание клавиш: Alt + Shift + X, R).

Но есть одна маленькая проблема. Наше приложение прекрасно работает на данный момент. Но когда пользователь вводит неверные учетные данные, он перенаправляется на страницу входа. Но сообщение об ошибке не отображается. Пользователь не знает, что только что произошло. Хорошее приложение всегда показывает правильные сообщения об ошибках пользователю. Поэтому мы должны отобразить сообщение об ошибке « Неверное имя пользователя / пароль». Пожалуйста, попробуйте еще раз, когда аутентификация пользователя не удалась.

Последнее прикосновение

Чтобы сначала добавить эту функцию, мы добавим сообщение об ошибке в наш файл ResourceBundle.
Откройте ApplicationResources.properties и добавьте в него запись для error.login . Конечный ApplicationResources.properties будет выглядеть так:

label.username= Usernamelabel.password= Passwordlabel.login= Loginerror.login= Invalid Username/Password. Please try again.

Также нам нужно добавить логику в LoginAction, чтобы добавить сообщение об ошибке, если пользователь не аутентифицирован. Но есть одна проблема. Наше сообщение об ошибке указано в файле ApplicationResources.properties. Мы должны указать ключ error.login в LoginAction, и сообщение должно отображаться на странице JSP.

Для этого мы должны реализовать интерфейс com.opensymphony.xwork2.TextProvider, который предоставляет метод getText (). Этот метод возвращает строковое значение из файла комплекта ресурсов. Нам просто нужно передать значение ключа в качестве аргумента методу getText (). Интерфейс TextProvider определяет несколько методов, которые мы должны реализовать, чтобы получить метод getText (). Но мы не хотим портить наш код, добавляя все те методы, которые мы не собираемся использовать. Есть хороший способ справиться с этой проблемой.

Struts2 поставляется с очень полезным классом com.opensymphony.xwork2.ActionSupport. Нам просто нужно расширить наш класс LoginAction этим классом и напрямую использовать такие методы, как getText (), addActionErrors () и т. Д. Таким образом, мы расширим класс LoginAction классом ActionSupport и добавим в него логику для сообщения об ошибках. Окончательный код в LoginAction должен выглядеть следующим образом:

package net.viralpatel.struts2;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private String username;private String password;public String execute() {if (this.username.equals("admin")&& this.password.equals("admin123")) {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;}}

Вот и все. Наше первое приложение Hello World Struts2 теперь готово.

Это все люди

Запустите приложение в Eclipse и запустите его в своем любимом браузере.
Страница авторизации

Страница приветствия

Страница входа с ошибкой

Скачать исходный код

Нажмите здесь, чтобы загрузить исходный код без файлов JAR (9 КБ).

Двигаться дальше

Теперь, когда мы создали наше первое веб-приложение с использованием инфраструктуры Struts2, мы знаем, как проходит запрос в Struts2. Мы также знаем об использовании struts.xml и файла свойств. В этом приложении мы реализовали предварительную форму проверки. В следующей части мы узнаем больше о Validation Framework в Struts2 и реализуем его в нашем примере.

Оригинальная статья: http://viralpatel.net/blogs/2009/12/tutorial-create-struts-2-application-eclipse-example.html