从工作开始便一时使用 struts 2 作为前端,已经有18个月了。对于 struts 有一定的了解,也感觉到它的麻烦之处。最大的不爽就是对错误的提示,呵呵。常常没有一句提示是指向问题所在的,而开发的经验就在这时使用上了。在这里,小结一下这18个月来我对 struts 2 的一点认识吧。
1. 基于拦截器实现。
Struts 2 是基于拦截器实现的。可以说在 struts 里,所以的功能通过拦截器完成的,而 Action 是最终的业务逻辑编写的地方。而拦截器,说白了,就是 Servlet 里的过滤器(Filter)。
让我们来看拦截器的配置,在 struts-default.xml (这里打开该文件)里,已经设置了框架自带的拦截器。这些拦截器已经实现了一般项目的大部分功能。
注意下面这段的配置
<interceptors>
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
....
</interceptors>
<default-interceptor-ref name="defaultStack"/>
struts 为我们准备了一个默认的拦截器,并且将其设置为全局默认。因此,对于初学者,可以完全不知道拦截器的原理而开发出有效的 struts 项目应用。
更多拦截器的介绍,请看这里。
2. struts 2 标签应用
struts 开发中,我最常使用的资源是 tag reference。通过这个网页去查询 struts 2 的标签的使用方法。我们知道,JSP 最早使用脚本去编写,导致了代码的混乱与难于阅读。后来提出了 JSTL 并对标签进行了规范,而 struts 2 开放了一套自己的标签标准。使用 struts 2 的标签其实足以完成页面功能,这也是我的开发原则之一,页面完全使用 struts 标签完成。
使用标签的一个好处,就是其会为你自动填充内容。只要从 Action 链入,标签便会自动从 value stack 中获取相应的值进行填充。这在开发页面时非常有用。因为这一点,我会使用 prepare 去在后台设置初始化参数,使页面加载时有默认值。
3. Acton 编写
在 struts 1 中,Form 需要单独设置一个 FormBean 来实现。在 struts 2 中免去了这样的麻烦,换为了 action 中的 getter 和 setter。也放你会奇怪,不应该是一个变量再加相应的 getter 和 setter 吗?其实不然,变量可以设置为私有,即外部无法看到。而 struts 通过 action 的 setter 将页面的值传入,通过 getter 将 action 的值传出。这里有一个特殊,就是 list 值会通过 getter 传入及传出。即调用 getList().add(element); 将页面的 checkbox 之类的列表值传入。
关于 Action 的编写,程序员更多关注的页面后端支持。很多人会认为业务逻辑应该在这里实现,于是在 Action 中写入大量实现代码。其实在 struts 的开发文档中有这么一句描述:
写道
Ideally, Action classes should be as short as possible. All the core logic should be pushed back to a support class or a business facade, so that Actions only call methods. Actions are best used as adapters, rather than as a class where coding logic is defined.
事实上,Action 类应该尽可能的精简。所有的核心逻辑应该被放置在一个支持类或者一个业务封装中,而 Action 仅仅调用相应的方法。相比将 action 定义为一个包含业务逻辑的类,将其当作一个分配员更合适。
上面的描述很清晰,如果我们将业务逻辑抽出并进行封装。那么一个精简的 action 在前端会让我们更好的进行业务的组合。
4. struts 2 插件应用
struts 的实现原理让其很方便的实现了应用插件,而插件的导入通常只需要简单的设置 package 的属性即可。
但插件的应用却不是简单的导入就完事了。我在使用 struts-json 时,就因为使用不当,而导致了莫名的错误。后面发现 JSON 插件是对返回值的 getter 方法的调用,即对 action 中的 getter 方法进行一次递归读取,然后封装为 JSON。但当使用了 spring 注入 service 时,对应 service 的 getter 方法就会导致 JSON 出错。于是我在写 action 时,都成分小心的处理 getter 和 setter。
所以要使用一个插件,还是了解它的脾气,再使用就会减少一些不必要的排错时间了。
5. 关于 struts 2 的学习资料
struts 的学习,我完全依赖了其官方网站。面对其详尽的文档描述,对于深入学习十分有帮助。这里介绍下我的检索资源的方法:
a) 通过 Guides 页面查找需要的内容
b) 在 Tag Reference 页面查找标签相关的信息
c) 通过其搜索功能查找相关资源
对于找到的链接,我们要看清楚相关的版本信息。通过在 URL 中就包含了版本信息,只需要相应的修改就可以了。
如 Guides 页面地址为:http://struts.apache.org/2.2.3/docs/guides.html
中间的 2.2.3 即为当前文档的版本,有时我们会看到其为 2.0.14,即是 2.0.14 版的 struts 开发文档。因为早期版本与最新版本在结构上有较大区别,故需要将其手工调整后再继续,避免过时的信息导致莫名的异常产生。
一般也可以将版本号设为 2.x 便可获得最新版本的开发文档了,如: http://struts.apache.org/2.x/docs/guides.html
上面非常粗略的介绍了一下 struts 中的一些概念,如有错落的地方,请读者雅正。谢谢
分享到:
相关推荐
### Struts2学习小结 #### 一、Struts2简介及环境搭建 **Struts2** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源框架,用于简化 Java Web 应用程序的开发过程。通过将业务逻辑、用户界面以及控制...
关于struts2框架的学习总结,非常实用知识对关键部分通过自己的学习总结出来非常具有实际参考价值
这篇博客"Struts开发小结"可能涵盖了作者在使用Struts框架进行开发过程中的经验总结和一些关键点。由于没有直接的描述内容,我们将基于Struts框架的一般特性来讨论相关知识点。 1. **Struts 2框架基础**: Struts ...
### Struts2输入校验深度解析 #### 一、手动输入完成校验 在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中...
Struts2是一个强大的MVC框架,它为Java开发者提供了便捷的Web应用开发工具。本文将对Struts2的核心概念和标签库进行详细讲解,帮助初学者更好地理解和掌握这个框架。 Struts2框架由两个主要部分构成:控制器和视图...
在Struts2中,当服务端验证失败时,通常会将错误信息保存在ActionContext中,并通过ActionSupport类中的addFieldError方法添加到字段上。此时,为了保留页面的初始状态,我们可以采取以下策略: 1. 使用`...
### 小结 《Struts 2实战 Struts 2 in action 的中文版》这本书系统地介绍了Struts 2框架的基础知识、核心组件、工作原理以及实际开发技巧。对于希望深入学习和掌握Struts 2框架的开发者来说,这本书是一本不可多得...
第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 ...15.7 小结 332
### 关于Struts2实验时的临时总结 #### 概述 本文档是对Struts2实验过程中的几个关键问题及解决方案进行了归纳与整理。通过实际操作过程中遇到的问题及其解决办法,帮助其他开发者避免同样的错误,并提供高效的学习...
### Struts框架中struts-config.xml文件配置详解 #### 一、引言 在Java Web开发领域,Struts是一个非常重要的MVC(Model-View-Controller)框架,它极大地简化了Web应用程序的开发过程。而在Struts框架中,`struts...
#### 四、小结 Flex与Struts2的整合,不仅能够提升Web应用的用户体验,还能充分利用两种技术的优势,实现高效的数据处理和丰富的界面展示。通过本文的详细介绍,相信读者已经掌握了Flex与Struts2整合的基本步骤和...
第1章 Struts 2概述1 1.1 MVC思想概述2 1.1.1 Web技术的发展2 1.1.2 Model 1和Model 24 1.1.3 MVC思想及其优势6 1.1.4 常用的MVC框架7 1.2 Struts 2的起源和背景8 ... 1.6 本章小结22
1.4 小结 13 第2章初识Struts 14 2.1 Struts的优点 14 2.2 Struts的动作处理流程 15 2.3 拦截器 17 2.4 Struts配置文件 18 2.4.1 struts.xml文件 19 2.4.2 struts.properties文件 26 2.5 Struts应用程序示例...
### 小结 通过对Struts2框架的国际化功能的介绍和示例分析,我们可以看出Struts2在处理多语言应用方面具有非常强大的能力。通过合理的配置资源文件和使用Struts2提供的标签,开发者可以轻松地为用户提供多语言支持...
一、准备工作及实例 3 ...小结Action 14 9.使用通配符 14 10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 ...
以上是对Struts框架的简单总结,每个知识点都涉及到Struts2的核心特性,理解和掌握这些知识点对于进行Struts2应用的开发至关重要。在实际项目中,还需要结合其他技术如Spring、Hibernate等进行更复杂的集成和配置。
在本学习小结中,我们将探讨如何将Struts2与IReport整合,以实现在Web应用中动态生成和展示报表的功能。 首先,让我们了解Struts2的基础知识。Struts2的核心是Action类,它是处理用户请求并返回结果的核心组件。...
#### 五、小结 本文详细介绍了Struts2处理多个请求和域传参的相关知识点。从过滤器和拦截器的作用到动态方法调用的实现,再到具体的登录和注册请求处理示例,旨在帮助读者全面了解Struts2的基本概念和使用方法。...
小结 本文介绍了如何使用Struts2的JSON插件处理JSON数据。通过不同的配置选项和示例,读者可以了解到如何灵活地控制返回的JSON数据格式。无论是使用XML配置还是注解方式,Struts2都提供了丰富的选项来满足不同的...