Struts2入门

2018-05-03作者:许勇, 等编著编辑:Solomon

Struts 2 入门


Struts 2是Struts 1的下一代产品,是在Struts 1和WebWork的技术基础上进行了合并。 其全新的Struts 2体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心, 采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与 Servlet API 完全脱离开,所以 Struts 2 可以理解为 WebWork 的更新产品。因为 Struts 2 和 Struts 1 无任何关系,但是相对于 WebWork,Struts 2 只有很小的变化。介绍 Struts 2 的发展历程,接着介绍了 Struts 2 与其他框架相比的优势所在,然 后介绍了如何配置 Struts 2 的运行环境以及使用 Struts 2 进行 Web 开发的基本流程和步骤,最 后详细介绍了 Struts 2 中的各个配置文件的作用及配置。


1.1    Struts 2 发展历程

Struts 2与Struts 1相比,确实有很多革命性的改变,但它并不是新发布的新框架,而是在另一个赫赫有名的框架 WebWork 基础上发展起来的,它吸收了 Struts 1 和 WebWork 两者的优势,因此,Struts 2 是一个非常优秀的 Web 框架。但是 Struts 2 并不是一个完全独立的技术,而是建立在其他 Web 技术之上的一个 MVC 框架,如果脱离了这些技术,Struts 2 框架也就无从谈起。因此,本节首先介绍 MVC 架构,然后再对 Struts 2 进行概述。


1.1.1    MVC 设计模式

MVC(Model-View-Controller,模型-视图-控制器)用于表示一种软件架构模式。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一 部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化使程序结构更加直观。MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。MVC 应用程序被分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。


1.1.2    Struts 1 简介

Struts 1 是一个为开发基于 MVC 模式的应用架构的开源框架,是利用 Java Servlet 和 JSP 构建Web应用的一项非常有用的技术。Struts 1把Servlet、JSP、自定义标签和信息资源整合到一个统一的框架中,开发人员利用其进行开发时,不用再自己编码实现全套 MVC 模式,极大的节省了开发时间。


1.Struts 2 的主要组成部分

Struts 1 框架主要有以下三部分组成:

    (1)模型(Model)部分。从本质上来说,Struts 1 中的 Model 是一个 Action 类,开发者通过它实现商业逻辑。同时,用户请求通过控制器(Controller)向 Action 的转发过程,基于 struts-config.xml 文件描述的配置信息。 

    (2)视图(View)部分。Struts 1 中的 View 同样采用 JSP 实现。不过,Struts 1 提供了丰富的标签库,借助这些标签库,可以最大限度地减少 Java 脚本的使用。

    (3)控制器(Controller)部分。Struts 1的Controller本质上是一个Servlet,由如下两部 分组成:

1、系统核心控制器。由 Struts 1 框架提供,就是系统中的 ActionServlet。它继承自 HttpServlet 类,因此可以配置成一个标准的 Servlet,该控制器负责拦截所有 HTTP 请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要调用业务逻辑控制器,则将请求转发给 Action 处理,否则直接转向请求的 JSP 页面。

2、业务逻辑控制器。不是由 Struts 1 框架提供的,而是用户自己实现的 Action 实例。业务逻辑控制器负责处理用户请求,但业务逻辑控制器本身并不具有处理能力,而是调用 Model 来完成处理。


当客户端向服务器端发送请求时,请求首先被 Struts 1 的核心控制器 ActionServlet 拦截,ActionServlet 根据请求决定需要调用哪个业务逻辑控制器 Action 来处理客户端请求。Action 本身并没有处理能力,只是进行业务逻辑控制,它还需要调用响应的模型来完成处理。当处理完客户端请求后,Action 就将处理结果通过 JSP 页面呈现给用户。


2.Struts 1 的优点

Struts 1 主要有如下几个优点:

(1)实现 MVC 模式。Struts 1 是一个基于 MVC 的优秀框架。实现 MVC 模式,可以使应用结构更加清晰。

(2)丰富的标签库。Struts 1 有丰富的标签库,使用这些标签库,可以让页面的开发效率大大提高。

(3)页面导航。通过一个配置文件,就可以把握整个系统各部分之间的联系,有利于后期的维护。


3.Struts 1 处理过程

在 Struts 1 应用中,Web 应用启动时加载并初始化 ActionServlet,ActionServlet 从 struts-congfig.xml 文件中读取配置信息,把它们存放到各种配置对象中。启动后的应用处理过程如下:

(1)通过客户端页面与用户进行交互,将页面提交的数据封装到 ActionForm 中。

(2)通过请求路径查找 struts-config.xml 配置文件中 Action 的配置,找到并调用对应的Action。

(3)在 Action 中调用业务逻辑方法处理用户请求。

(4)查找 ActionMapping,并找到正确的 JSP 页面进行转发,返回给客户端。


1.1.3    WebWork 概述

WebWork 是一个基于 MVC 架构模式的 J2EE Web 框架。现在的 WebWork 已经被拆分为 XWork 和 WebWork 2 两个项目。


其中: (1)XWork:该项目简洁、灵活、功能强大,是一个标准的 Command 模式实现,并且完全从 Web 层脱离出来。XWork 提供了很多核心功能: 前端拦截器(Interceptor)、运行时表单属性验证、类型转换、强大的表达式语言 OGNL(ObjectGraph Notation Language)和 IoC(Inversion of Control)容器等。


(2)WebWork 2:该项目建立在 XWork 之上,处理 HTTP 的响应和请求。WebWork 2 使用ServletDispatcher 将 HTTP 请求变成 Action、Session、Application 范围的映射和 Request 请 求参数映射。WebWork 2 支持多视图显示,视图部分可以使用 JSP、Velocity、FreeMarker、Jasper Reports 和 XML 等。


相对于 Struts 1 的局限性,WebWork 则更加优秀,主要表现在如下几个方面: (1)WebWork:支持更多的表现层技术,如 Free Marker、Velocity 以及 XSLT 等,有广泛

的适应性。

(2)WebWork:采用了一种更加松耦合的设计,使 Action 不再与 Servlet 耦合。WebWork

的 Action 更像一个普通的 Java 对象,该控制器代码中没有耦合任何 Servlet API,这也使单元 测试变得更加方便。

(3)Action:无须与 WebWork 耦合,提高了代码重用率。


1.1.4    Struts 2 简介

Struts 2 以 WebWork 为核心,因此采用的是 WebWork 的设计理念。Struts 2 是一个优秀的, 可扩展的企业级Java WEB应用程序框架。由于它是WebWork的升级,所以它并不是一个全新的框架,它吸收了Struts 1和WebWork两者的优势,从而使其稳定性、性能等各方面都有了很好的保证。

通过上面的介绍不难看出,Struts 2 已经有了很大的改进,下面比较 Struts 2 与 Struts 1 的

特性。通过比较这些特性能够很容易地看出 Struts 2 的优势和一些新特性


1.2 配置 Struts 2 运行环境

要使用 Struts 2 框架进行 Web 开发或者运行 Struts 2 的程序就必须先配置好 Struts 2 的运

从 Java 的官方网站:http://www.oracle.com 中下载最新版本的 JDK,目前最新版本为 JDK 1.7。JDK 的安装很简单,这里不再多述。在安装和配置好 JDK 之后,需要配置 JDK 的环境 变量,然后就可以安装Java Web服务器了,这里选择开源的Tomcat作为服务器。Tomcat服 务器的官方网址为 http://tomcat.apache.org/,该网站提供了 Tomcat 的下载链接,目前最新版本 是 Tomcat 7.0。


接着从 Struts 2 的官网 http://struts.apache.org/中下载 Struts 2 框架,目前最新版本是 Struts 2.2.3。下载时有多个选项可供选择,本书选择 Full Distribution 选项,即 Struts 2 的完整版。下载完毕后,将下载的压缩包进行解压,解压后的目录中主要有如下几个文件夹: 

(1)apps:该文件夹中存放 Struts 2 的示例程序。

(2)docs:该文件夹中存放 Struts 2 的相关文档。

(3)lib:该文件夹中存放 Struts 2 的核心类库,以及第三方的插件类库。 (4)src:该文件夹中存放Struts 2 框架的全部源代码。安装Struts 2非常简单,只须要将Struts 2框架目录中lib文件夹下的9个JAR文件复制 到 Web 应用中 WEB-INF/lib 目录下即可。这 9 个 JAR 文件如下:

(1)struts2-core-x.x.x.jar:Struts 2 的核心库。

(2)xwork-x.x.x.jar:WebWork 的核心库,需要它的支持。 

(3)commons-fileupload-x.x.x.jar:文件上传组件,2.1.6 版本后必须加入此文件。 

(4)commons-io-x.x.x.jar:可以看成是 java.io 的扩展。 

(5)commons-lang-x.x.jar:包含了一些数据类型工具类,是 java.lang.*的扩展,必须使用的JAR包。

(6)commons-logging-x.x.x.jar:日志管理。

(7)ognl-x.x.x.jar:OGNL 表达式语言,Struts 2 支持该 EL。 

(8)freemarker-x.x.x.jar:表现层框架,定义了 Struts 2 的可视组件主题。 

(9)javassist-x.x.x.GA.jar:Javassist 字节码解释器。

至此Struts 2框架就被安装到Web项目中,然后就可以开始应用Struts 2框架进行Web开发了。


1.3    Struts 2 第一个应用示例

下面使用 MyEclipse 开发工具创建一个简单的 Struts 2 应用。本示例实现了一个简单的登录功能,用户打开一个登录页面输入用户名和密码,如果输入的信息正确就可以进入到欢迎 界面,否则就重新回到登录页面。通过该示例初步简单地介绍 Struts2 框架的使用。

在MyEclipse开发工具中新建Web应用ch1,并将Struts 2.2.3必需的九个JAR文件复制 到 WEB-INF/lib 目录中。


1.web.xml 配置文件

在 web.xml 文件中配置 Struts 2 的核心控制器,用来拦截客户端请求,并将请求转发给相

应的 Action 类来处理,代码如下:

<!-- 配置 Struts 2 框架的核心 Filter --> <filter>

<!-- 配置 Struts 2 核心 Filter 的名字 -->

<filter-name>struts2</filter-name>

<!-- 配置 Struts 2 核心 Filter 的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>

     <init-param>

         <param-name>struts.i18n.encoding</param-name>

         <param-value>UTF-8</param-value>

     </init-param>

</filter>

<!-- 配置 Filter 拦截的 URL --> <filter-mapping>

<!-- 过滤器拦截名称 --> <filter-name>struts2</filter-name>

<!-- 配置 Struts 2 的核心 FilterDispatcher 拦截所有.action 用户的请求 --> <url-pattern>*.action</url-pattern>

</filter-mapping>

<filter-mapping>

     <filter-name>struts2</filter-name>

<url-pattern>*.jsp</url-pattern> </filter-mapping>

如上述代码,当启动 Tomcat 时,系统将加载 StrutsPrepareAndExecuteFilter,从而会加载 应用 Struts 2 框架。


2.创建视图页面 login.jsp

在 WebRoot 目录下创建视图页面 login.jsp,在该页面中使用 Struts 2 中的表单标签创建一

个表单域,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@taglib prefix="s" uri="/struts-tags" %>

<s:form action="login" method="post" namespace="/">

<s:textfield name="username" label="用户名" cssStyle="width:160px;height:26px;"/> <s:password name="password" label="密码" cssStyle="width:160px;height:26px;"/> <s:submit value="登 录"/>

</s:form>

如上述的login.jsp页面所示,在页面中使用Struts 2标签需要将Struts 2标签库导入到该

页面中,导入标签库的代码为<%@taglib prefix="s" uri="/struts-tags" %>。 


3.创建业务控制器 LoginAction 类

创建业务控制器 LoginAction 类,该类为程序的 Action 类,继承自 com.opensymphony. xwork2.ActionSupport 类。在 LoginAction 类中定义 username 属性和 password 属性,分别用于 存储用户登录时输入的用户名和密码信息。


4.配置 LoginAction 类

当 Action 处理完客户端请求后就会返回一个字符串,每个字符串都对应一个视图。 在 src 目录下新建 struts.xml 文件,在该文件中配置 LoginAction 类,代码如下:

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

<package name="default" extends="struts-default" namespace="/">

<action name="login" class="com.mxl.actions.LoginAction"> <result name="success">/success.jsp</result>

<result name="input">/login.jsp</result>

          </action>

     </package>

</struts>

如上述代码,在 struts.xml 文件中配置 Action 时,用 name 属性定义该 Action 的名称,用 class 属性定义这个 Action 的实际实现类。配置 Action 时,需要为每个 Action 都指定 result 元 素,每个 result 元素都定义了一个逻辑视图,而用 name 定义了 Action 所返回的字符串,即 success 所对应的逻辑视图为 success.jsp,input 所对应的逻辑视图为 login.jsp。


5.创建欢迎界面 success.jsp

在 WebRoot 目录下新建 success.jsp 页面,在该页面中输出用户登录时输入的用户名和密

码信息,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@taglib prefix="s" uri="/struts-tags" %>

用户名:<s:property value="username"/> 密码:<s:property value="password"/>

6.运行结果

将 Web 应用 ch1 部署到 Tomcat 服务器上,然后启动 Tomcat 服务器。打开浏览器,在地 址栏中输入 http://localhost:8080/ch1/login.jsp,在登录界面的用户名文本框中输入 admin,密码 文本框中输入 maxianglin。

单击【登录】按钮,登录成功后转向 success.jsp 页面,出现图 1-7 所示的界面。

当在登录界面中输入的用户名非 admin 或者输入的密码非 maxianglin 时,登录失败转向

本页面 login.jsp。


1.4    Struts 2 处理流程

采用Struts 2框架后,用户通过POST或GET方法向服务器提交数据,数据不再是提交

给服务器端的某一个 JSP 页面。框架会根据 web.xml 文件和 struts.xml 文件的配置内容将数据 提交给对应的 ActionSupport 类处理,并返回结果。然后框架根据返回的结果和 struts.xml 文件 中的配置内容,将相应的页面返回给客户端。

1.3节只讲述了如何实现一个Struts 2的登录示例,这一节将对这个示例进行剖析,其工 作流程如图所示。


001.jpg


Web 应用 ch1 的处理流程如下所示: 

(1)单击登录界面中的【登录】按钮,向服务器提交用户输入的用户名和密码信息。 

(2)读取 web.xml 文件内容,加载 Struts 2 的核心过滤器 StrutsPrepareAndExecuteFilter,

对用户请求进行拦截。

(3)根据用户提交表单中的 action 值在 struts.xml 配置文件中查找相应的 action 配置,这 里会查找 name 属性值为 login 的 action 配置,然后将已经拦截的登录请求转发给相对应的 LoginAction 类来处理。

(4)由于在 struts.xml 配置文件中并没有指定 action 元素的 method 属性值,因此系统会 调用默认方法 execute()来完成对客户端的登录请求处理。如果登录成功则返回 success 字符串, 否则返回 login 字符串。

(5)根据返回结果,在 struts.xml 文件中查找相应的结果映射。由于在 struts.xml 文件中 配置 LoginAction 时指定了<result name="success">/success.jsp</result>,因此当 LoginAction 类 的 execute()方法返回 success 字符串时,则转向 success.jsp 页面,否则转向 login.jsp 页面。

以上五步概述了 ch1 应用的处理请求。 下面将对 Struts 2 各个部分的作用进行简单的介绍。


1.核心控制器 StrutsPrepareAndExecuteFilter

StrutsPrepareAndExecuteFilter 是 Struts 2 的核心控制器,负责拦截客户端请求,作为一个 Filter 通过 web.xml 文件被加载到 Web 应用当中。当有客户端请求到达时,它就会进行拦截,


2.struts.xml 配置文件

 struts.xml 文件是 Struts 2 框架的配置文件,主要负责配置业务逻辑控制器 Action,以及用 户自定义的拦截器等,可以说是Struts 2各个组件之间的组带。StrutsPrepareAndExecuteFilter 在拦截客户端请求后就是通过读取 struts.xml 文件来决定该把客户端请求信息转发给哪个 Action 进行处理的。


3.业务逻辑控制器 Action 类

Action 是 Struts 2 的业务逻辑控制器,负责处理客户端请求并将处理结果输出给客户端。 在处理客户端请求之前需要获取请求参数或从表单提交的数据。

Struts 2 采用了 JavaBean 的风格,即要访问数据,就需要给每个属性都提供一个 getter 和 setter 方法,要获得请求参数和表单提交的数据也是同样的道理。每一个请求参数和从表单提交 的数据都可以作为 Action 的属性,所以可以通过提供 setter 方法来获得请求参数或从表单提交的 数据。如在 ch1 应用中,在 login.jsp 页面中分别定义一个文本输入框和密码输入框,并指定它们 的 name 属性值分别为 username 和 password,而在 LoginAction 类中定义了两个属性:一个是 username,一个是 password,分别对应于登录页面表单中两个元素的 name 属性值,同时也为这 两个属性提供了 getter 和 setter 方法。当客户端发送的表单请求被 StrutsPrepareAndExecuteFilter 转发给该 Action 时,该 Action 就自动通过 setter 方法获得从表单提交过来的数据信息。


4.视图组件

Action 在处理完客户端请求后会通过视图组件将处理结果显示出来,包括如下两种情况: (1)Action 向视图组件输出数据信息,然后由视图组件将这些数据信息显示出来。例如 Action 执行了查询数据库的操作,并把查询到的数据输出给视图组件,然后由视图组件将这 些数据信息显示出来。例如在 1.3 节的示例中,在 Login Action 类中获取了用户输入的用户名和密码信息,当登录成功后跳转到欢迎界面 success.jsp,并将获取的用户输入信息显示出来。 

(2)Action 并没有向视图组件输出数据信息,只是根据处理结果进行简单的页面跳转。例如在上一节的示例中,当登录失败后就跳转到登录页面 login.jsp。


1.5    Struts 2 配置详解

在 Struts 2 框架中,主要的配置文件包括 web.xml、struts.xml、struts.properties、 struts-default.xml 和 struts-plugin.xml。其中 web.xml 文件是 Web 部署描述文件,包括所有必需 的框架组件;struts.xml 文件是 Struts 2 框架的核心配置文件,负责管理 Struts 2 框架的业务控 制 Action 和拦截器等;struts.properties 文件是 Struts 2 的属性配置文件;struts-default.xml 文件 为 Struts 2 框架提供的默认配置文件;struts-plugin.xml 文件为 Struts 2 框架的插件配置文件。 而在Struts 2框架的应用中,较常用的配置文件为web.xml、struts.xml和struts.properties。本 节将详细介绍 web.xml 文件和 struts.properties 文件的相关配置。


1.5.1 web.xml 配置

Web 应用都需要一个配置文件 web.xml,该文件用来对整个应用程序进行配置。而在不同 的 Web 程序中,web.xml 文件是不同的。在 Struts 2 框架应用中,web.xml 文件需要配置 Struts 2的核心控制器StrutsPrepareAndExecuteFilter,用于对Struts 2框架进行初始化以及处理所有 的请求。

下面是一个 web.xml 文件,在该文件中配置 StrutsPrepareAndExecuteFilter,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置 Struts 2 框架的核心 Filter -->

<filter>

<!-- 配置 Struts 2 核心 Filter 的名字 -->

<filter-name>struts2</filter-name>

<!-- 配置 Struts 2 核心 Filter 的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecute- Filter</filter-class>

</filter>

<!-- 配置 Filter 拦截的 URL --> <filter-mapping>

<!-- 过滤器拦截名称 -->

<filter-name>struts2</filter-name>

<!-- 配置 Struts 2 的核心 FilterDispatcher 拦截所有.action 用户的请求 -->

<url-pattern>*.action</url-pattern> </filter-mapping>

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

     </filter-mapping>

     <welcome-file-list>

         <welcome-file>login.jsp</welcome-file>

     </welcome-file-list>

</web-app>

filter 元素用来配置要加载的 Struts 2 框架的核心过滤器 StrutsPrepareAndExecuteFilter; filter-mapping 元素用来配置 StrutsPrepareAndExecuteFilter 过滤器所拦截的用户请求。


1.5.2 struts.properties 配置

struts.properties文件是一个属性定义文件,在该文件中可以定义Struts 2框架的大量属性 和常量等。通过修改 struts.properties 文件中的内容,可以实现对 Struts 2 框架中配置参数的 修改。

struts.properties文件是一个标准的Properties文件,该文件是由一系列的key-value对组成 的,例如:

     struts.i18n.encoding=UTF-8

其中,等号左边的部分为 key,表示 Struts 2 框架的属性名称;等号右边的部分为 value, 表示设置的属性值。


1.6    struts.xml 配置详解

在Struts 2框架中,struts.xml文件具有重要的作用。它主要负责管理Web应用中业务逻 辑控制器 Action 的映射、Action 包含的 result 定义,以及 Bean 的配置、常量的配置、包的配 置和拦截器的配置等,可以将配置内容分为三大类:管理元素、用户请求处理元素和错误处 理元素,在每种元素中可以包含不同的配置内容。


1.6.1 文件结构

Struts 2 框架提供了 struts.xml 文件的 DTD(Document Type Definition,文档类型定义)文 件。在 Struts 2 的核心包 struts-core-x.x.x.jar 中,包含有一个 struts-2.1.7.dtd 文件,该文件是 struts.xml 文件和 struts-default.xml 文件的 DTD。下面通过查看 struts-2.1.7.dtd 文件,了解 struts.xml 文件中的配置内容和要求。struts- 2.1.7.dtd 文件的部分内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT struts ((package|include|bean|constant)*, unknown-handler-stack?)>

<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?,default- action-ref?, default-class-ref?, global-results?, global-exception-mappings?, action*)>

<!ATTLIST package

   name CDATA #REQUIRED

   extends CDATA #IMPLIED

namespace CDATA #IMPLIED

   abstract CDATA #IMPLIED

   externalReferenceResolver NMTOKEN #IMPLIED

>

<!ELEMENT result-types (result-type+)> <!ELEMENT result-type (param*)>

<!ATTLIST result-type

   name CDATA #REQUIRED

   class CDATA #REQUIRED

   default (true|false) "false"

>

<!ELEMENT interceptors (interceptor|interceptor-stack)+> <!ELEMENT interceptor (param*)>

<!ATTLIST interceptor

   name CDATA #REQUIRED

   class CDATA #REQUIRED

>

<!ELEMENT interceptor-stack (interceptor-ref*)>

<!ATTLIST interceptor-stack

   name CDATA #REQUIRED

>

<!ELEMENT interceptor-ref (param*)>

<!ATTLIST interceptor-ref

   name CDATA #REQUIRED

>

<!ELEMENT default-interceptor-ref (#PCDATA)>

<!ATTLIST default-interceptor-ref

   name CDATA #REQUIRED

>

<!ELEMENT default-action-ref (#PCDATA)>

<!ATTLIST default-action-ref

   name CDATA #REQUIRED

>

<!ELEMENT default-class-ref (#PCDATA)>

...

<!ELEMENT global-results (result+)>

<!ELEMENT global-exception-mappings (exception-mapping+)> <!ELEMENT action (param|result|interceptor-ref|exception-mapping)*>

<!ATTLIST action

name CDATA #REQUIRED

class CDATA #IMPLIED

   method CDATA #IMPLIED

   converter CDATA #IMPLIED

>

<!ELEMENT param (#PCDATA)>

<!ATTLIST param

   name CDATA #REQUIRED

>

<!ELEMENT result (#PCDATA|param)*> <!ATTLIST result

   name CDATA #IMPLIED

   type CDATA #IMPLIED

>

...

<!ELEMENT include (#PCDATA)>

<!ATTLIST include

   file CDATA #REQUIRED

>

<!ELEMENT bean (#PCDATA)>

<!ATTLIST bean

   type CDATA #IMPLIED

   name CDATA #IMPLIED

   class CDATA #REQUIRED

   scope CDATA #IMPLIED

   static CDATA #IMPLIED

   optional CDATA #IMPLIED

>

<!ELEMENT constant (#PCDATA)>

<!ATTLIST constant

   name CDATA #REQUIRED

   value CDATA #REQUIRED

>

...

表示该元素至少有一个或多个;没有这三种符号的元素表示该元素是必需的; (#PCDATA|param)*表示混合内容,即元素的内容可以包含零个或多个字符数据,也可以包含 零个或多个 param 子元素。


002.jpg


根据图所示的 struts.xml 文件元素结构图,下面定义一个 struts.xml 文件,代码如下:

<!DOCTYPE struts PUBLIC

   "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"

   "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

<constant name="struts.i18n.reload" value="false"/><!-- 常量配置 --> 

<constant name="struts.devMode" value="false"/><!-- 常量配置 --> 

<include file="struts-user.xml"/><!-- 包含文件的配置 -->

<include file="struts-pro.xml"/><!-- 包含文件的配置 -->

<!-- 配置包元素-->

<package name="default" extends="struts-default" namespace="/">

<interceptors> <!-- 拦截器根元素 -->

<interceptor-stack name="crudStack">

<!-- 拦截器栈 -->

<interceptor-ref name="checkbox"/><!-- 拦截器 -->

<interceptor-ref name="params"/><!-- 拦截器 -->

</interceptor-stack>

</interceptors> <!-- 配置 Action -->

<action name="test" class="com.mxl.actions.MyAction">

<result name="success">/index.jsp</result> <!-- 配置 result -->

         </action>

     </package>

<!-- Bean 的配置 -->

<bean type="org.apache.struts2.views.TagLibrary" class="com.mxl.entity.ObjectFactory"

name="mybean" scope="default"/>

</struts>

从上述内容可以看出,在 struts.xml 文件中使用 constant 元素配置 Struts 2 框架中的常量, 使用 include 元素包含其他配置文件,使用 package 元素定义包。其中,在每个包中可以定义拦截器和 Action 等。


关注微信公号“书问”,快去免费领取符合你目标的图书吧!


内容来源:书问

作者许勇、王黎 等
出版清华大学出版社
定价79元
书籍比价

分享到

扫描二维码 ×

参与讨论

电子纸书

Struts 2+Spring+Hibernate+MyBatis网站开发案例课堂

施俊、缪勇、李新锋
清华大学出版社[2018] ¥55

Struts2+Spring3+Hibernate框架技术精讲与整合案例

缪勇、施俊、李新锋
清华大学出版社[2015] ¥59

JavaScript从入门到项目实践(超值版)

聚慕课教育研发中心
清华大学出版社[2018] ¥63

Ionic 移动开发入门与实战(第2版)

秦超 李一鸣
清华大学出版社[2018] ¥53

Java 从入门到项目实践(超值版)

聚慕课教育研发中心
清华大学出版社[2018] ¥58

HTML5+CSS3+JavaScript从入门到精通(微课精编版)

前端科技
清华大学出版社[2018] ¥48

HTML5+CSS3从入门到精通(微课精编版)

前端科技
清华大学出版社[2018] ¥48

iPhone手机维修从入门到精通(第2版)

侯海亭、张磊、尹海港、张志衡、闫新东
清华大学出版社[2018] ¥47

Scratch编程从入门到精通

谢声涛
清华大学出版社[2018] ¥45

MySQL 5.7从入门到实战(视频教学版)

张婷
清华大学出版社[2018] ¥83

出版业领先的TMT平台

使用社交账号直接登陆

Copyright © 2018 BookAsk 书问   |   京ICP证160134号


注册书问

一键登录

Copyright © 2018 BookAsk 书问   |   京ICP证160134号