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·
Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A.
1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程
1.3 数据库设计 相关的映射文件:
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.doczj.com/doc/6f11510863.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概述 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方式提交中文时,中文乱码的问题。
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跳转类型
第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的配置找到对应的返回结果。
本文介绍了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:
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.前置通知后置通知
Struts框架技术课程教学大纲 软件工程和软件日强(Java方向) 课程名称:Struts框架技术 预备基础:Java,HTML,Web基础,SQL,UML,J2EE 课程简介: 本课程介绍了当今在Java Web开发中特别流行的MVC模式的Struts2的架构技术。阐述了Struts2如何简化和加快Web的开发速度,提高了Java Web系统的可扩充性,可维护性。讲述了Struts2框架的基本结构,各个组成部件的功能;Struts2框架的配置;Struts2国际化的信息资源,Struts2与Tiles2的融合。 课程管理: 大连理工大学城市学院计算机工程学院。 教学目标: ●熟悉Struts2架构的组成部分。 ●熟悉企业级应用的分层概念和MVC模式,JSPModel1和Model2模型。。 ●Struts2的Web项目的初始配置。 ●Struts2项目开发的基本流程。 ●Action的开发,部署,配置和与Model层的协作。 ●Action的结果和页面跳转的配置和编程。 ●熟练使用Struts2拦截器进行应用的扩展。 ●熟练使用Struts2的OGNL和类型转换。 ●熟练Struts2中文件的上传和下载功能。 ●熟练使用Struts2的标记完成页面的设计和展示。 ●熟练使用Struts2整合Tiles2框架进行页面模版配置和组装。 ●熟练使用Struts2Validator框架进行数据验证 授课计划(Weekly Schedule):
-Struts2处理结果的改进。 -Struts2支持的结果的类型和应用。-结果的配置。 -常见结果的使用。 -动态结果。 -请求参数决定结果。 -全局结果。1.实现各种结果的配置。2.编写Action实现到各种结果的处理。 4主题:Struts2配置 -Bean配置 -包配置。 -常量配置。 -命名空间配置。 -包含配置。 -拦截器配置。试验04: 1.编写Action。 2.配置Action。 3.配置常量 4.配置全局结果。 5.配置Action的命名空间。 5主题:拦截器 -拦截器基本概念。 -AOP编程思想。 -拦截器配置语法。 -Struts2内置的拦截器类型和职责。 -自定义拦截器的编程和配置。 -拦截器应用案例。试验05: 1.了解内置拦截器的使用。2.配置不同拦截器,测试Struts2的运行。 3.编写登录验证的拦截器,如果没有登录则到登录页面。 6主题:文件上传和下载 -文件上传的基本思想。 -文件下载的基本思想。 -编写实现文件上传的Action -配置文件上传的Action。 -使用Struts2控制文件下载。 -实现文件下载的Action。 -文件下载的权限控制。试验06: 1.编写实现文件上传的Action。 2.配置此Action。 3.将上传文件写入数据库。4.将数据库文件读出并实现文件的下载。 7主题:OGNL和类型转换 -什么是OGNL。 -OGNL与EL的区别。 -OGNL的基本语法。 -访问不同Scope中数据的OGNL语法。 -Struts2支持的自动类型转换。 -类型转换过程中的错误处理。试验07: 1.编写Action和Struts2页面读取SCOPE中保存的数 据。 2.完成表单提交中的数据类型转换。 3.编程和配置处理类型转换过程中出现的错误。 8主题:Struts2标记库(1)-FORM标记-Struts2内置的FORM表单元素标记。 -表单标记的通用属性。 -表单元素的name和value属性。 -checkboxlist标记。试验08: 1.使用Struts2的表单标记完成复杂表单页面的设计。2.Action中与页面表单标记的属性的设计和实现。
第一章Struts2的起源和发展 说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也变得越来越总要。 1.1Web技术的发展 随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP 开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP+Servlet 结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维护成本越来越大,最终使开发过程陷入困境。 1.2MVC思想进入Web系统开发 面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负责响应用户需求。老一代的开发框架Struts1便是这时的产物。
关键字:框架,MVC设计模式,XML文档解析,反射机制,Model和View的设计,Controller的设计,读取配置文件,反射生成Action,jQuery插件,jQueryUI,easyUI,JSON,Ajax,配置文件详解,文件上下传,OGNL,国际化,过滤器,拦截器,类型转换,Struts2标签, 第一章自定义MVC框架的 Struts2使用:环境搭建,登陆,Struts2访问ServletAPI对象.数据校验,标签. 配置详解: Struts2的执行过程: 请求>过滤器>拦截器>Action>result > 回调 Action的配置: Action的作用,method属性,Action中动态方法调用,Action中通配符的使用,配置默认的Action