Struts2与Struts1对比
- 格式:doc
- 大小:181.00 KB
- 文档页数:30
学习struts2.2.1遭遇滑铁卢~~~~~好多异常~~~~~好多bug~~~~好多问题~~~~~~好多困难~~~好多肥羊~~~一、Filter mapping specifies an unknown filter name ----filter标签在web.xml 里的顺序<filter-mapping><filter-name>adminOperateLogFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>adminOperateLogFilter</filter-name><filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class></filter>这样写启动服务器时报错 Filter mapping specifies an unknown filter nameadminOperateLogFilter将这两块换个顺序就没问题了,web.xml信息的加载是有顺序的,filter在mapping之前必须要让服务器找到其定义。
<filter><filter-name>adminOperateLogFilter</filter-name><filter-class>com.berheley.exam.web.filter.AdminOperateLogFil ter</filter-class></filter><filter-mapping><filter-name>adminOperateLogFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>二、ng.IllegalArgumentException: Filter mapping specifies an unknown filter nameStruts2答:“Struts2”?大写的?are you sure?我猜你一定是看了某struts2.0的权威指南(那是一个chm文件电子书,而且你看的可能是翻译成中文的),我不知道英文版的有没有写错,但是我检查了很久后才发现中文版存在这个大小写错误。
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
javaEE常⽤开源框架的认识及概述对javaEE框架的认识⼀、什么是框架通俗的理解,框架是我们软件开发中的⼀套解决⽅案,不同的框架解决的问题是不同的,⽐如MyBatis框架解决的是持久层的问题,springMVC框架解决的是表现层的问题。
需要注意的是,框架它本⾝⾃⼰是不能实现业务上的功能,它只能对,⽐如说持久层、表现层、结构合理性等等,提供⼀些解决⽅案,⽽真正的业务层部分,还需要程序员⾃⼰来提供。
所以说,框架可以理解为⼀个半成品,我们选⽤这个半成品,然后加上业务需求(即项⽬中的需求)来最终实现整个的功能。
⽽我们使⽤框架的⽬的其实也很简单,就是为了提⾼开发的效率,⽽不⽤关⼼⼀些繁琐的、复杂的底层代码实现,从⽽把更多的精⼒⽤在需求的实现上。
⼆、框架能帮我们解决哪些问题要明⽩框架能解决哪些问题,⾸先要知道三层架构。
三层架构分为三层:表现层:是⽤于展⽰数据的;业务层:是处理业务需求的;持久层:是和数据库交互的。
从这张图可看出上⾯列出的三个框架和三层架构所处的位置。
可以看出MyBatis框架是⼀个持久层框架,它是和数据库交互的;⽽下⾯的Spring框架有点特殊,它不属于任何⼀层;SpringMVC框架是处于表现层的,它是⼀个表现层框架。
从这张图可⼤致得出,不同的框架是各司其职的,它们解决某⼀层或者某⼀类的事情。
三、对⼀些主流框架的认识由于以下具体的框架都没有学过,所以只能说⼀说,我对这些框架的⼤体认识,可能对于某些框架没⽤使⽤过和对⽐过很难对它的优势有深刻的认识,只能在后续的学习中,深⼊理解。
1、Struts2框架Struts2框架处于三层架构的表现层,可以⽤来替代掉Servlet技术,来处理前端访问服务器的请求(如表单、页⾯提交过来的请求),所以Struts2是属于⼀个前端处理的框架。
下图显⽰了Struts2框架在三层架构中的位置:对于web⽇常的⼯作,⽐如获取请求参数、转发、重定向、校验参数等等,使⽤Servlet技术基本都可以完成。
Struts2系列漏洞起始篇前⾔到⽬前位置struts2的漏洞编号已经到了S2-057,⼀直想系统的学习下Struts2的漏洞,但由于⼯作量较⼤,⼀直搁浅。
最近由于⼯作需要,借此机会来填下坑。
个⼈认为⼀个框架漏洞出来了仅仅看下别⼈分析的⽂章是远远不够,因为这些⽂章往往都只针对个别漏洞,可能框架中还存在类似的漏洞你依然发现不了。
所以我说需要系统的学习下,从框架的源码开始分析它的⼯作流程(当然这⾥我会有所取舍,全部都讲没意义),同时这样也会加深⾃⼰对该框架的理解,之后如果⼀个新的漏洞出来了,你可以仅根据官⽅的公告或变动的代码很简单地还原整个漏洞,同时这样做对代码审计也会有⼀定的帮助。
这是我struts2系列⽂章的第⼀篇,篇幅会⽐较长(实际上分析源码的地⽅我已经省了很多)。
之后我还会写spring、tomcat等系列的漏洞分析⽂章。
准备⼯作我使⽤的是eclipse+struts-core2.1.6,struts2的各版本是由些许区别的,但是⼤致流程都是相同的,这⾥采⽤较⽼的版本是因为S2早期的漏洞都可以在⾥⾯找到,⽅便分析。
Struts2的⼯作流程在原⽣的jsp+servlet项⽬中,常⽤会到Filter过滤器来过滤⼀些参数等等,这⾥struts2就是将⾃⼰的核⼼过滤器配置在web.xml中,这样可以让指定的HTTP请求都经过Struts2。
早期struts2的核⼼过滤器是FilterDispathcer (org.apache.struts2.dispatcher.FilterDispatcher),但是struts2>=2.1.3之后就变为了StrutsPrepareAndExecuteFilter,⽽StrutsPrepareAndExecuteFilter在配置的时候也经常会分开为StrutsPrepareFilter和StrutsExecuteFilter,这是⽅便开发者更加灵活的使⽤,配置信息如下:Filter的执⾏顺序是然配置顺序来的,所以这⾥我们先从StrutsPrepareFilter开始分析。
一、目前软件开发四大主流技术介绍:A、数据库技术:是应用开发的基础技术,80%以上的应用系统需要使用数据库来存放业务数据;B、客户端页面技术:是客户端/服务器开发模式下最基本的技术(例如我们经常上网所浏览的页面,都属于软件的客户端技术),调查显示,要开发一个典型的应用系统,编写客户端页面、动态脚本和页面动画,需要花掉项目组40%-60%的开发时间,并且很多企业会把这些工作安排给新入职的员工所以熟练掌握客户端技术是程序员的基本的素养;C、Java 技术:Java 技术是目前最为流行的软件开发技术,我们对2407 家企业的职位分析数据表示,有48.96%的软件开发企业要使用到Java语言,因此,ACCP5.0课程中将由浅入深详细讲解这技术;D、.NET 技术:.NET 技术发展得非常快,短短几年时间已经发展到能够与Java两分天下的程度,并且.NET技术在原理、使用方式上已经与Java大同小异,经验表明,在掌握了Java或者.NET语言后,只需要再花20%的精力就可以掌握另外一门语言,我们在课程中同时安排了Java 和.NET开发语言,并且以对比的方式进行教学,必将为学员提供更宽阔的发展道路。
二、北大青鸟课程:北大青鸟ACCP5.0 课程,国内权威的软件开发课程,由北京大学和印度APTECH 联合开发,致力于培养国内紧缺的软件开发工程师,主要包含四大块技术内容,即:数据库技术、客户端页面技术、Java开发技术和.NET开发技术:1、数据库技术方面内容说明:第一学期的《使用SQL Server管理和查询数据》,讲解了创建数据库和数据库表、使用SQL语句增加、修改和删除和查询数据,学习完成以后能够操作数据库,执行最基本的查询,而第二学期的《SQL Server数据库设计和高级查询》是在第一学期的基础上讲解数据库设计、数据库高级对象的使用。
《0racle数据库对象和数据查询》为第二学年的免费课时,讲解了安装和配置Oracle、SQL查询、数据库高级对象:视图、索引、PL/SQL程序设计等高级内容。
struts2-convention-plugin 注解使用说明概述及解释说明1. 引言1.1 概述在现代的Web开发中,Struts2作为一个成熟稳定的Java Web框架,在业界得到广泛应用和认可。
而struts2-convention-plugin则是Struts2框架中一个重要的插件,它通过引入注解的方式来简化配置文件,并提供了一种更便捷、高效的开发方式。
1.2 文章结构本文将详细介绍struts2-convention-plugin的注解使用说明,并以概述、注解说明、使用示例等部分来逐步讲解。
接着,我们将对其进行解释说明,包括与传统struts.xml配置方式的比较、使用时需要注意的事项以及实际应用案例。
最后,我们将总结文章要点并给出对于注解方式的评价和展望。
1.3 目的本文旨在帮助读者更好地理解和掌握struts2-convention-plugin插件中注解的使用方法。
通过本文介绍和示例演示,读者将能够快速上手并灵活运用该插件,从而提高开发效率和代码质量。
以上是“1. 引言”部分内容,请根据需要进行修改和补充。
2. struts2-convention-plugin 注解使用说明:2.1 概述:struts2-convention-plugin 是Struts2 框架中的一个插件,它提供了一种基于注解的方式来配置和管理Action 类。
通过使用这个插件,我们可以简化传统的XML 配置文件,并且能够更加便捷地进行开发。
2.2 注解说明:struts2-convention-plugin 提供了一系列的注解,用于配置和定义Action 类及其相关属性和方法。
以下是常用的几个注解:- @Action:用于标识一个方法作为Action 的入口方法,可以指定URL 映射及HTTP 请求类型。
- @Result:用于指定一个结果视图,可以定义对应的视图页面、重定向操作等。
- @Param:用于将请求参数绑定到Action 类的属性上。
基于Struts2结构的在线考试系统设计与实现作者:唐晔来源:《软件导刊》2013年第06期摘要:基于Struts2和J2EE技术框架,结合MySQL数据库,设计并实现了一个基于B/ S 架构的在线考试系统,重点阐述了用户答题模块的设计,并提出了一种系统随机出题的方法。
关键词:在线考试系统;Struts2技术;J2EE;随机出题中图分类号:TP319文献标识码:A文章编号:1672-7800(2013)006-0071-02作者简介:唐晔(1973-),男,遵义师范学院计算机科学与技术系副教授,研究方向为计算机网络。
0引言根据市场需求,网站的开发需要高效,同时考虑到网站的盈利性,则需要降低人力成本和资源成本。
目前,大部分基于Java开发的网站都采用了Struts2的框架结构,并结合MySQL 数据进行开发,以降低开发成本和提高开发效率。
Struts2是基于MVC模式的开发,Struts2框架为程序员的开发带了极大方便,同时也更好地满足了用户的多样化需求。
本系统是基于Struts2开发的一个在线考试系统,同时采用了J2EE技术,结合Mysql数据库,设计并实现了一个基于B/S架构的网上考试系统,并提出了一种系统随机出题的方法。
1系统总体设计使用在线考试系统的用户必须是注册用户,使用时要先登录。
当用户选择某种测试后,系统会自动给出题目进行考试。
考试开始时,系统自动计时,用户必须在规定的时间内完成考试,否则时间到了则不能答题。
用户答完题后可以直接提交,系统会在用户自主提交或时间超时的情况下对用户所做的题进行评分。
用户信息和试题维护由管理员进行管理,当管理员进入管理时,也需要有一个登录验证功能来验证是否有权限进入管理页面。
管理员可以完成录入、修改、添加、删除等功能,还可以把已保存在文本文件里的数据导入到数据库中。
本系统总体结构如图1所示。
2系统设计2.1数据表设计根据系统功能要求,构建如下数据表,其中有下划线的是主键:用户表(用户标号、登录名、密码、邮箱、登录状态):建立用户的基本情况,主要用于登录网络考试系统;管理员表(管理员标号、登录名、密码、登录状态):建立管理员的基本情况,主要用于登录数据库管理;选择题表(编号、题干、选项1、选项2、选项3、选项4):提供考试题中的选择题,其中“选项1”为正确答案;填空题表(编号、题干、答案):提供考试题中的填空题;套题记录表(编号、题目类型、年号、月号):用于记录套题包含的选择题和填空题,该表信息在录入试题时由系统自动填写;成绩表(用户标号、考试时间、成绩):记录用户考试成绩。
Structs 中基本配置入门第一章 Structs 的基本配置 1.为 Structs 应用配置 Web.xml 文件 第一步:配置 ActionServlet action org.appache.structs.ActionServletaction *.do 注意:不管应用中包含多少个子应用,都只需配置一个 ActionServlet,因为 ActionServlet 支持 多线程,目前的 Structs 框架只允许在应用中配置一个 ActionServlet。
第二步:初始化参数对 Servlet 的运行环境进行初始化配置。
action org.appache.structs.ActionServlet config /WEB-INF/structs-config.xml表 2-1. Struts1.1 中用到的初始化参数 参数名 含义/默认值 config 以相对路径的方式指明 Struts 应用程序的配置文件位置。
如不设置,则默认值为 /WEB-INF/struts-config.xml。
config/sub1 以相对路径的方式指明子应用程序的配置文件位置,一般来说,很少用到子应 用程序,在此不多描述。
debug 设置 Servlet 的 debug 级别,控制日志记录的详细程度。
默认为 0,记录相对最少的 日志信息。
detail 设置 Digester 的 debug 级别,Digester 是 Struts 框架所使用的用来解析 xml 配置文 件的一个框架,通过该设置,可以查看不同详细等级的解析日志。
默认为 0,记录相对最少的日志信息。
第三步:配置欢迎清单 当客户访问 Web 应用时,如果仅仅给出 Web 应用的 Root URL,没用指定具体的文件名, Web 容器会自动调用 Web 应用的欢迎文件。
welcome.jsp index.jsp 说明:可以包含多个子元素,首先查找第一个文件。
Struts2与Struts1对比Struts2与Struts1Struts2与Struts1对比Action 类:Struts1要求Action类继承一个抽象基类。
Struts1的一个普遍问题是使用抽象类编程而不是接口。
Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。
Action资源必须是线程安全的或同步的。
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
(实际上,servlet 容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)Servlet 依赖:Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和HttpServletResponse被传递给execute方法。
Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2 Action 仍然可以访问初始的request和response。
但是,其他的元素减少或者消除了直接访问HttpServetRequest 和HttpServletResponse的必要性。
可测性:测试Struts1 Action的主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。
一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:Struts1 使用ActionForm对象捕获输入。
所有的ActionForm必须继承一个基类。
因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。
动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
输入属性可能是有自己(子)属性的rich对象类型。
Action属性能够通过web页面上的taglibs访问。
Struts2也支持ActionForm 模式。
rich对象类型,包括业务对象,能够用作输入/输出对象。
这种ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言:Struts1 整合了JSTL,因此使用JSTL EL。
这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language"(OGNL).绑定值到页面(view):Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用"V alueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
V alueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:Struts 1 ActionForm 属性通常都是String类型。
Struts1使用Commons-Beanutils进行类型转换。
每个类一个转换器,对每一个实例来说是不可配置的。
Struts2 使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons V alidator的扩展来校验。
同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性Action执行的控制:Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action 必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。
堆栈能够根据需要和不同的Action一起使用。
--------------------------------------------------------------------------------注释struts.action.extensionThe URL extension to use to determine if the request is meant for a Struts action用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置action的后缀,例如login.do的'do'字。
struts.configurationThe org.apache.struts2.config.Configuration implementation classorg.apache.struts2.config.Configuration接口名struts.configuration.filesA list of configuration files automatically loaded by Strutsstruts自动加载的一个配置文件列表struts.configuration.xml.reloadWhether to reload the XML configuration or not是否加载xml配置(true,false)struts.continuations.packageThe package containing actions that use Rife continuations含有actions的完整连续的package名称struts.custom.i18n.resourcesLocation of additional localization properties files to load加载附加的国际化属性文件(不包含.properties后缀)struts.custom.propertiesLocation of additional configuration properties files to load加载附加的配置文件的位置struts.devModeWhether Struts is in development mode or not是否为struts开发模式struts.dispatcher.parametersWorkaroundWhether to use a Servlet request parameter workaround necessary for some versions of WebLogic(某些版本的weblogic专用)是否使用一个servlet请求参数工作区(PARAMETERSWORKAROUND)struts.enable.DynamicMethodInvocationAllows one to disable dynamic method invocation from the URL允许动态方法调用struts.freemarker.manager.classnameThe org.apache.struts2.views.freemarker.FreemarkerManager implementation classorg.apache.struts2.views.freemarker.FreemarkerManager接口名struts.i18n.encodingThe encoding to use for localization messages国际化信息内码struts.i18n.reloadWhether the localization messages should automatically be reloaded是否国际化信息自动加载struts.localeThe default locale for the Struts application默认的国际化地区信息struts.mapper.classThe org.apache.struts2.dispatcher.mapper.ActionMapper implementation classorg.apache.struts2.dispatcher.mapper.ActionMapper接口struts.multipart.maxSizeThe maximize size of a multipart request (file upload)multipart请求信息的最大尺寸(文件上传用)struts.multipart.parserThe org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementationfor amultipart request (file upload)专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用)struts.multipart.saveDirThe directory to use for storing uploaded files设置存储上传文件的目录夹struts.objectFactoryThe com.opensymphony.xwork2.ObjectFactory implementation classcom.opensymphony.xwork2.ObjectFactory接口(spring)struts.objectFactory.spring.autoWireWhether Spring should autoWire or not是否自动绑定SpringeClassCacheWhether Spring should use its class cache or not是否spring应该使用自身的cachestruts.objectTypeDeterminerThe com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation classcom.opensymphony.xwork2.util.ObjectTypeDeterminer接口struts.serve.static.browserCacheIf static content served by the Struts filter should set browser caching header properties ornot是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中struts.serve.staticWhether the Struts filter should serve static content or not是否struts过滤器应该提供静态内容struts.tag.altSyntaxWhether to use the alterative syntax for the tags or not是否可以用替代的语法替代tagsstruts.ui.templateDirThe directory containing UI templatesUI templates的目录夹struts.ui.themeThe default UI template theme默认的UI template主题struts.url.http.portThe HTTP port used by Struts URLs设置http端口struts.url.https.portThe HTTPS port used by Struts URLs设置https端口struts.url.includeParamsThe default includeParams method to generate Struts URLs在url中产生默认的includeParamsstruts.velocity.configfileThe V elocity configuration file pathvelocity配置文件路径struts.velocity.contextsList of V elocity context namesvelocity的context列表struts.velocity.manager.classnameorg.apache.struts2.views.velocity.V elocityManager implementation classorg.apache.struts2.views.velocity.V elocityManager接口名struts.velocity.toolboxlocationThe location of the V elocity toolboxvelocity工具盒的位置struts.xslt.nocacheWhether or not XSLT templates should not be cached是否XSLT模版应该被缓存在Struts2中,action中的getXXX()只在服务器启动时执行一次,一刷新页面显示的数据内容全都没了,这种问题的解决办法是:在web.xml中配置struts2.0时,<filter-mapping><filter-name>action2</filter-name><url-pattern>/*</url-pattern></filter-mapping>把/*改成*.ation就OK了一、Struts2配置文件Struts2相关的配置文件有web.xml,struts.xml,struts.properties,struts-default.xml,velocity.properties,struts-default.vm。