Struts 是 Apache 软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta 项目中的一个子项目,并在 2004 年 3 月成为 ASF 的顶级项目。它实现了基于 Java EE Web 应用的 Model-View-Controller(MVC)设计模式的应用框架,其采用的主要技术是 Java Servlet、JSP 以及 Custom Tag Library 等技术,是 MVC 经典设计模式中的一个经典产品。
-
Struts2 是非侵入式设计,即不依赖于 Servlet API 和 Struts API.
-
Struts2 提供了强大的拦截器,利用拦截器可以进行 AOP 编程(面向切面的编程),实现如权限拦截等功能。
-
Struts2 提供了类型转换器,可以很方便地进行类型转换,例如将特殊的请求参数转换成需要的类型。
-
Struts2 支持多种表现层技术,如 JSP、FreeMarker、Velocity 等。
-
Struts2 的输入验证可以对指定的方法进行验证
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package>
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
首先是 <constant>
包含一些属性设置,它可以改变 struts 框架的一些行为。例如示例中的 struts.enable.DynamicMethodInvocation
设为 true,表示设置动态方法调用为真,而 struts.devMode
表示是否启用开发者模式。
OGNL(Object-Graph Navigation Language,对象图导航语言),它是一个功能强大的表达式语言,用来获取和设置 Java 对象的属性以及调用对象的方法。它旨在提供一个更高的更抽象的层次来对 Java 对象图进行导航。
OGNL 是 Struts2 的默认表达语言,OGNL 表达式的计算是围绕 OGNL 上下文(Context)进行的,相当于一个 Map 对象,见下图的结构:
<body>
Hello World, Welcome! <s:property value="name"/>
</body>
<s:property value="name"/>
这便是 OGNL 的一种应用,访问 action 的普通属性。
#
符号
通常有三种用法:
- 访问非 root 对象。
- 用于过滤和投影集合。
- 构造 Map,例如:#{'key1':'value1', 'key2':'value2'}。
%
符号
用途是告诉标签的处理类将它包含的字符串,强行按照 OGNL 表达式处理。例如:
<s:set name="mySet" value="#{'key1':'value1','key2':'value2'}" />
<s:property value="#mySet['key1']"/> //输出的是 value1
<s:url value="#mySet['key1']" /> //输出的是#mySet['key1']
<s:url value="%{#mySet['key1']}"/> //输出的是 value1
$
符号
通常在 struts.xml 配置文件中的使用方式如下:
<field-validator type="stringlength">
<param name="maxLength">18</param>
<param name="minLength">6</param>
<param name="trim">true</param>
<message>密码强度必须在 ${minLength}到${maxLength} 之间!</message>
</field-validator>