Struts2教程

Posted C语言三人行+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2教程相关的知识,希望对你有一定的参考价值。

Struts2是基于MVC设计模式的流行和成熟的Web应用程序框架。Struts2并不只是Struts 1下一个版本,但它是一个完全重写的Struts架构。

WebWork框架开始了与Struts框架为基础,其目标是建立在Struts的Web开发更容易为开发人员提供了加强和改进的框架。

一段时间后,WebWork框架和Struts社区联手打造著名的Struts2框架。

Struts 2 框架特性:

这里有一些伟大的特性,可能会迫使你考虑使用Struts2:

  1. POJO形式和POJO动作 - 已经摆脱了Struts2的动作表单的Struts框架的一个组成部分。Struts2可以使用任何的POJO接收的形式输入。同样的,你现在可以看到任何POJO的Action类。

  2. Tag支持 - Struts2的形式提高了标签的新标签让开发人员写更少的代码。

  3. AJAX支持- Struts2中已经认识到了Web2.0技术,并整合到产品中AJAX支持创建AJAX的标签,该功能非常相似的标准Struts2的标签。

  4. 容易整合 - 与其他框架如Spring,Tiles和SiteMesh的整合是现在更容易与各种集成Struts2。

  5. 模板支持 - 支持生成使用模板。

  6. 插件支持 - 核心Struts2行为,可以加强和扩大使用插件。大量的插件可供Struts2。

  7. 概要分析- Struts2的提供集成的配置,调试和分析应用程序。此外,Struts还提供了内置调试工具的帮助下,集成调试。

  8. 标签修改容易 - 在Struts2标签标记,可以调整使用FreeMarker模板。这并不需要JSP或Java知识。基本的html,XML和CSS知识是不够的修改的标签。

  9. 提升更少的配置 - Struts2的促进更少的配置与用于各种设置的帮助下,使用默认值。你没有的东西,除非它偏离由Struts2的默认设置的配置。

Struts 2 环境配置:

我们的首要任务是要得到一个最小的Struts2中运行的应用程序。本章将指导您如何使用Struts2编写一个应用程序。我假设你已经在你的机器上安装JDK(5+),Tomcat和Eclipse。如果你没有安装这些组件,请执行以下步骤:

Step 1 - 设置JAVA开发工具包 (JDK):


从Oracle的Java站点:Java SE下载,您可以下载最新版本的SDK。您会发现说明安装JDK下载的文件,按照给定的说明来安装和配置的设置。最后,设置PATH和JAVA_HOME环境变量指向的目录,其中包含java和javac,通常分别为:java_install_dir/bin和java_install_dir。

如果运行的是Windows SDK安装在c:\jdk1.5.0_20,你就必须把你的C:\autoexec.bat文件中的以下行。

set PATH=C:\jdk1.5.0_20\bin;%PATH%
set JAVA_HOME=C:\jdk1.5.0_20

另外,在Windows NT/2000/XP中,您也可以右键单击“我的电脑”,选择“属性”,再先进,环境变量。然后,您会更新PATH的值,然后按“确定”按钮。
在Unix(Solaris和Linux等),如果SDK安装在/usr/local/jdk1.5.0_20,你使用的是C shell,把下面的到.cshrc文件写入。

setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.5.0_20

另外,如果你使用像Borland的JBuilder,Eclipse的IntelliJ IDEA或Sun ONE Studio集成开发环境(IDE),编译并运行一个简单的程序,以确认该IDE知道在哪里安装Java,否则不正确的设置为给定的文档IDE。

Step 2 - 安装Apache Tomcat:


您可以下载最新版本Tomcat http://tomcat.apache.org/。一旦下载安装,解压缩的二进制分发到一个方便的位置。例如,Window下在C:\Apache或/usr/local/apache-tomcat-6.0.33 tomcat-6.0.33 Linux/Unix和创建CATALINA_HOME环境变量指向这些位置上。Tomcat可以开始执行下面的命令在Windows机器上,可以简单地双击的startup.bat

 %CATALINA_HOME%\bin\startup.bat
 or
 C:\apache-tomcat-6.0.33\bin\startup.bat

Tomcat可以开始UNIX(Solaris和Linux等)的机器上执行下面的命令:

$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-6.0.33/bin/startup.sh

成功启动后,默认包含在Tomcat中的Web应用程序将可以通过访问输入http://localhost:8080/。如果一切顺利,那么它应该显示以下结果:

有关配置和运行Tomcat的进一步信息包含在文档中,可以找到这里,以及在Tomcat Web站点:http://tomcat.apache.org
停止Tomcat既可以通过Windows机器上执行下面的命令:

%CATALINA_HOME%\bin\shutdown
or

C:\apache-tomcat-5.5.29\bin\shutdown

Tomcat可以停止执行下面命令在Unix(Solaris和Linux等)机器:

$CATALINA_HOME/bin/shutdown.sh
or
/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh

Step 3 - 安装Eclipse (IDE)

在本教程中所有的例子已经写入使用Eclipse IDE。所以,我建议你有你的机器上安装最新版本Eclipse。

要安装Eclipse的dDownload的最新的Eclipse二进制文件http://www.eclipse.org/downloads/。一旦你下载安装,解压缩的二进制分发到一个方便的位置。例如,在C:\eclipse上Eclipse,或/usr/local/eclipse在Linux/Unix终于适当设置PATH变量。

Eclipse可以启动Windows机器上执行下面的命令,或者你可以简单地双击的eclipse.exe

 %C:\eclipse\eclipse.exe

Eclipse可以启动UNIX(Solaris和Linux等)的机器上执行下面的命令:

$/usr/local/eclipse/eclipse

成功启动后,如果一切正常,那么它应显示以下结果:

Struts2教程

Step 4 - 安装Struts2 类库

现在,如果一切正常,那么你可以继续设置您的Struts 2框架。以下是简单的步骤,下载并安装在机器上Struts2。

  • 请选择是否要安装Hibernate在Windows或Unix,然后继续进行下一个步骤下载.zip文件窗口.tz文件为Unix。

  • 下载最新版本的Struts2的二进制文件: http://struts.apache.org/download.cgi.

  • 在写这篇教程的时候,我下载的是struts-2.0.14-all.zip,当解压下载的文件时,它有C:\struts-2.2.3如下的目录结构内。

Struts2教程

第二个步骤是解压zip文件中的任何位置,我下载和提取struts-2.2.3-all.zip在c:\文件夹中,我的Windows 7机器上的所有jar文件复制到c:\struts-2.20.3\lib中。确保正确设置CLASSPATH变量,否则将出现错误问题,同时运行您的应用程序。

Struts 2 体系结构:

从高层次来看,Struts2是一个上拉MVC(MVC2)框架。在Struts2的Model-View-Controller模式实现以下五个核心组件:

  1. Actions

  2. Interceptors

  3. Value Stack / OGNL

  4. Results / Result types

  5. View technologies

Struts 2的是从传统的MVC框架,在该框架中的作用的模式,而不是控制器的作用略有不同,虽然有一些重叠。

Struts2教程

上图描述了Struts2的高层体系结构模型,视图和控制器。一个Struts2的调度Servlet过滤器和拦截器与控制器实现,该模型实现的动作和视图的组合的结果类型和结果。值栈和OGNL提供了共同点,其他部件之间的连接和集成。

除了从上述组分中,将有一个特定的信息涉及到配置。为Web应用程序的配置以及配置动作,拦截器,结果等。
这是Struts的MVC模式的体系结构概述。我们将在随后的章节中通过每个组件更详细地熟悉和理解

 

Struts 2 Hello World 实例:

从中学到了Struts 2的架构,当你点击一个超链接或提交一个Struts2的Web应用程序的HTML表单中,输入被发送到一个Java类操作的控制器,收集。执行该操作后,结果选择了一个资源来呈现的响应。资源通常是一个JSP,但它也可以是一个PDF文件,Excel电子表格,或Java小应用程序窗口。

假设你已经建立您的开发环境。现在,让我们继续建立我们的第一个Hello World struts2的项目。这个项目的目的是建立一个Web应用程序,收集用户的username,并显示“Hello World”,后面的用户名。我们将创建任何Struts2项目的四个组成部分:

SN 组件&描述
1 Action
Create an action class which will contain complete business logic and conrol the interaction between the user, the model, and the view.
2 Interceptors
Create interceptors if required, or use existing interceptors. This is part of Controller.
3 View
Create a JSPs to interact with the user to take input and to present the final messages.
4 Configuration Files
Create configuration files to couple the Action, View and Controllers. These files are struts.xml, web.xml, struts.properties.

我要使用Eclipse IDE,所以下创建一个动态Web项目所需的所有组件。因此,让我们开始创建动态Web项目。

创建一个动态Web项目:

开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕:

Struts2教程

选择在屏幕上的所有默认选项,最后检查生成的web.xml部署描述符选项。这将创建一个动态Web项目在Eclipse中。现在去窗口>显示视图>项目资源管理器,你会看到你的项目窗口中的东西如下:

Struts2教程

现在复制以下文件从Struts 2的lib文件夹C:\struts-2.2.3\lib添加到我们的工程WEB-INF\lib文件夹中。所以这个可以简单地拖动和丢弃所有的WEB-INF\lib文件夹中的下列文件到。

  • 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

创建动作action类:

Action类是Struts 2应用程序的关键,我们实现了大部分Action类中的业务逻辑。因此,让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2并有下面的内容。

Action类来响应用户的操作,当用户点击一个URL。 Action类中的一个或多个方法被执行,并返回一个字符串结果。基于结果的价值,一个特定的JSP页面的呈现方式。

package com.yiibai.struts2;

public class HelloWorldAction{
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

这是一个非常简单的类,一个名为“name”属性。我们有标准“名称”属性getter和setter方法,返回字符串“SUCCESS”执行方法。
Struts2框架的HelloWorldAction类将创建一个对象并调用execute方法在响应用户的操作。你把业务逻辑里面execute方法,并最终返回的字符串常量。简单地说为每个URL执行一个动作类,或者你可以直接使用这个类的名称作为操作名,也可以映射到一些其他的名称使用struts.xml文件,如下图所示。

 

创建一个视图

我们需要一个JSP提交最后的消息,这个页面会被称为Struts 2框架中预定义的动作时,会发生此映射将在struts.xml文件中定义的。所以,让我们创建下面的JSP文件的helloWorld.jsp,在WebContent文件夹在您的Eclipse项目。要做到这一点,右键单击WebContent文件夹中的项目资源管理器,然后选择“新建”>“JSP文件。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
   Hello World, <s:property value="name"/>
</body>
</html>

taglib指令告诉Servlet容器中,这个页面将使用Struts2标签,这些标签之前,将通过s:property标签中显示的动作类的属性名称>HelloWorldAction类的getName()方法返回的值。

创建主页面:

我们还需要在WebContent文件夹中创建的index.jsp。该文件将作为初始动作URL,用户可以直接点击告诉Struts 2框架调用的HelloWorldAction类定义的方法,使HelloWorld.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>Hello World</title>
</head>
<body>
   <h1>Hello World From Struts2</h1>
   <form action="hello">
      <label for="name">Please enter your name</label><br/>
      <input type="text" name="name"/>
      <input type="submit" value="Say Hello"/>
   </form>
</body>
</html>

hello操作定义在上面的视图文件将被映射到的HelloWorldAction类和它的执行方法使用struts.xml文件。当用户点击“提交”按钮,它会导致Struts2框架运行执行方法定义在其中,HelloWorldAction类和方法的返回值的基础上,将相应的视图选择和呈现的一种反应。

配置文件

我们需要一个映射,以配合URL,HelloWorldAction类(模型),HelloWorld.jsp(图)。映射告诉Struts 2框架的类将响应用户的操作(URL),这一类的方法将被执行,什么视图来显示字符串结果的基础上,该方法返回。

因此,让我们创建一个名为struts.xml中。由于Struts2要求struts.xml中存在的类文件夹中。因此,创建的WebContent/WEB-INF/classes文件夹下struts.xml文件。Eclipse不会创建“类”文件夹下,所以你需要自己做。要做到这一点,在项目浏览器和WEB-INF文件夹上点击右键,选择“新建”>“文件夹”。你的struts.xml中应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">
     
      <action name="hello" 
            class="com.yiibai.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

上面的配置文件的几句话。在这里,我们设置常数struts.devModeto为true,因为我们需要看到一些有用的日志消息。我们再定义一个名为HelloWorld包。创建一个包是有用的,当你想要创建新的动作。在我们的例子中,我们的行动命名为“hello”相应的URL/hello.action和备份HelloWorldAction.class。执行方法HelloWorldAction.class方法被调用时运行URL/hello.action。如果结果execute方法返回“success”,那么我们就用户HelloWorld.jsp。

下一步是创建一个web.xml文件,该文件的任何请求的入口点到Struts2。Struts2的应用程序的入口点,将是一个部署描述符(web.xml)中定义的过滤器。因此,我们将定义在web.xml中一个条目oforg.apache.struts2.dispatcher.FilterDispatcher类。WebContent下WEB-INF文件夹下需要创建web.xml文件。 Eclipse已经在创建项目创建了一个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>
   </filter>

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

我们已经指定index.jsp是我们欢迎(welcome)文件。我们已经配置Struts2过滤器上运行的所有URL(即,任何URL匹配模式/*)

启用详细的日志:

可以启用日志记录功能齐全,工作时用Struts 2的WEB-INF/classes文件夹下创建logging.properties文件。请在属性文件中的以下两行:

 org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
                              java.util.logging.ConsoleHandler

默认logging.properties指定ConsoleHandler的路由记录到stdout或FileHandler。一个处理程序的日志级别阈值可以设置使用ERROR,WARNING,INFO,CONFIG,FINE,FINER,FINEST或全部。
就是这样。我们已经准备好来运行我们的Hello World应用程序使用Struts 2框架。

 

执行应用程序

右键点击项目名称,并单击“导出”> WAR文件创建一个WAR文件。然后,这WAR部署在Tomcat的webapps目录下。最后,启动Tomcat服务器,并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给你以下画面:

Struts2教程

输入值为"Struts2",并提交页面。您应该看到下一页

Struts2教程

请注意,您可以定义索引动作在struts.xml文件,在这种情况下,你可以调用索引页http://localhost:8080/HelloWorldStruts2/index.action。检查下面你可以定义索引的行动:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="index">
            <result >/index.jsp</result>
      </action>

      <action name="hello" 
            class="com.yiibai.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

Struts 2 配置文件

本章将带你通过一个Struts2应用程序所需的基本配置。在这里,我们将看到在一些重要的配置文件,将配置文件:web.xml,struts.xml中,struts-config.xml和struts.properties
老实说你能活下来使用web.xml和struts.xml中的配置文件,并在前面的章节中,你已经看到我们的例子中使用这两个文件的工作,但让我解释一下其他文件,以及你的知识。

 

web.xml文件:

在web.xml配置文件是一个的J2EE配置文件,决定如何处理HTTP请求servlet容器的元素。它不是严格意义上的Struts2的配置文件,但它是一个文件,需要配置Struts2的工作。

正如前面所讨论的,此文件提供任何Web应用程序的入口点。Struts2的应用程序的入口点,将是一个部署描述符(web.xml)中定义的过滤器。因此,我们将FilterDispatcher排类在web.xml中定义一个条目。需要创建文件夹的WebContent/ WEB-INF下的web.xml文件。

这是第一个配置文件,您将需要配置,如果你开始没有产生它(例如Eclipse或者Maven2的)模板或工具的帮助下。以下是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>
   </filter>

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

</web-app>

需要注意的是,我们的Struts 2的过滤器映射到/*/*。行动,而不是这意味着所有的URL将被解析的支柱过滤器。我们将介绍时,我们会通过的“注解”一章。

struts.xml文件:

struts.xml文件中包含的配置信息,你将修改所采取的措施的开发。这个文件可以被用来覆盖默认设置的应用程序,例如struts.devMode=false和其他设置中定义的属性文件。这个文件可以创建文件夹下的WEB-INF/classes。

让我们一起来看看我们在struts.xml文件中创建Hello World的例子在前面的章节中解释。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">
     
      <action name="hello" 
            class="com.yiibai.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
      <-- more actions can be listed here -->

   </package>
   <-- more packages can be listed here -->

</struts>

首先要注意的是DOCTYPE。所有的Struts配置文件中需要有正确的DOCTYPE,在我们的小例子所示。<struts>是根标记的元素,我们声明使用不同的包<package>标签。其中,<package>允许分离和模块化的配置。这是非常有用的,当你有一个大的项目,项目被划分成不同的模块。

再说了,如果项目有三个域名 - business_applicaiton,customer_application和staff_application,可以创建三个包,在适当的包装和存储相关的行动。包装标签具有以下属性:

属性 描述
name (required) The unique identifier for the package
extends Which package does this package extend from? By default, we use struts-default as the base package.
abstract If marked true, the package is not available for end user consumption.
namesapce Unique namespace for the actions

常量标签name和value属性将被用来覆盖default.properties中定义的属性,就像我们刚刚成立struts.devModeproperty。设置struts.devMode属性,让我们看到了更多的调试信息,日志文件中。

我们定义动作标记对应的每一个URL,我们想访问我们定义了一个类的execute()方法,将访问时,我们将访问相应的URL。
结果确定什么被返回到浏览器的一个动作后执行。从操作返回的字符串应该是一个结果的名称。结果如上配置的每次动作,或作为一个“全局”的结果,在包中的每一个动作可。结果有可选的名称和类型的属性。默认名称值是“成功”。

 

随着时间的推移,struts.xml文件可以做大,打破它包的模块化是一种方式,但Struts提供了另一种模块化的struts.xml文件。你可以将档案分割成多个XML文件,并将其导入以下方式。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
     <include file="my-struts1.xml"/>
     <include file="my-struts2.xml"/>
</struts>

我们还没有涉及到的其他配置文件是struts-default.xml中。这个文件包含了Struts标准配置设置,在你的项目的99.99%就不会碰这些设置。出于这个原因,我们不打算在这个文件太多的细节。如果有兴趣,不妨看看在default.properties文件中struts2的核心-2.2.3.jar文件。

struts-config.xml 文件:

struts-config.xml配置文件是一个在Web客户端组件的视图和模型之间的联系,但你的项目的99.99就不会碰这些设置%。基本的配置文件包含以下主要内容:

SN Interceptor & 描述
1 struts-config
This is the root node of the configuration file.
2 form-beans
This is where you map your ActionForm subclass to a name. You use this name as an alias for your ActionForm throughout the rest of the struts-config.xml file, and even on your JSP pages.
3 global forwards
This section maps a page on your webapp to a name. You can use this name to refer to the actual page. This avoids hardcoding URLs on your web pages.
4 action-mappings
This is where you declare form handlers and they are also known as action mappings.
5 controller
This section configures Struts internals and rarely used in practical situations.
6 plug-in
This section tells Struts where to find your properties files, which contain prompts and error messages

下面是示例struts-config.xml文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

   <!-- ========== Form Bean Definitions ============ -->
   <form-beans>
      <form-bean name="login" type="test.struts.LoginForm" />
   </form-beans>

   <!-- ========== Global Forward Definitions ========= -->
   <global-forwards>
   </global-forwards>

   <!-- ========== Action Mapping Definitions ======== -->
   <action-mappings>
      <action
         path="/login"
         type="test.struts.LoginAction" >

         <forward name="valid" path="/jsp/MainMenu.jsp" />
         <forward name="invalid" path="/jsp/LoginView.jsp" />
      </action>
   </action-mappings>

   <!-- ========== Controller Definitions ======== -->
   <controller 
      contentType="text/html;charset=UTF-8"
      debug="3"
      maxFileSize="1.618M"
      locale="true"
      nocache="true"/>

</struts-config>

struts-config.xml文件的更多详细信息,请检查你的Struts文档。

struts.properties文件

此配置文件提供了一种机制来更改默认行为的框架。其实所有的struts.propertiesconfiguration文件中包含的属性也可以被配置在web.xml中使用的init-param,以及在struts.xml中的配置文件中使用恒定的标签。你可以创建此文件下folderWEB-INF/classes。

在这个文件中配置的值将覆盖默认值配置在default.properties这是包含在Struts2-core-xyzjar分布。有几个可能会考虑改变使用struts.properties文件的属性:

### When set to true, Struts will act much more friendly for developers
struts.devMode = true

### Enables reloading of internationalization files
struts.i18n.reload = true

### Enables reloading of XML configuration files
struts.configuration.xml.reload = true

### Sets the port that the server is run on
struts.url.http.port = 8080

任何与井号(#)开头的行会被假定为注释和由Struts2将被忽略。

Struts 2 动作Actions:

动作是Struts2框架的核心,因为它们是任何MVC(模型 - 视图 - 控制器)框架。每一个URL映射到一个具体的行动,它提供了处理用户的请求提供服务所需的逻辑。
但动作也用来在另外两个重要的能力。首先,动作从请求中的数据的传输,通过到视图中起着重要的作用,无论是其一个JSP的或其它类型的结果。二,行动要协助的框架中确定的结果应该渲染视图将返回响应的要求。

 

创建动作-Action:

在Struts2的行动,唯一的要求是,必须有一个无参数的方法,该方法返回一个字符串或结果的对象,必须是一个POJO。如果不带参数的方法不指定,则默认行为是使用execute()方法。

您也可以选择扩展ActionSupport类实现接口,包括操作界面。操作界面如下:

public interface Action {
   public static final String SUCCESS = "success";
   public static final String NONE = "none";
   public static final String ERROR = "error";
   public static final String INPUT = "input";
   public static final String LOGIN = "login";
   public String execute() throws Exception;
}

让我们一起来看看在动作方法中的Hello World示例:

package com.yiibai.struts2;

public class HelloWorldAction{
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

为了说明这一点的操作方法控制视图,让我们作出以下更改execute()方法和扩展的类ActionSupport如下:

package com.yiibai.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
   private String name;

   public String execute() throws Exception {
      if ("SECRET".equals(name))
      {
         return SUCCESS;
      }else{
         return ERROR;  
      }
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

在这个例子中,我们在execute方法中有一些逻辑,看的name属性。如果属性等于“不能说的秘密”的字符串,返回成功的结果,否则返回错误的结果。因为我们已经扩展了ActionSupport,所以我们可以使用字符串常量的成功和错误。现在,让我们修改我们的struts.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
   <struts>
      <constant name="struts.devMode" value="true" />
      <package name="helloworld" extends="struts-default">
         <action name="hello" 
            class="com.yiibai.struts2.HelloWorldAction"
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
            <result name="error">/AccessDenied.jsp</result>
         </action>
      </package>
</struts>

创建一个视图

让我们创建下面的JSP文件的helloWorld.jsp,在WebContent文件夹在你的eclipse项目。要做到这一点,右键单击WebContent文件夹中的项目资源管理器,然后选择“新建”>“JSP文件。该文件将被要求的情况下,返回的结果是success,这是一个字符串常量“成功”的定义在Action接口:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
   Hello World, <s:property value="name"/>
</body>
</html>

以下是文件,该文件将被调用的框架的情况下作用的结果是等于字符串常量“ERROR”的错误,这是。以下内容的AccessDenied.jsp的

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Access Denied</title>
</head>
<body>
   You are not authorized to view this page.
</body>
</html>

我们还需要在WebContent文件夹中创建的index.jsp。该文件将作为初始动作URL,用户可以直接点击告诉Struts 2框架,以调用execute方法HelloWorldAction类,并呈现HelloWorld.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>Hello World</title>
</head>
<body>
   <h1>Hello World From Struts2</h1>
   <form action="hello">
      <label for="name">Please enter your name</label><br/>
      <input type="text" name="name"/>
      <input type="submit" value="Say Hello"/>
   </form>
</body>
</html>

就是这样,有没有需要改变的web.xml文件,让我们使用同一个web.xml举例章节,我们已经创建了。现在,我们已经准备好来运行我们的Hello World应用程序使用Struts 2框架。

执行应用程序

右键点击项目名称,并单击“导出”> WAR文件创建一个WAR文件。然后这WAR部署在Tomcat的webapps目录下。最后启动Tomcat服务器,并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给你以下画面:

Struts2教程

让我们一起进入一个“SECRET”的话,你应该看到下面的页面:

现在输入任何文字以外的“SECRET”,你应该看到下面的页面:

创建多个动作:

我们通常会定义一个以上的行动,以处理不同的请求,向用户提供不同的URL,因此,你可以定义不同的类定义如下:

package com.yiibai.struts2;
import com.opensymphony.xwork2.ActionSupport;

   class MyAction extends ActionSupport{
      public static String GOOD = SUCCESS;
      public static String BAD = ERROR;
   }

   public class HelloWorld extends ActionSupport{
      ...
      public String execute()
      {
         if ("SECRET".equals(name)) return MyAction.GOOD;
         return MyAction.BAD;
      }
      ...
   }

   public class SomeOtherClass extends ActionSupport{
      ...
      public String execute()
      {
         return MyAction.GOOD;
      }
      ...
   }

您将在struts.xml文件中配置这些操作如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
struts>
 <constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">
      <action name="hello" 
         class="com.yiibai.struts2.HelloWorld" 
         method="execute">
         <result name="success">/HelloWorld.jsp</result>
         <result name="error">/AccessDenied.jsp</result>
      </action>
      <action name="something" 
         class="com.yiibai.struts2.SomeOtherClass" 
         method="execute">
         <result name="success">/Something.jsp</result>
         <result name="error">/AccessDenied.jsp</result>
      </action>
   </package>
</struts>

在上述假设的例子中,你可以看到操作的结果被复制SUCCESS 和ERROR 。为了解决这个问题,我们建议您创建一个类,它包含的结果的结果。

Struts 2 拦截器:

拦截器是作为Servlet过滤器或JDK的Proxy类的概念上是相同的。拦截器允许横切功能单独实现动作以及框架。想要使用拦截器,可以实现如下:

  • Providing preprocessing logic before the action is called.

  • Providing postprocessing logic after the action is called.

  • Catching exceptions so that alternate processing can be performed.

使用拦截器在Struts2框架提供的功能很多,例如包括异常处理,文件上传,生命周期回调和验证等。事实上,Struts2的基地很多其拦截功能上,这不是不可能有7或8每个动作拦截分配。

                

 


以上是关于Struts2教程的主要内容,如果未能解决你的问题,请参考以下文章

struts2 官方系列教程三:使用struts2 标签 tag

VIM 代码片段插件 ultisnips 使用教程

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

Maven搭建SSH(Struts2+Spring+Hibernate)框架入门教程_2

拓薪教育-struts2视频教程-任亮

struts2官方 中文教程 系列十:Form标签