Struts2 注釋

2022-07-08 11:37 更新

如前章節(jié)中所講到的,Struts提供了兩種形式的配置。傳統(tǒng)的方式是對(duì)所有配置使用struts.xml文件。到目前為止,我們?cè)诮坛汤镆呀?jīng)看到了好些這樣的例子。配置Struts的另一種方法是使用Java5 的注釋功能。使用struts注釋,我們可以實(shí)現(xiàn)零配置。
要在項(xiàng)目中開始使用注釋,請(qǐng)確保WebContent/WEB-INF/lib文件夾中包含以下jar文件:

  • struts2-convention-plugin-x.y.z.jar

  • asm-x.y.jar

  • antlr-x.y.z.jar

  • commons-fileupload-x.y.z.jar

  • commons-io-x.y.z.jar

  • commons-lang-x.y.jar

  • commons-logging-x.y.z.jar

  • commons-logging-api-x.y.jar

  • freemarker-x.y.z.jar

  • javassist-.xy.z.GA

  • ognl-x.y.z.jar

  • struts2-core-x.y.z.jar

  • xwork-core.x.y.z.jar

現(xiàn)在讓我們看看如何可以取消struts.xml文件中可用的配置,并將其替換為注釋。
為了解釋Struts2 中注釋的概念,我們必須重新使用在Struts2 驗(yàn)證框架章節(jié)中所學(xué)習(xí)的驗(yàn)證示例。
這里我們將舉一個(gè)Employee的例子,employee的名字和年齡使用一個(gè)簡單的頁面捕獲,我們將進(jìn)行兩次驗(yàn)證,以確保用戶始終輸入一個(gè)名字,并且年齡應(yīng)在28和65之間。那么,讓我們從示例的JSP主頁面開始。

創(chuàng)建主頁

首先,先開始寫用來收集上面提到的Employee相關(guān)信息的主頁JSP文件index.jsp。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form</title>
</head>

<body>

   <s:form action="empinfo" method="post">
      <s:textfield name="name" label="Name" size="20" />
      <s:textfield name="age" label="Age" size="20" />
      <s:submit name="submit" label="Submit" align="center" />
   </s:form>

</body>
</html>

index.jsp使用的Struts標(biāo)簽我們還沒有涉及到,不過將在標(biāo)簽相關(guān)章節(jié)中學(xué)習(xí)它們?,F(xiàn)在,假設(shè)s:textfield標(biāo)簽印出一個(gè)輸入字段,并且s:submit印出一個(gè)提交按鈕。我們?yōu)槊總€(gè)標(biāo)簽使用了label屬性,即為每個(gè)標(biāo)簽創(chuàng)建標(biāo)記。

創(chuàng)建視圖

我們將使用JSP文件的success.jsp,在定義的action返回SUCCESS的情況下調(diào)用它。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
   Employee Information is captured successfully.
</body>
</html>

創(chuàng)建Action

Action是使用注釋的地方。讓我們重新定義具有注釋的action類Employee,然后如下所示在Employee.java文件中添加一個(gè)名為validate()的方法。需要確保action類擴(kuò)展了ActionSupport類,否則將不會(huì)執(zhí)行validate方法。

package cn.w3cschool.struts2;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.validator.annotations.*;

@Results({
   @Result(name="success", location="/success.jsp"),
   @Result(name="input", location="/index.jsp")
})
public class Employee extends ActionSupport{
   private String name;
   private int age;

   @Action(value="/empinfo")
   public String execute() 
   {
       return SUCCESS;
   }

   @RequiredFieldValidator( message = "The name is required" )
   public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }

   @IntRangeFieldValidator(message = "Age must be in between 28 and 65",
                                      min = "29", max = "65")
   public int getAge() {
       return age;
   }
   public void setAge(int age) {
       this.age = age;
   }
}

我們?cè)谶@個(gè)例子中使用了一些注釋,讓我們逐個(gè)了解一下:

  • 首先是例子中包含的Results注釋,Results注釋是結(jié)果的集合。在這個(gè)注釋集合下,有兩個(gè)結(jié)果注釋。它們包含對(duì)應(yīng)于execute方法結(jié)果的名稱,還包含對(duì)應(yīng)于execute()的返回值所提的視圖位置。

  • 下一個(gè)注釋是Action注釋,這可用于裝飾execute()方法。Action方法還接收一個(gè)值,該值是調(diào)用action的URL。

  • 最后,我們使用了兩個(gè)validation注釋。我們已經(jīng)配置了必填字段驗(yàn)證器上的name字段和整數(shù)范圍驗(yàn)證器上的age字段,此外還為驗(yàn)證指定了自定義的信息。

配置文件

實(shí)際上我們真的不需要struts.xml配置文件,可以刪除這個(gè)文件,直接來查看web.xml文件的內(nèi)容:

<?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/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">

   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
      <init-param>
         <param-name>struts.devMode</param-name>
         <param-value>true</param-value>
      </init-param>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

現(xiàn)在,右鍵單擊項(xiàng)目名稱,然后單擊“Export”> “WAR File”以創(chuàng)建WAR文件。然后在Tomcat的webapps目錄中部署WAR文件。最后,啟動(dòng)Tomcat服務(wù)器并嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp,將顯示以下界面:

電子郵件用戶輸入

先不要輸入任何所需的信息,只點(diǎn)擊“Submit”按鈕。你將看到以下結(jié)果:

錯(cuò)誤

輸入所要求的信息而非錯(cuò)誤類的字段,如名稱為“text”,年齡為30,然后點(diǎn)擊Submit按鈕,可以看到以下界面:

成功

Struts2 注釋類型

Struts2 應(yīng)用程序可以使用Java5注釋來替代XML和Java屬性的配置。你可以查看與不同類別相關(guān)的最重要注釋的列表:Struts2 注釋類型。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)