Учебное пособие по Struts для начинающих
Добро пожаловать в учебник по Struts для начинающих. Struts — одна из старейших платформ для создания веб-приложений Java.
Учебное пособие по Struts
Стойки 2
Apache Struts 2 — это гибкая и расширяемая инфраструктура с открытым исходным кодом, отвечающая отраслевым стандартам, для создания веб-приложений Java EE. Struts 2 основан на платформе OpenSymphony WebWork. Struts 2 очень гибок с точки зрения разработки и конфигураций, и мы увидим, насколько легко разработать веб-приложение с использованием инфраструктуры Struts 2.
Схема архитектуры Struts 2
Struts 2 Перехватчики
Перехватчики Struts похожи на фильтры сервлетов, которые выполняются до и после обработки запроса. Они используются для выполнения общих операций для различных действий. Например, ведение журнала, проверка сеанса, добавление общих заголовков в ответ и т. д.
Struts 2 ValueStack и OGNL
ValueStack — это область хранения, в которой Struts 2 хранит данные приложения для обработки клиентского запроса. Данные хранятся в объектах ActionContext
, которые используют ThreadLocal для получения значений, специфичных для конкретного потока запроса. Язык навигации по графам объектов (OGNL) — это мощный язык выражений, который используется для управления данными, хранящимися в ValueStack. Как вы можете видеть на диаграмме архитектуры, и перехватчики, и страницы результатов могут получать доступ к данным, хранящимся в ValueStack, с помощью OGNL.
Распорки 2 Действие
Компоненты Struts 2 Action обрабатывают запросы клиентов. Struts 2 предоставляет различные способы создания классов действий.
- Путем реализации интерфейса
com.opensymphony.xwork2.Action
. - Расширяя класс
com.opensymphony.xwork2.ActionSupport
. Обычно он используется для создания пустых классов действий для пересылки запроса другому ресурсу. - Аннотирование класса с помощью аннотации @Actions.
- Согласно соглашению об именах классов, имя должно заканчиваться на Action и должно иметь метод execute().
Struts 2 Результат
Компоненты результатов обычно представляют собой страницы JSP или HTML для создания представления для ответа клиента. Struts 2 предоставляет свои собственные теги, которые мы можем использовать на страницах JSP для создания ответа. Теги Struts — отличный пример пользовательских тегов JSP.
Декларативная архитектура и проводка Struts 2
Struts 2 предоставляет два способа настройки нашего приложения для классов действий и страниц результатов.
- XML-файл Struts: у нас есть файл struts.xml в каталоге WEB-INF/classes, где мы можем настроить классы действий нашего приложения и страницы результатов.
- Аннотация: мы можем использовать аннотации @Result для создания классов действий configure и связанных страниц результатов.
Какой бы способ мы ни использовали для настройки нашего приложения, конечный результат всегда будет одним и тем же.
Учебное пособие по Struts — XML-приложение Hello World
пом.xml
Откройте файл pom.xml и добавьте базовую зависимость Struts. Окончательный файл pom.xml будет выглядеть так, как показано ниже.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Struts2XMLHelloWorld</groupId>
<artifactId>Struts2XMLHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.15.1</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
Конфигурация Struts 2 web.xml
Нам нужно добавить фильтр org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
в веб-приложение и предоставить шаблон URL-адреса, где мы хотим, чтобы Struts позаботился о клиентском запросе. Наш файл web.xml выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Struts2XMLHelloWorld</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>
</web-app>
Для версии Struts 2 ниже 2.1.3 классом фильтра был org.apache.struts2.dispatcher.FilterDispatcher
.
Учебное пособие по Struts — страницы результатов
У нас есть три страницы JSP, которые будут использоваться приложением, мы используем теги Struts 2 для создания наших страниц JSP. логин.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
<s:textfield name="name" label="User Name"></s:textfield>
<s:textfield name="pwd" label="Password" type="password"></s:textfield>
<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>
Обратите внимание, что имена полей формы — name и pwd. Мы увидим, как они используются в классах Action. welcome.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>
Обратите внимание на тег s:property, который мы можем использовать для получения атрибутов запроса. Имя такое же, как в login.jsp. error.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>
Это простая страница JSP, на которую мы добавляем сообщение об ошибке и включаем страницу входа в ответ.
Учебное пособие по Struts — классы действий
В нашем приложении есть только один класс Action, в котором мы реализуем интерфейс Struts 2 Action. LoginAction.java
package com.journaldev.struts2.action;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
@Override
public String execute() throws Exception {
if("pankaj".equals(getName()) && "admin".equals(getPwd()))
return "SUCCESS";
else return "ERROR";
}
//Java Bean to hold the form parameters
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
Обратите внимание, что класс действия также является java-бином с теми же переменными, что и login.jsp, и их методами получения и установки. Struts позаботится о сопоставлении параметров запроса с переменными класса действий.
Учебное пособие по Struts — файл конфигурации
Поскольку мы используем конфигурацию на основе XML для подключения нашего приложения, нам нужно создать файл конфигурации Struts, который должен называться struts.xml и находиться в каталоге WEB-INF/classes. struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" namespace="/User" extends="struts-default">
<action name="home">
<result>/login.jsp</result>
</action>
<action name="login" class="com.journaldev.struts2.action.LoginAction">
<result name="SUCCESS">/welcome.jsp</result>
<result name="ERROR">/error.jsp</result>
</action>
</package>
</struts>
Для действия \home нет класса Action и только один результат, поэтому запрос будет переадресован на страницу login.jsp. Для действия \login LoginAction является классом действия, и если метод execute() возвращает\УСПЕХ» запрос будет обработан welcome.jsp, а в случае «ОШИБКИ» он будет перенаправлен на страницу error.jsp. namespace=\/User важен и используется в URL-адресе для доступа к классам действий, он предоставляется для создания различных модулей. Таким образом, мы можем получить доступ к нашему приложению с URL-адресом https://localhost:8080/Struts2XMLHelloWorld/User/home .action
. Обратите внимание, что URL-адрес заканчивается на .action, который является суффиксом по умолчанию для действия Struts 2, как и .do для Struts 1.
Учебное пособие по Struts — Struts 2 Hello World Test
Скачать пример проекта Struts2 Hello World
Это все, что касается руководства для начинающих по Struts 2. Ознакомьтесь со следующей статьей, в которой мы используем аннотации для создания веб-приложения Struts 2 без использования файла конфигурации struts.xml.