Поиск по сайту:

Учебное пособие по 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 предоставляет различные способы создания классов действий.

  1. Путем реализации интерфейса com.opensymphony.xwork2.Action.
  2. Расширяя класс com.opensymphony.xwork2.ActionSupport. Обычно он используется для создания пустых классов действий для пересылки запроса другому ресурсу.
  3. Аннотирование класса с помощью аннотации @Actions.
  4. Согласно соглашению об именах классов, имя должно заканчиваться на Action и должно иметь метод execute().

Struts 2 Результат

Компоненты результатов обычно представляют собой страницы JSP или HTML для создания представления для ответа клиента. Struts 2 предоставляет свои собственные теги, которые мы можем использовать на страницах JSP для создания ответа. Теги Struts — отличный пример пользовательских тегов JSP.

Декларативная архитектура и проводка Struts 2

Struts 2 предоставляет два способа настройки нашего приложения для классов действий и страниц результатов.

  1. XML-файл Struts: у нас есть файл struts.xml в каталоге WEB-INF/classes, где мы можем настроить классы действий нашего приложения и страницы результатов.
  2. Аннотация: мы можем использовать аннотации @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.