Struts2框架
Struts由来
Struts最早是作为ApacheJakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。2000 年Craig R. McClanahan 先生贡献了他编写的JSP Model 2 架构的Application Framework 原始程序代码给Apache 基金会,成为Apache Jakarta 计划Struts Framework 前身。
Struts框架的主要架构设计和开发者是Craig R.McClanahan。Craig 也是Tomcat 4的主要架构师,以及Java Web Services Developer Pack的主要架构师和实现者。他是Sun(于2010年1月被oracle收购)的JavaServer Faces (JSR-127) 以及J2EE平台的Web层架构的规范领导。Craig R. McClanahan 先生是JCP ExpertGroup 成员之一,曾参与JSP 规格制定与Tomcat 4 之编写,因此Struts Framework 广受Java 开发人员群体所重视。Borland 自2002 年底开始于开发工具JBuilder 中支持Struts Framework。
开始的代码基础从2000年5月开始开发,直到2001年6月,1.0版本发布。有30 多个开发者参与进来,并有数千人参与到讨论组中。Struts代码基础由一个志愿的Commnitter团队来管理。到2002年,Struts 小组共有9个志愿Commnitter。
Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Struts 框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts由一组相互协作的类(组件)、Servlet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。同样,软件工程师使用Struts为业务应用的每一层提供支持。它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
Struts演变
Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外的一个优秀的Web框架WebWork的Struts2。Struts 2最初被称为WebWork 2,它是一个简洁的、可扩展的框架,可用于创建企业级Java web应用程序。设计这个框架是为了从构建、部署、到应用程序维护方面来简化整个开发周期。Struts 2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork为核心的。Struts2为传统的Struts1注入了WebWork的先进的设计理念,统一了Struts1和WebWork两个框架。
Struts1分化出来的另外一个框架是Shale。这个框架远远超出了Struts1原有的设计思想,与原有的Struts1关联很少,使用了全新的设计思想。Shale更像一个新的框架而不是Struts1的升级。
Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。 它不仅仅是Struts1 的升级版本,更是一个完全重写的全新的Struts架构。最初,以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后,Webwork框架和Struts社区联合创造了现在流行的Struts2框架。
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
MVC设计模式
Model1架构
Servlet和JSP是开发Web应用程序的主要技术。Servlet被认为优于CGI。 Servlet技术不会创建进程,而是创建线程来处理请求。 创建线程过程的优点是它不分配单独的内存区域。 因此,许多后续请求可以由servlet轻松处理。
Servlet技术中的问题是如果任何设计代码被修改,Servlet需要重新编译。 它不提供分离的关注。视图和业务逻辑混杂。
JSP克服了Servlet的几乎所有问题。 它提供更好的分离关注,现在视图和业务逻辑可以很容易地分离。 如果修改了JSP页面,则不需要重新部署应用程序。 JSP提供支持,使用JavaBean,自定义标签和JSTL开发Web应用程序,以便我们可以将业务逻辑与JSP分离开来,这将更容易进行测试和调试。
如上图所示,有一个显示model1架构流程的图片。
浏览器发送JSP页面的请求
JSP访问Java Bean并调用业务逻辑
Java Bean连接到数据库并获取/保存数据
发送响应到由JSP生成的浏览器
Model1架构的优势
轻松快速开发Web应用程序
Model1的缺点
导航控制是分散的:因为每个页面都包含确定下一页的逻辑。 如果其他页面引用的JSP页面名称被更改,我们需要在导致维护问题的所有页面中进行更改。
耗时:您需要花更多时间在JSP中开发自定义标签。 所以我们不需要使用scriptlet标签。
难以扩展:对于小型应用程序而言更好,但不适用于大型应用程序。
Model2(MVC)架构
Model2基于MVC(模型视图控制器)设计模式。 MVC设计模式由三个模块:模型,视图和控制器组成。
模型——模型主要负责管理应用程序的数据,它通过响应视图的请求和控制器的指令来更新自身的数据。
视图——通过控制器的指令触发所展现的一种特殊的数据格式。它们是基于像JSP、ASP、PHP之类模板系统的脚本,较易与AJAX技术进行整合。
控制器——控制器负责响应用户输入并执行数据模型对象的交互。控制器在接收、确认输入后执行修改数据模型状态的业务操作。
Model2(MVC)架构的优势
导航控制集中:现在只有控制器包含了确定下一页的逻辑。
易于维护
容易扩展
容易测试
更好的分离问题
Model2(MVC)架构的缺点
我们需要编写自己的控制器代码。 如果我们更改控制器代码,我们需要重新编译该类并重新部署应用程序。
Model2架构的解决方案:可配置的MVC组件。它使用声明性方法定义视图组件,请求映射等。它解决了Model2型架构的问题。 Struts框架提供了可配置的MVC支持。 在struts 2中,我们定义了所有的Action类,并在struts.xml文件中查看了组件。
Struts2体系结构
上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。这些是Struts2 MVC模式的体系结构概述,
通过上述图片的描述,我们可以依照下面几点解释在Struts2 中用户的请求生命周期:
用户发送一个资源需求的请求到服务器(例如:页面)。
核心控制器查看请求后确定适当的动作。
使用验证、文件上传等配置拦截器功能。
执行选择的动作来完成请求的操作。
另外,如果需要的话,配置的拦截器可做任何后期处理。
最后,由视图显示结果并返回给用户。
Struts2框架十大优点
POJO表单和POJO动作 - Struts2的Struts框架去除掉了Struts框架中的Action Forms部分, Struts2可以使用任何POJO接收的形式输入。同样现在可以把任何POJO作为一个Action类。
标签支持 - Struts2 改进了标签表单,而新的标签可让开发人员减少代码编写量
AJAX 支持- Struts2中已确认由Web2.0技术接管,创建了功能非常类似于标准的Struts2 标签的AJAX标签
易于整合 - Struts有多种整合方式可使用,现在与其他类型的框架,如Spring、Tiles、SiteMesh之类的,整合更为容易了
模板支持 - 支持使用模板生成视图。
插件支持 - 可以提高核心Struts2的特性,并使用插件增强功能。大量的插件可供Struts2使用。而使用插件可以增强和扩大Struts2 核心行为。
性能分析 - Struts2的分析,调试和分析应用程序提供了集成。除此之外,Struts还提供了集成的内置调试工具调试。
易于修改标签 - Struts2的标签标注,可以调整使用Freemarker的模板。这并不需要JSP或Java知识。基本HTML,XML和CSS知识是足够修改标签。
提倡少配置 - Struts2 使用各种设置的默认值促进减少配置,而你不需要再配置什么除非是偏离了Struts2 设定的默认设置。
视图技术: - Struts2 为多种视图选项(JSP、Freemarker、Velocity、XSLT等)提供支持。
Struts2的三大缺点
更大的学习曲线 - 要使用MVC与Struts,你必须是习惯使用标准的JSP,Servlet API和大量精心设计的框架。
欠佳的文档 - Struts有标准的servlet和JSP API的相比,更少的在线资源,许多用户第一时间发现网上Apache文档混乱和管理不善的组织。
较少透明度 - Struts应用程序中,有很多幕后比正常的基于Java的Web应用程序,这使得它很难理解的框架。
Struts2学习建议
学习之前,您应该熟悉以下技术
Java
Servlet, Filters, JSP, 标签库
JavaBeans
HTML,CSS,JavaScript 和 HTTP
WEB容器 (比如:Tomcat)
XML
Struts 2 需要Servlet API 2.4或更高,JSP 2.0或更高和Java 5或更高
Struts2在线教程
Struts官网-http://struts.apache.org/index.html
易百教程-http://www.yiibai.com/struts_2/
猿教程-http://www.yuanjiaocheng.net/Struts/first.html
w3cschool-https://www.w3cschool.cn/struts_2/
Struts2官方文档中文版-https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=30743745
Struts2开发工具
Eclipse
MyEclipse
Intelli IDEA
Maven
Struts2环境设置
搭建Struts2 开发环境运行一个最小的Struts2 应用程序(HelloWorld),假设你的电脑已经安装了JDK(5+)、Tomcat以及Eclipse,如果你没有安装这些组件那就按照下面列出快捷方式安装:
步骤1 - 安装Java开发工具包(JDK):
你可以在甲骨文网站的Java页面下载最新版本的SDK:Java SE下载链接-http://www.oracle.com/technetwork/java/javase/downloads/index.html。在下载文件中你可以看到安装JDK的说明,按照说明安装及配置设置。最后,设置路径和JAVA_HOME环境变量到引用的包含Java和Javac的目录,通常分别是 java_install_dir/bin 和 java_install_dir 。
如果你是在Windows系统下把SDK安装到C:\jdk1.5.0_20,你需要把以下代码放到你的C:\autoexec.bat文件里。
set PATH=C:\jdk1.5.0_20in;%PATH%
set JAVA_HOME=C:\jdk1.5.0_20
此外,在Windows NT/2000/XP系统中,你也可以右键点击“我的电脑”,选择“属性”→“高级”→“环境变量”,然后将路径值更新并按下“确定”按钮。
在Unix(或Solaris,Linux等)系统中,如果SDK是安装在C盘的 /usr/local/jdk1.5.0_20 ,你可以把以下代码放到 .cshrc 文件中。
setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.5.0_20
另外,如果你使用的是像Borland JBuilder、Eclipse、IntelliJ IDEA或是Sun ONE Studio之类的集成开发环境(IDE),编译运行一个简单的程序来确认IDE找寻到了你安装的Java的位置,否则的话就按照IDE给出的文档做正确的设置。
步骤2 - 安装Apache Tomcat:
你可以从这个地址下载Tomcat的最新版本:http://tomcat.apache.org/。一旦你下载了安装程序,解压二进制发布包到一个便捷的位置,例如Windows的 C:\apache-tomcat-6.0.33 ,Linux或Unix的 /usr/local/apache-tomcat-6.0.33 ,并创建CATALINA_HOME环境变量指向这些位置。
在Windows环境下,可以通过执行以下指令启动Tomcat,或者你可以直接双击 startup.bat 。
%CATALINA_HOME%in\startup.bat
or
C:\apache-tomcat-6.0.33in\startup.bat
在Unix(或Solaris、Linux等)环境下,可以通过执行以下指令启动Tomcat:
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-6.0.33/bin/startup.sh
启动成功后,包含Tomcat的默认web程序就可以通过 http://localhost:8080/ 进行访问了。如果一切正常,那么会显示以下结果:
在这里可发现更多关于配置和运行Tomcat的信息的文档,同样也可登陆Tomcat网站进行查找:http://tomcat.apache.org。
在Windows环境下,可以通过执行以下指令停止Tomcat:
%CATALINA_HOME%in\shutdown
or
C:\apache-tomcat-5.5.29in\shutdown
在Unix(或Solaris、Linux等)环境下,可以通过执行以下指令停止Tomcat:
$CATALINA_HOME/bin/shutdown.sh
or
/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh
步骤3 - 安装Eclipse(IDE)
本系列文章中的所有示例都是使用Eclipse IDE,因此建议你在电脑上安装最新版本的Eclipse。可在这个地址下载安装最新的Eclipse:http://www.eclipse.org/downloads/。一旦你下载了安装程序,解压二进制发布包到一个便捷的位置,例如Windows的 C:\eclipse ,Linux或Unix的 /usr/local/eclipse ,并设置适当的路径变量。
在Windows环境下,可以通过执行以下指令启动Eclipse,或者你可以直接双击 eclipse.exe 。
%C:\eclipse\eclipse.exe
在Unix(或Solaris、Linux等)环境下,可以通过执行以下指令启动Eclipse:
$/usr/local/eclipse/eclipse
启动成功后,如果一切正常,那么会显示以下结果:
步骤4 - 安装Struts2 文件库
如果一切顺利,那么现在你可以继续安装你的Struts2 框架,以下是在电脑上下载和安装Struts2 的简单步骤:
选择是否想要在Windows或者Unix上安装Struts2 ,然后继续下一步,下载适用于Windows或者Unix的压缩文件。
在这个地址下载最新版本的Struts2 二进制文件:http://struts.apache.org/download.cgi。
在编写本教程时我们下载的是struts-2.0.14-all.zip,当你解压下载的文件时,它会在 C:\struts-2.2.3 里显示以下目录结构:
接下来是在任意位置解压zip文件,我们是在Windows 7电脑的C:\文件夹里下载并解压struts-2.2.3-all.zip,这样我们可以把所有jar文件放在C:\struts-2.2.3\lib里。确保你已正确设置CLASSPATH变量,否则你运行应用程序的时候就会遇到问题。