"OGNL表达式语言(#号的用法)-struts 2应用2"
在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象属性。在描述中提到的“#号的用法”是OGNL中访问上下文环境的关键。#号通常用来标识OGNL表达式中的特殊上下文引用,例如ActionContext。
1. OGNL上下文和Action上下文:
当我们在OGNL表达式中使用#前缀时,我们是在访问OGNL上下文和Action上下文。ActionContext是一个包含所有请求相关的数据结构,如请求(request)、会话(session)和应用(application)作用域的属性。例如,如果我们想获取请求中的“userName”,可以使用`#request['userName']`,这与直接调用`ActionContext.getContext().get('userName')`效果相同。同样,我们可以通过`#session['userName']`和`#application['userName']`来访问会话和应用级别的变量。
2. Struts2框架的优势:
- **无侵入式设计**:与Struts1不同,Struts2的设计允许开发者编写不依赖于ServletAPI或StrutsAPI的代码。这意味着业务逻辑可以独立于框架存在,提高了代码的可维护性和可测试性。
- **拦截器机制**:Struts2引入了拦截器,这是一种AOP(面向切面编程)的概念,允许在方法调用前后执行额外的功能,如日志记录、权限验证等。
- **类型转换器**:框架内置了类型转换器,自动将请求参数转换为所需的Java类型,减少了手动转换的工作。
- **多视图技术支持**:Struts2不仅支持JSP,还支持FreeMarker、Velocity等模板技术,为开发者提供了更多选择。
- **输入验证**:Struts2的输入验证机制更为灵活,可以在方法级别进行验证,并且支持全局和局部的国际化资源文件管理,提高了用户体验。
从Struts1迁移到Struts2时,需要注意Struts2并不是Struts1的简单升级版,而是基于WebWork框架构建的。迁移过程可能涉及重构代码以适应Struts2的架构,例如使用Action类的execute方法替换旧的ActionSupport类,以及利用拦截器来实现Struts1中的一些功能。此外,还需要调整配置文件,如struts.xml,以匹配Struts2的配置语法。尽管有这些变化,Struts2提供的强大特性和改进的开发体验使得升级变得值得。