Struts - 注解

  • 简述

    如前所述,Struts 提供了两种配置形式。传统的方法是使用struts.xml所有配置文件。到目前为止,我们已经在教程中看到了很多这样的例子。另一种配置 Struts 的方法是使用 Java 5 Annotations 特性。使用struts注解,我们可以实现Zero Configuration.
    要开始在您的项目中使用注解,请确保您已在您的项目中包含以下 jar 文件 WebContent/WEB-INF/lib 文件夹 -
    • struts2-convention-plugin-xyzjar
    • asm-xyjar
    • antlr-xyzjar
    • 公共文件上传-xyzjar
    • 公地-io-xyzjar
    • commons-lang-xyjar
    • 公共日志记录xyzjar
    • commons-logging-api-xyjar
    • freemarker-xyzjar
    • javassist-.xy.z.GA
    • 焦点xyzjar
    • struts2-core-xyzjar
    • xwork-core.xyzjar
    现在,让我们看看如何取消 struts.xml 文件并将其替换为注解。
    为了解释 Struts2 中注解的概念,我们必须重新考虑我们在Struts2 验证章节中解释的验证示例。
    在这里,我们将举一个员工的例子,他的姓名和年龄将使用一个简单的页面来捕获,我们将进行两次验证以确保 ÜSER 始终输入姓名,年龄应该在 28 到 65 之间。
    让我们从示例的主 JSP 页面开始。
  • 创建主页

    让我们编写主页面 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 标签,我们还没有涉及,但我们将在标签相关章节中研究它们。但是现在,假设 s:textfield 标签打印一个输入字段,而 s:submit 打印一个提交按钮。我们为每个标签使用了标签属性,为每个标签创建了标签。
  • 创建视图

    我们将使用 JSP 文件 success.jsp 如果定义的操作返回,它将被调用 SUCCESS.
    
    <%@ 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>
    
  • 创建动作

    这是使用注解的地方。让我们重新定义动作类Employee 带注解,然后添加一个方法调用 validate () 如下图所示 Employee.java文件。确保您的操作类扩展了ActionSupport 类,否则您的验证方法将不会被执行。
    
    package com.jc2182.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;
       }
    }
    
    我们在这个例子中使用了很少的注解。让我一一浏览它们 -
    • 首先,我们已经包括了 Results注解。结果注解是结果的集合。
    • 在结果注解下,我们有两个结果注解。结果注解具有name对应于 execute 方法的结果。它们还包含一个位置,该位置应对应于 execute() 的返回值提供哪个视图
    • 下一个注解是 Action注解。这用于装饰 execute() 方法。Action 方法还接受一个值,该值是调用操作的 URL。
    • 最后,我用了两个 validation注解。我已经配置了所需的字段验证器name 字段和整数范围验证器 age场地。我还为验证指定了自定义消息。
  • 配置文件

    我们真的不需要 struts.xml 配置文件,所以让我们删除这个文件,让我们检查一下 web.xml 文件 -
    
    <?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>
    
    现在,右键单击项目名称并单击 Export > WAR File创建一个战争文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动Tomcat服务器并尝试访问URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. 这将产生以下屏幕 -
    电子邮件用户输入
    现在不要输入任何必需的信息,只需单击 Submit按钮。您将看到以下结果 -
    错误
    输入必填信息但输入错误的发件人字段,让我们说姓名为“test”,年龄为30,最后点击 Submit按钮。您将看到以下结果 -
    成功
  • Struts 2 注解类型

    Struts 2 应用程序可以使用 Java 5 注解作为 XML 和 Java 属性配置的替代方法。