`
xpp02
  • 浏览: 1048142 次
社区版块
存档分类
最新评论

Struts2教程 - Struts2的“简历”

阅读更多

Struts2 应该说是第二代实现 MVC 模式的 Web 项目开发框架。它是以拦截器先拦截 HTTP 请求,在进入 MVC 模式中的 C 也就是控制器部分前,对 HTTP 请求中包含的数据做校验,字符编码转化等等操作,由于这些操作和业务逻辑关系不是很大,所以提前做这些事情,也让控制器可以着重处理 HTTP 请求和业务逻辑之间转发、处理等控制功能的实现。这点就是体现了“松耦合”的开发理念,让 Web 项目各部分都发挥自己负责的功能,而不互相牵涉,互相纠缠。开发人员进行修改,新增等功开发时候也只需要关心被开发的部分,而不需要去关心其他部分。

Struts2 按照技术细节划分,主要分为以下几块。

l   标签库:在视图中运用这些标签来实现网页上各种格式的显示。

l   拦截器: HTTP 请求在进入控制器部分执行前先执行拦截器中的功能。

l   FilterDispatcher Action :接收 HTTP 请求,根据 Action ActionMapper 决定调用 Action 哪些方法。

l   Struts2 配置文件:定义控制转发流程,每个 Action 类的处理和结果数据如何导航到相应表示界面都由它定义。

l   OGNL 和类型转化:在表示界面将包含数据的 Java 对象进行类型转化,显示出符合页面规则的数据格式。

l   Struts2 校验规则:对数据输入的严格定义,保证没有垃圾数据和不符合项目需求的数据。

l   国际化和本地化:针对字符编码的转化,让 Web 项目显示各种语言版本。

l   SiteMesh 页面布局:和以前的 IFrame 以及 Struts 中的 tiles 相类似的技术。使用插件式开发模式让其和 Struts2 形成一个完整实体,支持 Web 项目中页面布局。

下面笔者针对这些具体细节做一下初步概念的介绍,希望初学者或入门者能对 Struts2 有一个完整的认识。

1.2.1    标签库介绍

Struts2 的标签库和 Struts 的标签库一样,也是通过标签定义文件 , 也就是后缀名为 tld 的文件在 JSP 页面的定义,然后在 JSP 页面中调用这些标签进行表示层代码的开发。它主要分为下列这几大类。

l   控制标签:该类标签是用来控制那些在视图中最终显示的信息,也封装了在视图中有可能根据未来需求需要调用的数据集合。

l   数据标签:该类标签可以修改那些动态生成的数据信息,例如 Action 执行后的返回结果,本地化或国际化的文本,导航指向的 URL 和链接等等。而且该类标签还能为开发者提供调试信息。

l   表单标签:该类标签将原有 HTML 标签进行了封装,很多 HTML 标签都可以转为相应的表单标签,包括 CheckBox 、日期、下拉框等等。

l   非表单标签:该类标签虽然也是可以用来表单里,但和构成表单的标签不同。主要包含错误信息、树形菜单、选择页等等。

1.2.2    拦截器应用目的

之前也对拦截器有个初步的叙述,在 Struts2 框架执行 Action 之前拦截器对各种各样的操作都预先进行处理。这点也是 AOP 编程理念的一个实现,即对某个业务逻辑处理类或流程控制类执行之前或之后,预先或事后对一些和系统业务逻辑没有太大关系的功能进行处理。 AOP 中的术语称之为“ crosscut ”,中文可以翻译为“横切”。而且开发人员不再需要修改原有代码就能增加很多他们想实现的需求。各组件之间也很独立,如果系统有变化部分,也能很好的对涉及变化的组件进行修改而不影响到其他组件。其实所谓的“松耦合”也就是这样的概念。

Struts2 中使用拦截器的目的,笔者认为有如下几点:

l   Action 调用之前提供系统处理流程逻辑控制。也就是 Web 项目中从一个视图转向或导航到目标视图的逻辑控制。

l   Action 交互时,提供 Action 执行时候一些初始信息。比如和 Spring 整合时候,调用的一些被 Spring 容器管理的 JavaBean 类。或者是传入 Action 中的一切 request session 中的数据。

l   Action 执行结束后,一些事后处理的流程逻辑也需要由拦截器实现。

l   修改 Action 中返回的 Result 信息,这样可以让系统导航到开发者需要它导航的目标视图。

l   捕获异常,保证让一些可供选择的流程被执行或者导航一些显示异常原因或错误信息的目标视图。

1.2.3    FilterDispatcher Action 概述

Action 可以称之为 Struts2 的核心技术。每一个 URL 都可以被一个特殊的 Action 所映射。该 Action 是开发人员根据 Web 项目特定需求进行开发所实现的。

Action 中通过一个无参的 execute 方法来执行控制转向,并且返回一个 String 类型变量或者 Result 对象。当然也可以在 Struts.xml 文件里进行特殊指定方法名,这样就可以不用 execute 作为方法名,而是用开发人员自己指定的方法名。

如果返回的是一个 String 类型变量,相应的导航的目标视图是在 Struts.xml 配置文件里定义,配置文件把这个变量值和定义的目标视图名相匹配,这样系统就能正确导航到目标视图。

如果返回的是 Result 对象,因为 Struts2 本身支持返回结果是 Result 对象的映射导航,可是像 JSP 这种视图中显示的数据都是 Java 中的基本类型。这就涉及到类型转化概念,在 Struts2 中设计者也考虑到这一点,因此也提供了类型转化的机制,在稍后章节也会具体介绍。

Web 项目中,如果 HTTP 请求被 servlet 容器接收,然后导航到定义的目标视图时候,有可能在之前会有 Web 项目中定义个一个过滤器( Filter )对它进行处理。在 Struts2 中是由一个叫 FilterDispatcher 的类来执行该过滤器的 HTTP 请求处理功能。

FilterDispatcher 也是 Struts2 的一个核心技术,它提供了处理 HTTP 请求用来访问 Web 项目框架的访问方法。假设我们启动了某个 Web 项目,很多可设置的元素都已经在该 Web 项目框架中定义,例如 Spring 的可管理的 JavaBean 配置, Action 的映射定义等等。在此时 FilterDispatcher 会执行下列这些操作:

l   读取静态数据信息:比如某些文件或者 JavaScript 代码等等。

l   决定需要转发或导航的 Action 配置,举例说从 HTTP 请求中发出的目标视图的导航定义,一般在 Struts.xml 配置文件中都配置了 Action 名字,系统会根据 Action 配置去配置文件中寻找这个 Action 名字的 Action 。也就是说通过 FilterDispatcher 去搜寻后缀名为“ Action ”的所有 Action 映射。

l   创建 Action Context :从 HTTP 请求中发出的数据信息都是存储在 request session 中,而 Struts2 则封装了这些 HTTP 的对象,创建 Context 对象作为存储数据之处,并且通过 Context 的一些内置方法可以得到 HTTP 请求存储在 request session 中的数据。

l   创建 Action 代理: Action 代理是一个附加的逻辑处理。它实际上包含了 Web 项目所有的配置和 Context 信息,用以来处理 HTTP 请求并包含请求处理完毕后哪些返回的 Result 对象。

l   内存清理和性能优化:为了确保在 Web 项目启动运行后,内存不会溢出,出现运行越来越慢的情况, FilterDispatcher 会自动执行清理动作,主要清理 Context 对象,保证系统中没有冗余对象或垃圾对象。

1.2.4    Struts2 配置文件处理

Struts2 的配置文件也是 Struts2 框架的核心技术。它主要将 Web 项目中一些属性和需要配置的机制以及 Web 页面导航流程控制都配置起来。

配置文件主要分为两个文件

l   Struts.xml 文件:在该文件中主要对 Action Struts2 的主要业务逻辑控制类进行配置,除此之外还对拦截器、 FreeMarker 等也可以做配置。

l   Struts.properties 文件:该文件定义了 Web 项目整个应用程序范围的设置。并且对那些可以改变 Web 项目框架功能的配置参数进行配置定义。

1.2.5    OGNL 介绍和类型转换目的

OGNL 全称为 Object Graph Navigating Language ,翻译成中文就是对象导航图语言。该语言是一种表达式语言,但是它有它的绑定方式。同一个 OGNL 表达式可以用于得到或者设置 Java 对象的属性。其实就是简化了 Java 中的 getter setter 方法。而且表达式除了显示、得到对象属性之外,表达式也被允许带有计算功能。在 Struts2 中使用 OGNL 的目的其实就是下面三个:

l   OGNL 本身的类型转换机制允许视图中的值和数据进行类型装换。

l   OGNL 能使有些数据源可以简单映射到视图中。

l   OGNL 能将 web 组件和相应的 Java 对象绑定在一起。

Struts2 中的类型转换一方面需要 OGNL 来支持,另一方面由于它自带了类型转换器,其实开发者调用这些缺省设置的转换器配合 OGNL 一起使用就能实现类型转换。而且开发者还可以自己定义符合自己 Web 项目需求的类型转换器。之所以类型转换很大程度原因是视图技术上显示的值一般都是 String 类型,而在 Java 对象中的属性不一定都是 String 类型,因此有必要让视图上的值和 Java 对象中的属性可以进行双向的类型转换。除此之外,一些判断视图上值是否为空的操作处理啊,也需要类型转换才能定义空值或不空值时候的显示在视图上的值格式。

1.2.6    进行校验

通常开发者在开发自己的 Web 项目时候,针对即将被存储进数据库的一些数据会进行校验,保证数据库中的数据不是垃圾数据或者是不符合项目要求格式的数据。甚至在视图层对于用户在视图中输入的数据,有可能也有特定的数据格式要求,比如输入数据不能为空或者不能为特定字符这样的要求。 Struts2 提供了一个稳固而又健壮的校验机制,使用该机制能对 Struts2 中开发者开发的 Action 进行快速而又便捷的校验操作。

Struts2 中校验机制有一下几种实现方式:

l   通过 Struts.xml Struts.properties 配置文件定义校验。

l   继承 ActionSupport 类,重写它的一些方法在 Java 代码中进行校验。

l   使用校验拦截器,或者开发者自己定义的校验拦截器类在视图上输入的数据还没有传递到 Action 控制层时候来对其进行校验。

1.2.7   Web 项目国际化根由

国际化即 internationalization ,因为在这个单词第一个字母 i 和最后一个字母 n 之间有 18 个字母,所以通常又被称为 i18n 。为什么在 Web 项目中要进行国际化,原因是世界上所有的国家和地区都是位于不同的区域,每个区域的文化互相之间不同,而两个不同国家或地区的开发者开发的项目必然收到文化、语言限制有多所不同,所以当一个国家或地区的开发者希望自己开发的 Web 项目可以共享给其他国家和地区的开发者,也就会需要进行国际化来解决这个文化、语言带来的问题。

国际化主要是针对语言和信息格式化进行处理。除了字符编码和语言之外,信息格式指的是文本、日期、时间、数据处理等信息的显示格式。

它还包含了一个本地化的问题,本地化也被称为 l10n ,原因和国际化称为 i18n 是一样的。举例说一个中国的开发者,需要把一个英语的 Web 项目改版成中文字符显示信息的 Web 项目,其本身对此的操作包括对前文提到的语言和信息格式的处理就是本地化。

Struts2 中,有两种进行国际化操作方式:

l   Struts.properties 文件中设置处理各种字符编码或者语言的属性文件。并由此扩展这些属性文件,让 Web 系统使用形成各种语言或信息格式化的配置信息。

l   直接装载 Struts2 提供的自带信息资源包

1.2.8    SiteMesh 页面布局框架简介

Struts 中对页面布局的开发工作都由 tiles 来解决,但在 Struts2 中,设计者使用了一个专门来进行页面布局的框架。因此严格说它不应该属于 Struts2 框架的,但是在 Web 项目中使用页面布局是无可厚非的一件事情,总不能 Struts2 不能页面布局吧?况且 tiles Struts 中也使用的相当成功,如果 Struts2 中没有对页面布局技术的支持,那肯定会有反对的声音。而 SiteMesh 不仅仅是具有原先 tiles 的功能,它还支持了一些属于设计模式中装饰模式开发理念,开发者同样可以使用它对原有页面进行风格等的修改布置。有一点可以肯定的是它和 tiles 一样都增强了页面的复用性,因此如果使用 Struts2 开发 Web 项目,它也是不可或缺的。

SiteMesh 主要针对以下几点做了处理:

l   所有的 Web 项目页面的布局

l   所有的 Web 项目的链接处理

l   所有的 Web 项目页面风格一致性

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    Struts2讲义-作者:吴峻申

    - **Struts2的“简历”**: - Struts2于2005年由Apache软件基金会推出。 - Struts2不仅继承了Struts1的优点,还吸收了WebWork等其他框架的优点。 - Struts2采用了更加灵活的架构,提供了丰富的插件支持和更强大的...

    入门struts2 hibernate spring实例,初学者适用

    Struts2、Hibernate和Spring(通常简称为SSH)是Java Web开发中的三个核心框架,它们分别负责MVC模式中的Action层、持久化层和依赖注入层。本实例旨在为初学者提供一个集成SSH的入门教程。 **Struts2** 是一个基于...

    jsp struts企业人事人力资源管理系统项目源码和视频教程.zip

    2. 招聘管理:系统可发布招聘信息,收集应聘者简历,进行面试安排,跟踪招聘进度,最终确定录用名单。 3. 考勤管理:记录员工的出勤情况,包括迟到、早退、请假等,自动生成考勤报表,方便管理员进行统计分析。 4....

    Java 教学视频地址

    - **Struts2视频教程**:Struts2是流行的MVC框架,用于构建基于Java的Web应用程序。 - **Hibernate4视频教程**:Hibernate是对象关系映射(ORM)框架,简化了数据库操作。 - **Spring4视频教程**:Spring框架是...

    尚硅谷教学视频

    - **Struts2视频教程**:介绍Struts2框架的配置和使用方法,以及基于该框架的项目开发。 - **Hibernate4视频教程**:学习Hibernate ORM框架的基本概念和使用方法,提高数据访问层的开发效率。 - **Spring4视频教程**...

    SSH架构优缺点分析.rar

    标准struts的action是非线程安全(很多简历上写着"精通Struts"的高手们都忽视的问题) 不熟悉: struts标签库没怎么用过(常用jstl) 国际化只学过,没用过.停留在demo级别 validation.xml(配置文件写多了,有时候也...

    ssh求职招聘.rar

    SSH框架是Java开发中的一个重要概念,全称为Struts2、Spring和Hibernate的组合。这个压缩包"ssh求职招聘.rar"似乎包含了一些与SSH框架相关的学习资料和可能的毕业设计项目,以及与求职相关的文档。下面将详细介绍SSH...

    软件技术开题报告软件技术开题报告

    - 开发资料:包括JSP教程、SQL Server教程、Struts和Hibernate实用教程等相关书籍。 4. **设计目标、要求、思路与预期成果**: - 目标:使用JSP和数据库技术,实现毕业生信息的科学、规范和信息化管理。 - 要求...

    logistics

    - struts2验证框架.doc:Struts2是一个流行的Java Web框架,用于构建MVC(模型-视图-控制器)结构的应用。其验证框架用于确保输入数据的准确性和安全性,对于处理物流数据的系统来说非常重要。 - Java̲Ŀμ14.ppt:...

    基于SSH框架的HR人力资源管理系统

    2. **Struts框架**:作为MVC(Model-View-Controller)设计模式的实现,Struts负责处理HTTP请求,将用户界面与业务逻辑分离。它通过Action类处理用户请求,将数据传递给模型,并更新视图。Struts的配置文件定义了...

    自动化网站系统源码 mysql+jsp+ssh

    2. **招聘管理**:支持发布职位、收集简历、面试安排和候选人评估,实现招聘流程的自动化。 3. **机构管理**:组织架构的设置与调整,包括部门、岗位等信息的维护,便于人员调动和权限分配。 4. **考勤管理**:...

    jsp第6章word文档

    ACCP5.0的电子课件可能包含了视频教程、PDF文档等多媒体学习材料,帮助学员自我学习和复习。 3. **产品使用手册**:这部分内容可能详细介绍了如何使用ACCP5.0课程提供的资源,包括如何下载、更新和安装相关软件。 ...

    JAVA与就业ppt教程(张孝祥)

    框架方面,Struts、Struts2、JSF、Spring MVC等是常见的MVC架构,而Tomcat、JBoss、WebLogic、WebSphere等则是常用的服务器平台。数据库访问层,JDBC是基础,Hibernate、DbUtil、JPA、JdbcTemplate、Ibatis等ORM工具...

    基于SSH框架的web项目

    【基于SSH框架的Web项目】是一个综合性的开发实践,它主要使用了Struts2、Spring和Hibernate这三大流行开源框架,构建了一个功能完善的Web应用程序。SSH框架组合在Java Web开发中广泛使用,提供了模型-视图-控制器...

    java面试题以及技巧

    │ │ │ 275test-2.txt │ │ │ 275test-3.txt │ │ │ 275test-4.txt │ │ │ 275test.txt │ │ │ answer-1.txt │ │ │ answer-2.txt │ │ │ answer-3.txt │ │ │ answer-4.txt │ │ │ Desktop_.ini ...

    java面试题目与技巧1

    │ │ │ 275test-2.txt │ │ │ 275test-3.txt │ │ │ 275test-4.txt │ │ │ 275test.txt │ │ │ answer-1.txt │ │ │ answer-2.txt │ │ │ answer-3.txt │ │ │ answer-4.txt │ │ │ Desktop_.ini ...

    java面试题及技巧4

    │ │ │ 275test-2.txt │ │ │ 275test-3.txt │ │ │ 275test-4.txt │ │ │ 275test.txt │ │ │ answer-1.txt │ │ │ answer-2.txt │ │ │ answer-3.txt │ │ │ answer-4.txt │ │ │ Desktop_.ini ...

    java面试题及技巧3

    │ │ │ 275test-2.txt │ │ │ 275test-3.txt │ │ │ 275test-4.txt │ │ │ 275test.txt │ │ │ answer-1.txt │ │ │ answer-2.txt │ │ │ answer-3.txt │ │ │ answer-4.txt │ │ │ Desktop_.ini ...

    java面试题以及技巧6

    │ │ │ 275test-2.txt │ │ │ 275test-3.txt │ │ │ 275test-4.txt │ │ │ 275test.txt │ │ │ answer-1.txt │ │ │ answer-2.txt │ │ │ answer-3.txt │ │ │ answer-4.txt │ │ │ Desktop_.ini ...

Global site tag (gtag.js) - Google Analytics