文档库 最新最全的文档下载
当前位置:文档库 › Struts简介

Struts简介

Struts简介
Struts简介

Struts简介

一、什么是Struts

框架(Framework)是可重用的,半完成的应用程序,可以用来产生专门的定制程序。

您只要细心地研究真实的应用程序,就会发现程序大致上由两类性质不同的组件组成,一类与程序要处理的具体事务密切相关,我们不妨把它们叫做业务组件;另一类是应用服务。比如说:一个税务征管系统和一个图书管理系统会在处理它们的业务方面存在很大的差异,这些直接处理业务的组件由于业务性质的不同不大可能在不同的系统中重用,而另一些组件如决定程序流向的控制、输入的校验、错误处理及标签库等这些只与程序相关的组件在不同的系统中可以很好地得到重用。人们自然会想要是把这些在不同应用程序中有共性的一些东西抽取出来,做成一个半成品程序,这样的半成品就是所谓的程序框架,再做一个新的东西时就不必白手起家,而是可以在这个基础上开始搭建。实际上,有些大型软件企业选择自己搭建这样的框架。但大多数中小型软件企业或者其他组织,没有条件自己建立框架。

Struts作为一个开放原代码的应用框架,在最近几年得到了飞速的发展,在JSP Web应用开发中应用得非常广泛,有的文献上说它已经成为JSP Web应用框架的事实上的标准。那么,究竟什么是Struts呢?

要回答这个问题还得从JSP Web应用的两种基本的结构模式:Model 1和Model 2说起,为了给读者一些实实在在的帮助,并力图让学习曲线变得平坦一些,我想采用实例驱动的方法来逐步深入地回答有关问题,因为,学一门技术的最好方法莫过于在实践中学习、在实践中体会,逐步加深对其精神实质的理解和把握,而不是一上来就引入一大堆新概念让大家觉得无所适从,或者死记硬背一大堆概念而面对一个真正的实际需求束手无策。正如,一个人即使在书本上学成了游泳博士,只要他不下水,我想他也是不大可能真正会游泳的。

Model 1结构如图1所示:

图1

mode1 1是一个以JSP文件为中心的模式,在这种模式中JSP页面不仅负责表现逻辑,也负责控制逻辑。专业书籍上称之为逻辑耦合在页面中,这种处理方式,对一些规模很小的项目如:一个简单的留言簿,也没什么太大的坏处,实际上,人们开始接触一些对自己来说是新的东西的时候,比如,用JSP访问数据库时,往往喜欢别人能提供一个包含这一切的单个JSP页面,因为这样在一个页面上他就可以把握全局,便于理解。但是,用Model 1模式开发大型时,程序流向由一些互相能够感知的页面决定,当页面很多时要清楚地把握其流向将是很复杂的事情,当您修改一页时可能会影响相关的很多页面,大有牵一发而动全身的感觉,使得程序的修改与维护变得异常困难;还有一个问题就是程序逻辑开发与页面设计纠缠在一起,既不便于分工合作也不利于代码的重用,这样的程序其健壮性和可伸缩性都不好。

Grady Booch等人在UML用户指南一书中,强调建模的重要性时,打了一个制作狗窝、私人住宅、和大厦的形象比喻来说明人们处理不同规模的事物时应该采用的合理方法一样,人们对不同规模的应用程序也应该采用不同的模式。

为了克服Model 1的缺陷,人们引入了Model 2,如图2所示:

图2

它引入了"控制器"这个概念,控制器一般由servlet来担任,客户端的请求不再直接送给一个处理业务逻辑的JSP页面,而是送给这个控制器,再由控制器根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此,这个servlet控制器为应用程序提供了一个进行前-后端处理的中枢。一方面为输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点;另一方面也提供了将业务逻辑从JSP文件剥离的可能。业务逻辑从JSP页面分离后,JSP文件蜕变成一个单纯完成显示任务的东西,这就是常说的View。而独立出来的事务逻辑变成人们常说的Model,再加上控制器Control本身,就构成了MVC模式。实践证明,MVC模式为大型程序的开发及维护提供了巨大的便利。其实,MVC开始并不是为Web应用程序提出的模式,传统的MVC要求M将其状态变化通报给V,但由于Web浏览器工作在典型的拉模式而非推模式,很难做到这一点。因此有些人又将用于Web应用的MVC称之为MVC2。正如上面所提到的MVC是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现一个体现MVC思想的程序框架,Struts就是一种具体实现MVC2的程序框架。它的大致结构如图三所示:

图三

图三基本勾勒出了一个基于Struts的应用程序的结构,从左到右,分别是其表示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的servlet接收(ActionServlet Struts已经为我们写好了,只要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的请求参数和Struts配置(struts-config.xml)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。

过程如图四所示:

图四

这里要特别说明一下的是:就是Action这个类,上面已经说到了它是Struts中真正干活的地方,也是值得我们高度关注的地方。可是,关于它到底是属于控制层还是属于模型层,存在两种不同的意见,一种认为它属于模型层,如:《JSP Web编程指南》;另一些则认为它属于控制层如:《Programming Jakarta Struts》、《Mastering Jakarta Struts》和《Struts Kick Start》等认为它是控制器的一部分,还有其他一些书如《Struts in Action》也建议要避免将业务逻辑放在Action类中,也就是说,图3中Action后的括号中的内容应该从中移出,但实际中确有一些系统将比较简单的且不打算重用的业务逻辑放在Action中,所以在图中还是这样表示。显然,将业务对象从Action分离出来后有利于它的重用,同时也增强了应用程序的健壮性和设计的灵活性。因此,它实际上可以看作是Controller与Model的适配器,如果硬要把它归于那一部分,笔者更倾向于后一种看法,即它是Controller的一部分,换句话说,它不应该包含过多的业务

逻辑,而应该只是简单地收集业务方法所需要的数据并传递给业务对象。实际上,它的主要职责是:

校验前提条件或者声明

调用需要的业务逻辑方法

检测或处理其他错误

路由控制到相关视图

上面这样简单的描述,初学者可能会感到有些难以接受,下面举个比较具体的例子来进一步帮助我们理解。如:假设,我们做的是个电子商务程序,现在程序要完成的操作任务是提交定单并返回定单号给客户,这就是关于做什么的问题,应该由Action类完成,但具体怎么获得数据库连接,插入定单数据到数据库表中,又怎么从数据库表中取得这个定单号(一般是自增数据列的数据),这一系列复杂的问题,这都是解决怎么做的问题,则应该由一个(假设名为orderBo)业务对象即Model来完成。orderBo可能用一个返回整型值的名为submitOrder的方法来做这件事,Action则是先校验定单数据是否正确,以免常说的垃圾进垃圾出;如果正确则简单地调用orderBo的submitOrder方法来得到定单号;它还要处理在调用过程中可能出现任何错误;最后根据不同的情况返回不同的结果给客户。

二、为什么要使用Struts框架

既然本文的开始就说了,自己可以建这种框架,为什么要使用Struts呢?我想下面列举的这些理由是显而易见的:首先,它是建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC 所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;其次,它是个开源项目得到了包括它的发明者Craig R.McClanahan在内的一些程序大师和高手持续而细心的呵护,并且经受了实战的检验,使其功能越来越强大,体系也日臻完善;最后,是它对其他技术和框架显示出很好的融合性。如,现在,它已经与tiles融为一体,可以展望,它很快就会与JSF等融会

在一起。当然,和其他任何技术一样,它也不是十全十美的,如:它对类和一些属性、参数的命名显得有些随意,给使用带来一些不便;还有如Action类execute 方法的只能接收一个ActionForm参数等。但瑕不掩瑜,这些没有影响它被广泛使用。

三、Struts的安装与基本配置

我们主要针对Struts1.1版本进行讲解,这里假定读者已经配置好java运行环境和相应的Web容器,本文例子所使用的是j2sdk和Tomcat4.1.27。下面,将采用类似于step by step的方式介绍其基础部分。

安装Struts

到https://www.wendangku.net/doc/d514698611.html,/ 下载Struts的安装文件,本文例子使用的是1.1版。

接下来您要进行如下几个步骤来完成安装:

1、解压下载的安装文件到您的本地硬盘

2、生成一个新的Web应用,假设我们生成的应用程序的根目录在

/Webapps/mystruts目录。在server.xml文件中为该应用新建一个别名如

/mystruts

3、从第1步解压的文件中拷贝下列jar文件到

/Webapps/mystruts/WEB-INF/lib目录,主要文件有如下一些。

4、创建一个web.xml文件,这是一个基于servlet的Web应用程序都需要的部署描述文件,一个Struts Web应用,在本质上也是一个基于servlet的Web应用,它也不能例外。

Struts有两个组件要在该文件中进行配置,它们是:ActionServlet和标签库。下面是一个配置清单:

上面我们在web.xml中完成了对servlet和标签库的基本配置,而更多的框架组件要在struts-config.xml中进行配置:

5、创建一个基本的struts-config.xml文件,并把它放在

/Webapps/mystruts/WEB-INF/目录中,该文件是基于Struts应用程序的配置描述文件,它将MVC结构中的各组件结合在一起,开发的过程中会不断对它进行充实和更改。在Struts1.0时,一个应用只能有一个这样的文件,给分工开发带来了一些不便,在Struts1.1时,可以有多个这样的文件,将上述缺点克服了。需在该文件中配置的组件有:data-sources

配置清单如下:

到此为止,我们已经具备了完成一个最简单Struts应用的所需的各种组件。前面已经提到,在开发过程中我们会不断充实和修改上面两个配置描述文件。下面我们将实际做一个非常简单的应用程序来体验一下Struts应用开发的真实过程,以期对其有一个真实的认识。在完成基础部分的介绍后,笔者会给出一些在实际开发中经常用到而又让初学者感到有些难度的实例。最后,会介绍Struts与其他框架的关系及结合它们生成应用程序的例子。

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍 热12已有 14625 次阅读 2009-07-12 18:53 [顶]3G移动--Android开发工程师全能班 (转) Struts2学习之二--Struts2标签介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL:Max.M.Yuan@https://www.wendangku.net/doc/d514698611.html,。 在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。 分类将标志库按功能 分成HTML、Tiles、 Logic和Bean等 几部分 严格上来说,没有分类,所有标志都在URI 为“/struts-tags”命名空间下,不过, 我们可以从功能上将其分为两大类:非UI 标志和UI标志 表达式语言(expression languages)不支持嵌入语言 (EL) OGNL、JSTL、Groovy和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。 1.非UI标志 o if、elseif和else 描述: 执行基本的条件流转。

参数: 名称必 需 默 认 类型描述备注 test 是Boolean 决定标志里内容是否 显示的表达式 else标志 没有这个 参数 id 否Object/String 用来标识元素的id。在UI和表单中为HTML的id属性 例子: <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> Condition Flow

Condition Flow

" /> Max's file here Scott's file here

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

Struts2S2-020漏洞介绍

Struts2 S2-020漏洞简介 1.漏洞概述 今年二月初,Apache Tomcat项目组委员会成员Mark Thomas提到CVE-2014-0050漏洞本是通过JPCERT上报给Apache软件基金会,但是由于处理邮件失误,导致漏洞细节泄露,使得这个问题提前曝光。随后在三月,Apache 官方公布了S2-020漏洞公告,公告里简要描述了该漏洞形成的原因和临时解决方案。在官方这个通告公布的一段时间后,各大厂商已经采取了相应的安全措施去解决或预防这个漏洞。但在不久之后,在SecurityFocus、Spiderlabs等安全网站上又披露了CVE-2014-0094漏洞修补方案本身存在漏洞,导致补丁被完全绕过,造成更大的危害。近日,官方在GitHub上已经对该问题做出了修正,但随后发现该修正方案也可绕过。 2.漏洞危害 官方在S2-020漏洞公告里介绍了两种漏洞(CVE-2014-0050、CVE-2014-0094):一是通过Commons-fileupload造成的拒绝服务攻击;另一个是附加的ParametersInterceptor允许访问'class' 参数(该参数直接映射到getClass()函数),并允许控制ClassLoader。例如,给当前应用目录赋值地址映射目录是攻击者可控的目录时,攻击者便可轻易地执行预先设置好的代码;另一个危害是给当前应用目录赋值一个不存在的地址(class.classLoader.resources.dirContext.docBase=不存在路径)会导致应用404,这样当前应用,以后不管访问哪个地址都是404了(因为映射的目录不存在),造成DoS效果。 近日安全研究人员发现Apache Struts2 S2-020,在CVE-2014-0094的漏洞修补方案中存在漏洞,漏洞补丁存在被绕过的风险,可能导致执行任意代码。3.解决方案 官方解决方案:升级struts版本到2.3.16.1。如果Struts不能升级到2.13.16.1版本,官方建议升级Commons FileUpload到1.3.1版本(避免Dos攻击),然后在ParametersInterceptor排除'class' 参数(将'^class\.*'添加到excludeParams

java-struts2复习题

Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的 C.struts1和struts2中都使用ActionForm对象封装用户的请求数据 D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 D.ValueStack会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: A.struts2框架使用包来管理常量 B.struts2框架定义包时必须指定name属性 C.struts2框架中配置包时,必须继承自struts-default包,否则会报错 D.struts2框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: A.ActionName?methodName.action B.ActionName! methodName.action C.ActionName*methodName.action D.ActionName@mathodName.action 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现

struts2 实验报告

1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程

1.3 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

Struts2的介绍及总结

Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。 线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过web页面上的taglibs访问。 表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。Struts2不仅支持JSTL, Struts2 还可使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验:Struts2支持通过validate方法和XWork校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

Struts2的工作机制原理分析及实例

Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.wendangku.net/doc/d514698611.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。

基于Struts2框架的信息发布系统的设计与初步实现

第一章Struts2的起源和发展 说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也变得越来越总要。 1.1 Web技术的发展 随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP 开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP + Servlet 结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维护成本越来越大,最终使开发过程陷入困境。 1.2 MVC思想进入Web系统开发 面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负责响应用户需求。老一代的开发框架Struts1便是这时的产物。

struts2的发展极其优势

Struts 2 目录 Struts 2 概述 Struts技术的发展概况 Struts2体系结构 Struts2和Struts1的对比 WebWork和Struts2的对比 Struts2 五种默认返回类型名 编辑本段Struts 2 概述 Struts 2是Struts的下一代产品。是在struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。 编辑本段Struts技术的发展概况 经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明。市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。 对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。其次,Struts1与Servlet API 的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。 从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和Spring MVC等。这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。这些框架的出现也促进了Struts的发展。目前,Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外的一个优秀

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

struts框架介绍

这章适合做参考,如果你那里不清楚,可上这里查技术资料 二.Struts框架 struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。 本章详细讨论struts架构。我们将看到struts是如何清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序过程的。我们还将介绍struts提供的类如何使得开发工作更加简单,这些类包括: ●控制程序流程的类 ●实现和执行程序事务逻辑的类 ●自定义的标记库使得创建和验证HTML表单更加容易 1.Struts压缩包内容 文件夹jakarta-struts-1.0.2包含两个目录,lib和webapps。在lib目录中有使用struts创建 在webapps目录下有如下文件: 让我们从MVC角度观察struts框架中的组件

框架中三个部分:模型,视窗和控制器。 模型 在struts框架中,模型分为两个部分: ●系统的内部状态 ●可以改变状态的操作(事务逻辑) 内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。 大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean 调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。 视窗 由JSP建立,struts包含扩展的自定义标签库,可以简化创建完全国际化用户界面的过程。控制器 struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。 2.Struts框架中的组件 (由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和Tag Library包含进来,有时间作完替换)

struts2框架

Struts2 1.Struts2介绍 Struts2是Apache发行的MVC开源框架。Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的。在MVC流程框架中充当控制器角色。 M:model-----数据封装------->javabean(Hibernate、MyBatis) V:view------视图----------->jsp(JSTL+EL) C:control------控制器--------> struts2( filter) 2.开发第一个Hello word 2.1导包 1)struts2-core-2.x.x.jar :Struts 2框架的核心类库 2)xwork-2.x.x.jar :XWork类库,Struts 2在其上构建 3)ognl-2.6.x.jar :对象图导航语言(Object Graph Navigation Language),Struts 2框架使 用的一种表达式语言 4)freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写 5)commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持 Log4J和JDK 1.4+的日志记录。 6)Commons-fileupload 拷进去

2.2 配置struts 的核心过滤器 2.3 struts.xml文件

2.4 编写Action 2.5 编写JSP页面

3.在Struts.xml配置Action 3.1 默认值 3.2 result跳转类型

Struts+Hibernate+Spring+三个框架简介

Struts 是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,因而吸引了众多的开发人员的关注。 首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command 模式,每个继承Action的子类都必须实现一个方法execute。 struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。 Struts框架可分为以下四个主要部分: 1、模型(Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts- config.xml文件描述的配置信息的。 2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。 3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。

Struts2+Hibernate架构技术教程课后参考答案

第1章Struts2框架技术入门 1.5 习题 1.5.1 选择题 1.D 2.A 3.C 4.B 5.B 1.5.2 填空题 1.MVC 2.Struts1和WebWork 3.IBM 4. FilterDispatcher 5.JSP、Struts2标签 1.5.3 简答题 1.简述MVC设计模式的工作流程。 答:MVC设计模式工作流程是: (1)用户的请求(V)提交给控制器(C); (2)控制器接受到用户请求后根据用户的具体需求,调用相应的JavaBean或者EJB(M部分)来进行处理用户的请求; (3)控制器调用M处理完数据后,根据处理结果进行下一步的调转,如跳转到另外一个页面或者其他Servlet。 2.简述Struts2的工作原理。 答:Struts2中使用拦截器来处理用户请求,从而允许用户的业务控制器Action与Servlet分离。用户请求提交后经过多个拦截器拦截后交给核心控制器FilterDispatcher处理,核心控制器读取配置文件struts.xml,根据配置文件的信息指定某一个业务控制器Action(POJO类)来处理用户数据,业务控制器调用某个业务组件进行处理,在处理的过程中可以调用其他模型组件共同完成数据的处理。Action处理完后会返回给核心控制器FilterDispatcher一个处理结果,核心控制器根据返回的处理结果读取配置文件struts.xml,根据配置文件中的配置,决定下一步跳转到哪一个页面。 一个客户请求在Struts2框架中处理的过程大概有以下几个步骤: (1)客户提交请求到服务器; (2)请求被提交到一系列的过滤器过滤后最后到FilterDispatcher; FilterDispatcher是核心控制器,是基于Struts2中MVC模式的控制器部分; (3)FilterDispatcher读取配置文件struts.xml,根据配置信息调用某个Action来处理客户请求; (4)Action执行完毕,返回执行结果,根据struts.xml的配置找到对应的返回结果。

Struts2框架优缺点

本文介绍了java开发流行框架struts2以及webwork的一些安全缺陷,并举例说明框架本身以及开发人员使用 框架时,所产生的种种安全问题,以及作者挖掘框架安全漏洞的一些心得体会。推荐以下人群阅读 了解java开发 了解框架开发 了解web application安全 “网络安全爱好者” 正文 当前java开发网站,通常不会是纯JSP的,大都使用了java framework。 有了这些framework,让开发人员更加快速的开发出代码,也让代码非常具有可扩展性,那些分层架构的思想, 更是深入人心。这些也大大影响了安全代码审核,曾提出“分层审核代码”的思想,比如在DAO层专门检查 sql注入,在view层检查xss等。这些框架都有自己的层级,本次文章主要讲的是struts这个框架的相关 安全问题,也会有小部分涉及到struts后面的DAO层。 而struts这个框架更新占有市场份额极大的一个框架,它在各个层级中,位于如图所示位置:

可以看到struts在web应用中,负责处理接收用户数据,调用业务处理,以及展示数据的工作。所以本文把 struts的功能分为controller层和view层,controller层来完成接收用户数据,分发用户请求,而view专门 用于展示数据。 一个单独的struts,是不合逻辑的,因为架构师通常喜欢多种框架集合,让它们各自负责某一层的处理。 研究一个框架的安全问题,不能仅仅站在框架的角度,还应该充分考虑到开发人员是如何使用这些框架的, 他们最喜欢写什么样的代码,这样才能还原一个正常的、完整的web应用场景。从搜索结果看,互联网中,绝大多数教程推荐struts+hibernate+spring这样的黄金组合,那么,我假设有 一个应用使用了这个组合,以struts为重点,站在攻击者的角度,层层分析struts的设计缺陷。 Struts2开发回顾与简单学习 为了让大家回顾或者学习一下struts2,我们一起来建立一个action、jsp页面,做一个接收用户输入,之后 处理一下,再展示出来给用户的过程,精通struts2的同学可以跳过此步。 -------------------------------------struts回顾start 首先建立action,叫做AaaaAction:

Struts框架和Hibernate框架的整合完整版介绍

Struts框架和Hibernate框架的整合 1、首先写一个student的实体类,命名为:StudentEntity.java package com.liu.student.entity; /** * 数据库表的映射实体类文件 * @author Calasin */ public class StudentEntity { private String s_id;// 学号 private String s_name;// 姓名

private int s_age;// 年龄 public String getS_id() { return s_id; } public void setS_id(String s_id) { this.s_id = s_id; } public String getS_name() { return s_name; } public void setS_name(String s_name) { this.s_name = s_name; } public int getS_age() { return s_age; } public void setS_age(int s_age) { this.s_age = s_age; } public String toString() { return"StudentEntity [s_id="+ s_id+ ", s_name="+ s_name + ", s_age=" + s_age + "]"; } } 2、接着写student实体类StudentEntity的配置文件:StudentEntity.hbm.xml

Struts2介绍

Struts2集成指南 关于Struts2 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller〔MVC〕设计模式的应用框架〔Web Framework〕,是MVC经典设计模式中的一个经典产品。 Struts,a history 在Java EE的Web应用发展的初期,除了使用Servlet技术以外,普遍是在JavaServer Pages(JSP)的源代码中,采用HTML与Java代码混合的方式进行开发。因为这两种方式不可避免的要把表现与业务逻辑代码混合在一起,都给前期开发与后期维护带来巨大的复杂度。为了摆脱上述的约束与局限,把业务逻辑代码从表现层中清晰的分离出来,2000年,Craig McClanahan采用了MVC的设计模式开发Struts。后来该框架产品一度被认为是最广泛、最流行JAVA的WEB应用框架。 Craig McClanahan 2006年,WebWork与Struts这两个优秀的Java EE Web框架(Web Framework〕的团体,决定合作共同开发一个新的,整合了WebWork与Struts优点,并且更加优雅、扩展性更强的框架,命名为“Struts 2”,原Struts的1.x版本产品称为“Struts 1”。 至此,Struts项目并行提供与维护两个主要版本的框架产品——Struts 1与Struts 2。

Struts1 vs. Struts2 侵入性 Struts 1 在编程方面是面向抽象类编程,而不是面向接口编程。Struts 1要求自定义Action 类继承一个特定的抽象基类Action。另一方面,Struts 1的 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。例如 e.g. public class LogonAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { } } Struts 2 Action 类可以实现一个Action接口,也可以实现其他接口,甚至不实现任何接口。这使得可选的和定制的服务成为可能。 e.g. public class ExampleAction { public String doSomething() { return"success"; } } 线程模式 Struts 1 Action类是单例模式并且必须是线程安全的,因为在web容器中,仅有Action类的一个实例来处理所有的请求。 Struts2 Web容器为每一个请求产生一个Action类实例,因此没有线程安全问题。

Struts2+Hibernate框架技术教程课后习题答案(张志峰主编)

1.5习题(第33页) 1.5.1选择题 D C C B B 1.5.2填空题 1.MVC 2.Struts Hibernate 3.IBM 4.FilterDispatcher 5. JSP Struts标签 2.7习题(第86页) 2.7.1选择题 B C B D B D 2.7.2填空题 1.struts.xml struts.properity 2.struts.xml struts.properity web.xml 3.Action 拦截器 4.完全分离 5.IOC和非ioc 6.不指定method 不指定method 7.表达式根对象上下文环境 8.UI标签非UI标签 9.表单标签非表单标签 10.控制标签数据标签 3.6习题(第133页) 3.6.1选择题 A A B C C 3.6.2填空题 1..properties 2.native2ascii 3.AOP 4.服务器端校验 5.5习题(第237页) 5.5.1选择题 A B A 5.5.2填空题 1. JDBC ORM

2. Hibernate.cfg.xml Hibernate.properities 3. Hibernate.hbm.xml 4. 临时状态持久状态脱管状态 7.6习题(第326页) 6.11.1选择题 B A C 6.11.2填空题 1.一对一一对多多对多 2.HQL Criteria query native sql 3.一级cache 二级cache Spring3 9.5习题 9.5.1选择题 B A C 9.5.2填空题 1.配置条件 2.bean factory接口及相关类 application contest接口及相关类 3.设置注入构造注入 10.7.1选择题 B D C 10.7.2填空题 1.静态AOP 动态AOP 2.通知 3.静态代理动态代理 4.前置通知后置通知

相关文档