歡迎來到Struts初學者教程。Struts是最早的框架之一,用於構建Java Web應用程序。Java Web應用程序。
Struts教程
Struts是MVC設計模式的最初實現,並隨著Java和Java EE技術的最新增強而不斷演變。Struts教程旨在提供有關Struts 2的基本信息,以及我們如何創建第一個“Hello World” Struts 2應用程序。
Struts 2
Apache Struts 2是一個開源的、行業標準的、靈活可擴展的框架,用於構建Java EE Web應用程序。Struts 2基於OpenSymphony WebWork框架。Struts 2在開發和配置方面非常靈活,我們將看到使用Struts 2框架開發Web應用程序有多麼容易。
Struts 2 架构图
下图显示了在Web应用程序中使用的Struts 2 的不同组件。
Struts 2 拦截器
Struts 拦截器类似于Servlet 过滤器,在请求被处理之前和之后执行。它们用于执行不同操作的公共操作。例如日志记录、会话验证、向响应添加常见标头等。
Struts 2 ValueStack 和 OGNL
ValueStack 是 Struts 2 中用於存儲應用程序數據的存儲區域,以處理客戶端請求。數據存儲在使用 ActionContext
對象的 ThreadLocal 中,以便具有特定於特定請求線程的值。 Object-Graph Navigation Language(OGNL)是一種功能強大的表達式語言,用於操作存儲在 ValueStack 上的數據。正如您在架構圖中看到的那樣,拦截器和結果頁可以使用 OGNL 訪問存儲在 ValueStack 上的數據。
Struts 2 Action
處理客戶端請求的 Struts 2 Action 組件。Struts 2 提供了不同的方法來創建 Action 類。
- 通過實現
com.opensymphony.xwork2.Action
接口。 - 通過擴展
com.opensymphony.xwork2.ActionSupport
類。通常用於創建空的 Action 類,以將請求轉發到另一個資源。 - 使用 @Action 或 @Actions 注釋標記一個類。
- 按照類的命名約定,名稱應以 Action 結尾並且應該具有 execute() 方法。
Struts 2 結果
結果組件通常是用於為客戶端響應創建視圖的 JSP 或 HTML 頁面。Struts 2 提供了自己的標籤,我們可以在 JSP 頁面中使用這些標籤來創建響應。Struts 標籤是 JSP 自定義標籤的很好的例子。
Struts 2 声明式架构和連接
Struts 2 提供了兩種配置應用程序的方法,用於操作類和結果頁面。
- Struts XML 文件:我們在 WEB-INF/classes 目錄中有一個 struts.xml 文件,我們可以在其中配置應用程序的操作類和結果頁面。
- 註解:我們可以使用 Java 註解提供有關類的元數據信息。Struts 2 慣例插件可以用於使用 @Action 和 @Result 註解對 Java 類進行標註,以創建配置操作類和相關結果頁面。
無論我們使用哪種方式來配置我們的應用程式,最終結果都將是相同的。
Struts 教程 – Hello World XML 基於應用程式
讓我們來看看如何創建我們的第一個Struts 2 Hello World應用程序。首先,我們需要Struts 2的jar文件,最簡單的方法是從Struts 2官方下載頁面下載。但是,當你檢查下載的存檔中的庫時,你會發現有很多我們簡單應用程序不需要的jar文件。所以我將創建一個maven項目,只添加struts-core依賴,所有其他傳遞依賴的jar文件將自動下載並添加到應用程序中。我們最終的項目結構將如下圖所示。 在Eclipse中創建一個名為Struts2XMLHelloWorld的新的動態Web項目,然後將其轉換為maven項目,如下圖所示。
您將注意到pom.xml文件被添加到項目的根目錄中。我們在Eclipse中的項目設置已經準備就緒,讓我們按順序查看不同的組件。
pom.xml
打開pom.xml文件並添加struts core依賴,最終的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>
請注意,我已經覆蓋了finalName
元素,以避免在進行Maven構建時將版本號添加到WAR文件中。其他部分是由Eclipse自動添加的,我們唯一需要的依賴是struts2-core,其當前版本為2.3.15.1(截至2013年9月10日)。只需對應用程序進行Maven構建,就會看到很多JAR文件添加到應用程序lib目錄中,並在Maven Dependencies部分顯示,如下圖所示。
Struts 2 web.xml配置
我們需要將org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
過濾器添加到Web應用程序中,並提供我們希望Struts處理客戶端請求的URL模式。我們的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,filter-class為org.apache.struts2.dispatcher.FilterDispatcher
。
Struts教程 – 結果頁面
我們有三個JSP頁面將被應用程序使用,我們使用Struts 2標籤來創建我們的JSP頁面。login.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>
請注意struts標籤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類
我們的應用程序只有一個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 用於保存表單參數
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;
}
}
請注意,action類也是一個Java Bean,具有與login.jsp相同的變量及其getter和setter方法。Struts將負責將請求參數映射到action類的變量。
Struts教程-配置文件
由於我們使用基於XML的配置來連線我們的應用程式,因此我們需要創建一個名為struts.xml的Struts配置文件,並放在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”,沒有動作類,只有一個結果,因此請求將被轉發到login.jsp頁面。對於動作“login”,LoginAction是動作類,如果execute()方法返回“SUCCESS”,則請求將由welcome.jsp處理,如果返回“ERROR”,則請求將被轉發到error.jsp頁面。namespace=“/User”非常重要,並且在URL中用於訪問動作類,它用於創建不同的模塊。因此,我們可以使用URL https://localhost:8080/Struts2XMLHelloWorld/User/home.action
來訪問我們的應用程式。請注意,URL以.action結尾,這是Struts 2動作的默認後綴,就像Struts 1中的.do一樣。
Struts教程 – Struts 2 Hello World測試
這就是關於 Struts 2 初學者教程的全部內容,請查看下一篇文章,我們將使用註釋方式來創建 Struts 2 Web 應用程式,而無需使用 struts.xml 配置文件。
Source:
https://www.digitalocean.com/community/tutorials/struts-tutorial-for-beginners