struts1和truts2比较之学习资料
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@。
在介绍常用标志前,我想先从总体上,对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" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。
JAVAWEB面试题(含答案)

1、jsp和servlet的区别、共同点、各自应用的范围??JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.2、cookie和session的作用、区别、应用范围,session的工作原理Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。
Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。
存储的数据量大,安全性高。
占用服务端的内存资源。
3、jstl是什么?优点有哪些??JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。
优点有:最大程序地提高了WEB应用在各应用服务器在应用程序服务器之间提供了一致的接口,最大程序地提高了1、在应用程序服务器之间提供了一致的接口,之间的移植。
2、简化了JSP和WEB应用程序的开发。
3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet 代码的程序。
在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。
4、允许JSP设计工具与WEB应用程序开发的进一步集成。
相信不久就会有支持JSTL的IDE 开发工具出现。
4、j2ee的优越性主要表现在哪些方面?MVC模式a、J2EE基于JAVA技术,与平台无关b、J2EE拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。
struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
struts2自学完全文档

一.Struts2基础知识1. struts2的特点及配置1.1struts2与struts1的比较1)在软件设计上struts2没有struts1那样跟ServletApi和StrutsApi有着紧密的耦合,Struts2的应用可以不因爱ServletApi和StrutsApi.struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计public class OrderListAction ectends Action//struts依赖于java2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能3)Struts2提供了类型转换器,我们可以把特殊的请求参数转换成我们需要的类型,在struts1中,如果我们实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器4)Struts2提供了支持多种表现层技术,如JSp,freeMarker等5)Struts2的输入校验可以对指定方法进行校验,解决了Struts的长久之疼6)提供了全局范围,包范围和Action范围的国际化资源文件管理实现1.2搭建struts2的开发环境1)新建web项目2)导入必要的包3)写配置文件Struts2默认的配置文件为Struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模板如下(在m yeclipse中放在src目录下就可以了)模板在D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开web-info/classes中的struts.x m l文件即可<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.3//EN""/dtds/struts-2.3.dtd"><struts></struts>4)在web.xm l中加入Struts2MVC框架启动配置在struts1.x中struts框架是通过Servlet启动的,在struts2中,struts框架式通过Filter 启动的,他在web.xm l中的配置如下:(D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开Web-Info\web.xm l即可)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Str utsPrepareAndExecuteFilter</filter-class><!—自从struts2.1.3以后,下面的FilterDispatcher已经标注为过时<filter-class>org.apache.struts2.dispatcher.ng.filter.FilterDispather</filter-class> --></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>在StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。
Struts1与struts2的区别总结

Struts1与struts2的区别总结1,背景:Struts2并不是struts1的升级版,两者没有太大的关系,struts2是继承了webwork的机制,吸收了struts2和webwork的有优势。
Struts2是基于WebWork的一个全新框架. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet.然后在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试. Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.2,Action类Struts1要求action继承一个抽象基类,而struts2既可以继承类又可以实现action对应的接口,即接口编程,可以实现多个接口,使得可选和订制服务成为可能。
3,线程模式Struts1中的action是单例模式,会涉及到线程安全问题,因为仅有一个action来处理所有的请求,而struts2则是非单例模式,每个请求对应一个action,这样就不用考虑线程安全的问题(而且,servlet容器会给每个请求产生可丢弃的对象,这样就不会导致性能和垃圾回收问题)。
4,可测性Struts1中的action有个主要的问题是execute方法暴露了servlet API,这使得测试等需要依赖servlet容器。
一个第三方扩展--struts TestCase--提供了一套struts模拟对象来进行测试;而struts2 中的action可以通过初始化和设置属性(例如action当中直接用get和set方法),调用方法来测试,“依赖式注入”注入也使得测试更容易5,servlet依赖Struts1中的action依赖于servlet API,因为当一个action被调用时,HttpServletRequest和HttpServletResponse对象会被传递给execute方法(请求和响应的对象需要依赖于execute方法,即servlet API);而struts2中的action则不需要依赖于servlet容器,允许action脱离容器单独被测试(例如:struts2中获取请求的对象可以用ServletActionContext.getRequest())。
Struts2知识点总结

Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。
2.Struts2框架在struts1和webwork基础之上发展的全新框架。
3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。
图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。
2.到app目录里面复制案例的jar包是最好的方法。
2.创建action3.配置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、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。
STRUTS2入门教程(全新完整版)
一、发展历史及简介发展历史Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages、Servlet、标签库以及面向对象的技术水准。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。
这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。
这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。
当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。
同样,软件工程师使用Struts为业务应用的每一层提供支持。
它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。
我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
早期Smalltalk程序语言便采用了MVC(Model-View-Controller)模式(Patterns)以增加程序代码弹性,MVC模式将程序代码整理切割为三部分,Model部分是业务与应用领域(Business domain)相关逻辑、管理状态之对象,Controller部分接收来自View所输入的资料并与Model部分互动,struts业务流程控制(Flow Control)之处,View部分则负责展现资料、接收使用者输入资料。
在Java应用中,JFC/Swing、AWT、JSP皆是可用作View的技术规格,而JavaBean与Enterprise JavaBean规格则可用于Model程序代码,一旦应用程序以MVC模式加以适当的分割,Model部分程序代码可在不同使用者接口外观的应用程序中重复使用。
随着JSP与Servlet技术大量应用于以Web为基础的应用程序,Java开发人员群体认为应以较佳的模式以提升Web应用程序的可维护性与重复使用性。
第一章Struts2系统架构
第一章Struts2系统架构本章主要介绍的Struts2的系统架构,让学员对Struts2框架在结构上有一个整体概念为我们以后更加详细的学习Struts2打下一个良好的基础。
第一节Struts2的系统架构及处理的主要流程1.Struts1简介Struts1的历史比较久远,Struts1是世界上第一个发布的MVC框架,目前市场率最高的框架。
下面将简单讲解Struts1的基本架构。
图1-1显示了Struts1的数据流图。
图1-1 Struts1数据流图Struts1框架以ActionServlet为核心控制器,ActionServlet获得客户端请求。
然后ActionServlet根据请求信息调用匹配的业务逻辑控制器(Action)处理用户请求。
请求处理完成后,业务逻辑处理器调用相应的JSP显示处理结果。
Struts1框架实现了MVC模式,下面我们了解一下Struts1是怎样实现MVC模式的。
Struts1框架中并没有提供Model层的实现。
在实际的企业应用中,通过一个JavaBean 实现一个业务逻辑,在功能比较复杂的应用中也采用EJB或WebService服务实现业务逻辑。
Struts1框架的View层采用JSP实现。
Struts1提供了大量丰富的标签库。
这些标签库与Struts的组件兼容的特别好,可以很容易的输出控制器的处理结果。
Struts1框架中,控制器是它的核心,Struts1的控制器由两部分组成:核心控制器(ActionServlet)和业务逻辑控制器(Action),核心控制器由Struts1框架提供。
业务逻辑控制器需要由用户自己继承Struts1框架提供的Action类实现。
在Struts1框架中,JSP/Servlet耦合非常紧密。
这种紧密关系促使Struts1存在各种缺陷。
下面我们分析一下Struts1中存在的缺陷。
●支持的表现层技术单一●耦合性强,不便于单元测试●代码依赖于Struts1 API,侵入性强2.WebWork简介WebWork出自于开源组织opensymphony,实际的创始人是Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。
struts2讲义
e.g. ums_struts2_02_action/struts.xml Ⅲ. 使用 DMI 或通配符 目的:减少 Action 的数量 方式一:动态方法调用(Dynamic Method Invocation DMI,struts2.1 后不建议使 用) 定义一个 Action 类,类中可以定义多个与 execute()方法,声明部分相同但方法名 不同的方法。 e.g. ums_struts2_02_action/UserAction_DMI.java 1、定义 UserAction_DMI 类
e.g. ScopeAction_3.java 方式四:实现 ServletRequestAware 接口
e.g. ScopeAction_4.java 注意:1、其中,前两种方式与 Servlet API 解耦合,后两种方式与 Servlet API 耦合,推荐使 用第二种方式,第二种方式使用了 IOC 的模式,解耦合更好。 Ⅵ.Action 中生成响应信息 e.g. ums_struts2_02_result Struts2 框架通过 Action 中 execute()方法的返回值,与 struts.xml 中<action>的<result>元 素的 name 属性值来判断最终响应信息的内容。其中<result>元素设置如下: <result type=”结果类型” name=”名称”>WEB 资源路径或名称</result> 说明: 1、name:result 名称随便起,默认为“success“,与 execute 方法返回值一致。 2、 WEB 资源路径或名称:WEB 资源路径如果为相对路径,则该路径相对于 WEB 应用上下文。如果跳转到 Action 则为该 Action 所对应的<action>元素的 name 值。 3、 type:设置生成响应信息的类型,默认为 dispatcher。 (Ⅰ)ActionSupport 中预定义的结果常量 在 Struts2 的 ActionSupport 类中预定义了一些 Result 常量,当定义的 Action 类继承了 ActionSupport 时就可以使用这些结果常量,当然也可以使用自定义的 result 字符串。
Struts2课件
Sturuts2第一节、Struts2介绍Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2对Struts1进行了巨大的改进。
主要表现在如下几个方面: 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个POJO。
线程模型方面:Struts1的Action是单实例的,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。
这使程序难于测试。
Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。
Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
绑定值到视图技术:Struts1使用标准的JSP,Struts2使用"ValueStack"技术。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struts1和truts2比较
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 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面
(view)。
类型转换:
• Struts 1 ActionForm 属性通常都是String类型。
Struts1使用Commons-Beanutils进行类型转换。
每个类一个转换器,对每一个实例来说是不可配置的。
• Struts2 使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:
• Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator 的扩展来校验。
同一个类可以有不同的校验内容,但不能校验子对象。
• Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制:
• Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
• Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。
堆栈能够根据需要和不同的Action一起使用。