1.Struts2 技术演进
发展脉络
2000年5月 Apache Struts 发起(Craig McClanahan)
↓
2001年7月 Struts 1.0 发布 → Web开发事实标准
↓
2005年 Patrick Lightbody 发起 Struts Ti 提案
↓ 邀请多个框架领导者达成共识
2006年 WebWork 与 Struts Ti 合并
↓ 基于 WebWork 技术基础
2007年 Struts 2.0 发布
两大技术来源
┌─────────────────────────────────────────────────────
│ Struts2 的技术组成
├─────────────────────┬───────────────────────────────
│ XWork │ WebWork
├─────────────────────┼───────────────────────────────
│ 通用命令框架 │ Web上下文实现
│ • Actions │ • 简化Web开发
│ • 验证框架 │ • 标签库支持
│ • 拦截器 │ • UI主题系统
│ • 依赖注入 │ • Tiles布局支持
│ • 配置文件管理 │
└─────────────────────┴───────────────────────────────
视图技术选项
| 技术 |
特点 |
适用场景 |
| JSP + JSTL |
最常用,成熟稳定 |
传统企业应用 |
| Freemarker |
模板分离,语法简洁 |
复杂页面结构 |
| Velocity |
轻量级模板引擎 |
快速开发 |
| Tiles |
页面布局框架 |
多页面共用布局 |
| JSON/XML |
RESTful API 响应 |
前后端分离 |
安全集成方案
| 安全方案 |
集成方式 |
| Spring Security |
通过 filter 链集成 |
| Shiro |
轻量级权限框架 |
| JAAS |
Java 认证授权服务 |
高级特性
值栈(Value Stack)与 OGNL
值栈结构:
┌─────────────────────────┐
│ Action 实例 │ ← 当前处理请求的 Action
├─────────────────────────┤
│ Model 对象 │ ← 业务模型
├─────────────────────────┤
│ Page Context │ ← JSP 页面上下文
├─────────────────────────┤
│ Request Map │ ← 请求参数
├─────────────────────────┤
│ Session Map │ ← 会话数据
├─────────────────────────┤
│ Application Map │ ← 应用上下文
└─────────────────────────┘
OGNL 表达式示例:
${user.name} - 访问属性
${user.address.city} - 嵌套属性
#{session.user} - 访问 Map
拦截器链执行顺序
HTTP Request
↓
[1] Exception Mapping Interceptor
↓
[2] File Upload Interceptor
↓
[3] Validation Interceptor
↓
[4] Input Check Interceptor
↓
[5] Workflow Interceptor
↓
[6] Action Invocation
↓
[7] Result Execution
↓
HTTP Response