struts2技术演进

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