Struts2系列第一篇 Struts2介绍



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变量,否则你运行应用程序的时候就会遇到问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,785评论 0 11
  • 1.什么是框架 什么是框架,框架从何而来,为什么使用框架? 1).框架(framework)——半成品: 1.是一...
    贾里阅读 2,819评论 0 0
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,237评论 0 50
  • 你怕上医院吗? 我一怕自己上医院,二怕陪人上医院。但无可避免,这两种我都经历过。 今天陪同事Y上医院做体检,原约定...
    手绘者焕新阅读 1,937评论 2 0