struts作用(请简单谈一下spring,struts,hibernate的作用;)

本文目录
- 请简单谈一下spring,struts,hibernate的作用;
- struts是什么
- 怎样理解框架,ssh中struts 的作用,hibernate,spring的作用分别是什么
- struts 2作为一种java web框架,其主要作用是什么,在哪些方面比servlet/jsp开发提
- Struts2中Struts.xml的作用是什么
- Struts主要起什么作用
- 简述Struts2的用途和优势
- struts2 标签的作用
- struts2 作用
请简单谈一下spring,struts,hibernate的作用;
我来用人性化的语言简单的介绍下:
1.struts的作用避免了在jsp页面当中写太多的代码,做到保持jsp的界面整洁,同时可以实现mvc模式,struts的根本作用就是方便以后对程序的修改。
2.hibernate呢,就省掉了你自己手写代码连接数据库的麻烦
3.spring作用降低耦合性,在另外两个框架中间,使它们之间的关系不是绝对的,说到底也是为了以后的修改做打算。
他们三者呢,都是为了能更好的实现团队合作而被使用的
struts是什么
Struts最早是作为Apache Jakarta项目的组成部分问世运作。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages、Servlet、标签库以及面向对象的技术水准。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如图所示:
Struts框架
struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。
本章详细讨论struts架构。我们将看到struts是如何清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序过程的。我们还将介绍struts提供的类如何使得开发工作更加简单,这些类包括:
控制程序流程的类
实现和执行程序事务逻辑的类
自定义的标记库使得创建和验证HTML表单更加容易
1. Struts压缩包内容
文件夹jakarta-struts-1.0.2包含两个目录,lib和webapps。在lib目录中有使用struts创建应用程序是所需的文件:
文件 描述
jdbc2_0-stdext.jar 包含JDBC2.0 Optional Package API类。如果我们要使用struts提供的数据资源,就需要将这个文件拷贝到WEB-INF\lib下
Struts.jar 包含struts中所有的java类。同样也需要拷贝到WEB-INF\lib下
*.tld 标记库描述器文件,描述了多个struts标记库中的自定义标记。同样要拷贝到WEB-INF\lib下
在webapps目录下有如下文件:
Web应用程序 描述
Struts-blank.war 一个简单的web应用程序
Struts-documentation.war 包含struts站点上所有struts文档
Struts-example.war Struts很多特性的示范
Struts-exercisetaglib.war 主要用于对自定义标签库进行增加而使用的测试页,但也可以示范如何使用struts标记
Struts-template.war 包含struts模板标记的介绍和范例
Struts-upload.war 一个简单的例子,示范如何使用struts框架上传文件
2.Struts体系结构
让我们从MVC角度观察struts框架中的组件
框架中三个部分:模型,视窗和控制器。
模型
在struts框架中,模型分为两个部分:
系统的内部状态
可以改变状态的操作(事务逻辑)
内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。
建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
视窗
由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。
控制器
struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。
3.Struts框架中的组件
(由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和Tag Library包含进来,有时间作完替换)
框架中所使用的组件:
ActionServlet 控制器
ActionClass 包含事务逻辑
ActionForm 显示模块数据
ActionMapping 帮助控制器将请求映射到操作
ActionForward 用来指示操作转移的对象
ActionError 用来存储和回收错误
Struts标记库 可以减轻开发显示层次的工作
下面我们看看各自在框架中所扮演的角色和责任。
3.1 Struts配置文件
这是将struts组件结合在一起的东东:struts-config.xml。默认值
\WEB-INF\struts-config.xml。配置文件可以定义:
全局转发
ActionMapping类 帮助控制器将请求映射到操作
ActionForm bean 显示模块数据
JDBC数据源
配置全局转发
全局转发用来在JSP页之间创建逻辑名称映射。转发都可以通过对调用操作映射的实例来获得,例如:
actionMappingInstace.findForward(“logicalName”);
全局转发的例子:(所有的例子我没有进行解释,一是结合表可以理解,二是例子大部分来自系列四的示例,你应该在作完实验后,再来看一遍)
《global-forwards》
《forward name="bookCreated" path="/BookView.jsp"/》
《/global-forwards》
属性 描述
Name 全局转发的名字
Path 与目标URL的相对路径
配置ActionMapping
ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionForm bean相关联。ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。所有Action类使用perform()方法实现特定应用程序代码,返回一个ActionForward对象,其中包括响应转发的目标资源名称。例如:
《action-mappings》
《action path="/createBook"
type="BookAction"
name="bookForm"
scope="request"
input="/CreateBook.jsp"》
《/action》
《forward name=”failure” path=”/CreateBook.jsp”/》
《forward name=”cancel” path=”/index.jsp”/》
《/action-mappings》
属性 描述
Path Action类的相对路径
Name 与本操作关联的Action bean的名称
Type 连接到本映射的Action类的全称(可有包名)
Scope ActionForm bean的作用域(请求或会话)
Prefix 用来匹配请求参数与bean属性的前缀
Suffix 用来匹配请求参数与bean属性的后缀
attribute 作用域名称。
className ActionMapping对象的类的完全限定名默认的类是org.apache.struts.action.ActionMapping
input 输入表单的路径,指向bean发生输入错误必须返回的控制
unknown 设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作
validate 设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionForm bean的validate()方法来进行输入检查
通过《forward》元素,可以定义资源的逻辑名称,该资源是Action类的响应要转发的目标。
属性 描述
Id ID
ClassName ActionForward类的完全限定名,默认是org.apache.struts.action.ActionForward
Name 操作类访问ActionForward时所用的逻辑名
Path 响应转发的目标资源的路径
redirect 若设置为true,则ActionServlet使用sendRedirect()方法来转发资源
配置ActionForm Bean
ActionServlet使用ActionForm来保存请求的参数,这些bean的属性名称与HTTP请求参数中的名称相对应,控制器将请求参数传递到ActionForm bean的实例,然后将这个实例传送到Action类。例子:
《form-beans》
《form-bean name="bookForm" type="BookForm"/》
《/form-beans》
属性 描述
Id ID
className ActionForm bean的完全限定名,默认值是org.apache.struts.action.ActionFormBean
Name 表单bean在相关作用域的名称,这个属性用来将bean与ActionMapping进行关联
Type 类的完全限定名
配置JDBC数据源
用《data-sources》元素可以定义多个数据源。
属性 描述
Id ID
Key Action类使用这个名称来寻找连接
Type 实现JDBC接口的类的名称
下面属性需要《set-property》元素定义,在框架1.1版本中已不在使用,但你可用《data-source》元素。例子:
《data-sources》
《data-source id=”DS1”
key=”conPool”
type=”org.apache.struts.util.GenericDataSource”
《set-property id=”SP1”
autoCommit="true"
description="Example Data Source Configuration"
driverClass="org.test.mm.mysql.Driver"
maxCount="4"
minCount="2"
url="jdbc:mysql://localhost/test"
user="struts"
password="wrox" /》
《data-source/》
《/data-sources》
属性 描述
desciption 数据源的描述
autoCommit 数据源创建的连接所使用的默认自动更新数据库模式
driverClass 数据源所使用的类,用来显示JDBC驱动程序接口
loginTimeout 数据库登陆时间的限制,以秒为单位
maxCount 最多能建立的连接数目
minCount 要创建的最少连接数目
password 数据库访问的密码
readOnly 创建只读的连接
User 访问数据库的用户名
url JDBC的URL
通过指定关键字名称,Action类可以访问数据源,比如:
javax.sql.DataSource ds = servlet.findDataSource(“conPool”);
javax.sql.Connection con = ds.getConnection();
3.2 ActionServlet类
***隐藏网址***
Struts controller基本功能是:
1. 截获用户的Http请求
2. 把这个请求映射到相应的Action类,如果这是此类收到的第一个请求,将初始化实例并缓存。
3. 创建或发现一个ActionForm bean实例(看配置文件是否定义),然后将请求过程移植到bean.
4. 调用Action实例的perform()方法并将ActioForm bean,Action Mapping对象,request和response对象传给它。
如:public ActionForword perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
5.perform返回一个ActionForword对象,此对象连接到相应的jsp页面.
ActionServlet配置
我们需要在web.xml中声明ActionServlet,并且将它配置成启动时进行加载。以下为可以配置的初始化参数:
参数 默认值 描述
application null 应用程序的资源集合的类
bufferSize 4096 文件上传的缓冲区大小
config /WEB-INF/struts-config.xml 配置文件的位置和名称
content Text/html 默认的内容类型
debug 0 程序调试的级别
detail 0 程序调试细节的级别
factory null 消息资源工厂,用于国际化中解释消息资源
formBean org.apache.struts.action.ActionFormBean 封装ActionForm bean信息的类的名称
forward org.apache.struts.action.ActionForward 封装ActionForward对象信息的类的名称
locale true 为true,将在用户会话中存储一个本地对象
mapping org.apache.struts.action.ActionForward 封装ActionMapping信息的类的名称
maxFileSize 250M 上传文件的最大尺寸
multipartClass org.apache.struts.action.ActionForward 处理多部分请求的类的名称
noCache False HTTP标头是否要设置为禁止缓寸
Null True 设置为true,对于无效的信息关键字将返回null
tempDir 作为一个servlet参数提供给程序的工作目录 处理下载文件是使用的临时工作目录
validate True 是否使用新格式的配置文件
vallidating True 是否对配置文件进行有效性分析
大多数情况下,标准的servlet就能够满足用户需要。
第一次收到特定请求的URI时,ActionServlet将适当的Action类进行实例化,然后ActionServlet在Action类实例中以servlet为变量名存储一个引用。当被实例化后,Action类会被暂存以备再用。
ActionServlet也提供一些方法,由Action类用来访问数据源和转发目标之类的资源。
ActionServlet方法
ActinServlet提供了一组能够被Action对象使用的方法。
Struts API的全部信息在struts-documentation.war中可以找到。动态的添加或删除,这些方法只影响应用程序当前的实例:
public void addFormBean(ActionFormBean formBean)
public void removeFormBean(ActionFormBean formBean)
public void addForward(ActionForward actionForward)
public void removeForward(ActionForward actionForward)
public void addMapping(ActionMapping actionMapping)
public void removeMapping(ActionMapping actionMapping)
根据名称查找对象:
public ActionFormBean findFormBean(String name)
public ActionForward findForward(String name)
public ActionMapping findMapping(String name)
用来处理数据源:
public void addDataSource(String key , DataSource ds)
public DataSource findDataSource(String key)
我们还可以:
使用destroy()方法结束ActionServlet
使用reload()方法从struts配置文件将信息重新加载。
3.3 ActionMapping类
将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的perform()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null.
public ActionForward findForward(String name)
可在映射中动态添加ActionForward:
public void addForward(ActionForward forward)
可返回与映射关联的表单bean:
public String getName()
可返回映射的属性域(会话或请求)
public String getScope()
3.4 Action类
Action类真正实现应用程序的事务逻辑,它们负责处理请求。在收到请求后,ActionServlet会:
为这个请求选择适当的Action
如果需要,创建Action的一个实例
调用Action的perform()方法
如果ActionServlet不能找到有效的映射,它会调用默认的Action类(在配置文件中定义)。如果找到了ActionServlet将适当的ActionMapping类转发给Action,这个Action使用ActionMapping找到本地转发,然后获得并设置ActionMapping属性。根据servlet的环境和被覆盖的perform()方法的签名,ActionServlet也会传送ServletRequest对象或HttpServletRequest对象。
所有Action类都扩展org.apache.struts.action.Action类,并且覆盖类中定义的某一个perform()方法。有两个perform()方法:
处理非HTTP(一般的)请求:
public ActionForward perform(ActionMapping action,
AcionForm form,
ServletRequest request,
ServletResponse response)
throws IOException,ServletException
处理HTTP请求:
public ActionForward perform(ActionMapping action,
AcionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException
Action类必须以“线程安全”的方式进行编程,因为控制器会令多个同时发生的请求共享同一个实例,相应的,在设计Action类时就需要注意以下几点:
不能使用实例或静态变量存储特定请求的状态信息,它们会在同一个操作中共享跨越请求的全局资源
如果要访问的资源(如JavaBean和会话变量)在并行访问时需要进行保护,那么访问就要进行同步
Action类的方法
除了perform()方法外,还有以下方法:
可以获得或设置与请求相关联的区域:
public Locale getLocale(HttpServletRequest request)
public void setLocale(HttpServletRequest request,Locale locale)
为应用程序获得消息资源:
public MessageResources getResources()
检查用户是否点击表单上的“取消”键,如果是,将返回true:
public Boolean isCancelled(HttpServletRequest request)
当应用程序发生错误时,Action类能够使用下面方法存储错误信息:
public void saveErrors(HttpServletRequest request,ActionErrors errors)
ActionError实例被用来存储错误信息,这个方法在错误关键字下的请求属性列表中存储ActionError对象。通过使用在struts标记库中定义的自定义标记,JSP页能够显示这些错误信息,稍后我们就介绍。
3.5 ActionForm类
框架假设用户在应用程序中为每个表单都创建了一个ActionForm bean,对于每个在struts-config.xml文件中定义的bean,框架在调用Action类的perform()方法之前会进行以下操作:
在相关联的关键字下,它检查用于适当类的bean实例的用户会话,如果在会话中没有可用的bean,它就会自动创建一个新的bean并添加到用户的会话中。
对于请求中每个与bean属性名称对应的参数,Action调用相应的设置方法。
当Action perform()被调用时,最新的ActionForm bean传送给它,参数值就可以立即使用了。
ActionForm类扩展org.apache.struts.action.ActionForm类,程序开发人员创建的bean能够包含额外的属性,而且ActionServlet可能使用反射(允许从已加载的对象中回收信息)访问它。
ActionForm类提供了另一种处理错误的手段,提供两个方法:
Public ActionErrors validate(ActionMappin mapping,
ServletRequest request)
Public ActionErrors validate(ActionMappin mapping,
HttpServletRequest request)
你应该在自己的bean里覆盖validate()方法,并在配置文件里设置《action》元素的validate为true。在ActionServlet调用Action类前,它会调用validate(),如果返回的ActionErrors不是null,则ActinForm会根据错误关键字将ActionErrors存储在请求属性列表中。
如果返回的不是null,而且长度大于0,则根据错误关键字将实例存储在请求的属性列表中,然后ActionServlet将响应转发到配置文件《action》元素的input属性所指向的目标。
如果需要执行特定的数据有效性检查,最好在Action类中进行这个操作,而不是在ActionForm类中进行。
方法reset()可将bean的属性恢复到默认值:
public void reset(ActionMapping mapping,HttpServletRequest request)
public void reset(ActionMapping mapping,ServletRequest request)
典型的ActionFrom bean只有属性的设置与读取方法(getXXX),而没有实现事务逻辑的方法。只有简单的输入检查逻辑,使用的目的是为了存储用户在相关表单中输入的最新数据,以便可以将同一网页进行再生,同时提供一组错误信息,这样就可以让用户修改不正确的输入数据。而真正对数据有效性进行检查的是Action类或适当的事务逻辑bean。
3.6 ActionForward类
目的是控制器将Action类的处理结果转发至目的地。
Action类获得ActionForward实例的句柄,然后可用三种方法返回到ActionServlet,所以我们可以这样使用findForward():
ActionServlet根据名称获取一个全局转发
ActionMappin实例被传送到perform()方法,并根据名称找到一个本地转发
另一种是调用下面的一个构造器来创建它们自己的一个实例:
public ActionForward()
public ActionForward(String path)
public ActionForward(String path,Boolean redirect)
3.7 错误处理
struts提供了两个类来处理错误:ActionErrors和ActionError,它们都扩展org.apache.struts.action。ActionErrors保存着ActionError对象的集合,其中每一个代表了独立的错误信息。每个ActionError都包含了关键字,能够映射到资源文件中存储的错误信息,而这个资源文件是在ActionServlet初始化参数中指定的。
ActionError类
ActionError类定义了一组重载的构造器来创建错误信息,第一个构造器方法使用一个字符串作为参数,例如:
ActionError error = new ActionError(“error.Invalid”);
实例error映射到应用程序资源文件中的一个错误消息:
error.invalid=《b》Invalid Number《/b》
如果在JSP页使用《html:error》,用户就会看见加粗的Invalid Number。
另一种使用了java.text.MessageFormat类,可在消息中指定替换字符串,例如:
error.invalid=《b》Invalid Number《/b》
创建一个错误消息:
ActionError error = new ActionError(‘error.invalid’,new Double(-1));
JSP页显示:Invalild Number –1
还有获得特定消息的错误关键字:
public String getKey()
还有获得替换字符串数组:
public String getValues()
ActionError类
ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中。ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的属性值,或是使用ActionErrors.GLOBAL_ERROR.
下面是典型Action类的perform()中错误处理情况:
MyForm form = (MyForm) form;
if (number == -1) {
ActionErrors errors = new ActionErrors();
ActionError error = new ActionError(“error.Invalid”,new Double(-1));
errors.add(ActionErrors.GLOBAL_ERROR,error);
saveErrors(req,errors);
String input = mapping.getInput();
Return new ActionForward(input);
}
ActionErrors有如下有用方法:
方法 描述
clear() 清除所有错误信息
empty() 如果ActionErrors对象是空的,它返回true
get() 返回错误信息。若无参数,所有信息将作为一个Iterator对象返回
properties() 返回包含属性名称的Iterator,这些属性至少有一个错误
size() 返回错误的数目(整型数)
目前还有基于struts二次开发出来的功能更强大的架构
这些用eclipse开发都可以找到功能非常完善的插件
开发的"傻瓜"程度很高
但是理解起来会比较困难
一旦理解透彻 开发则得心应手
Struts2
Struts2在Struts1的基础上有了很大的进步,并且集成了WebWork
怎样理解框架,ssh中struts 的作用,hibernate,spring的作用分别是什么
struts担当控制器,就好比你要做车去深圳,要先跟售票员买票,拿到票后才能去坐车,struts就是售票员,它接到你的请求之后就去Hibernate那里取票,然后再给你票,spring就是车站的保安吧,负责管理买卖票,像struts担任控制器的有(struts1/2,webwork,servlet,JSF),Hibernate处理后台(增删改查)和JDBC,类似的框架有JPA,spring管理,依赖注入/AOP 事物 等等 你要先从MVC模式开始理解 然后就很容易入手SSH了 好好努力...
struts 2作为一种java web框架,其主要作用是什么,在哪些方面比servlet/jsp开发提
自动封装类。可以把前台页面传过来的Json或者多个参数自动包装传值给Java bean类,作为Action成员变量值。如果纯Servlet编写,你需要把众多参数依次用request.getParameter()方法取出来赋值给类的每个值,步骤相当繁琐。
纯Servlet开发,控制层代码完全依赖Servlet,每个Servlet必须集成HttpServlet,形成了高度耦合关系。Struts2可以让控制层代码,完全不依赖Servlet运行(不过Struts2 也没好到哪里去,要获得很多好用的功能,每个Action还需继承Struts包自带的ActionSupport,又与Struts形成了耦合关系。属于赶走了虎,又引来了狼。就光论这点而言,Spring MVC完爆Struts2,完全无需继承任何类。完全无侵入式框架)
Struts Tag标签。标签很好用,可以动态绑定数据。动态将数值绑定到页面上,省去了请求完毕页面资源后,还得用ajax方法再次从后台获取数据显示到前台页面。不过后来,J2EE引入了自己的标签功能JSTL,功能和Struts完全相同,还是Java原生态支持。这个优点被追上了。
提供Struts国际化功能,很方便做多语言页面。纯Servlet开发多国语言显示界面会很麻烦。
Struts2中Struts.xml的作用是什么
主要作用就是为Struts 2的核心配置文件。
一、struts.xml中主要配置Struts项目的一些全局的属性,用户请求和响应Action之间的对应关系,以及配置Action中可能用到的参数,以及处理结果的返回页面。
二、Apache Struts 2最初被称为WebWork 2,它是一个简洁的、可扩展的框架,可用于创建企业级Java web应用程序。设计这个框架是为了从构建、部署、到应用程序维护方面来简化整个开发周期。
三、web.xml配置文件是一种J2EE配置文件,决定servlet容器的HTTP元素需求如何进行处理。它严格来说不是一个Struts2 配置文件,但它是Struts2 运作所需要进行配置的文件。
四、在web.xml里定义一个FilterDispatcher类的接入点,而这个web.xml文件需要在WebContent/WEB-INF文件夹下创建。如果你开始时没有模板或工具(比如Eclipse或Maven2)的辅助来生成,那这就是第一个你需要配置的文件。
Struts主要起什么作用
这么说,Spring与Struts一样,是一个开源框架,它的主要好处就是实现了IOC依赖反转。
--
IOC是什么呢?IOC就是根据配置文件,将JavaBean实例化,在Struts中,bean的实例是需要自己申请的,而Spring可以更好的实现Bean与Bean之间的解藕,而且可以更好地实现需求变化的插拔(通过修改配置文件内容而不是修改代码)
--
Spring还有一个好处就是AOP
--
AOP就是可以在不知道源码的情况下,甚至只有class文件的时候,也可以对当前文件插入操作,比如,一段程序需要加入校验代码,但是校验又不属于业务代码的一部分,这时候就可以通过AOP来插入校验代码而不影响业务逻辑。
Spring还有很多好处,建议找本Spring方面的书好好看看。
希望对楼主有帮助~
简述Struts2的用途和优势
Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。
下面我从使用Struts2一年之久的经验来分析一下Struts2的优点:1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。 我在项目开发过程中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。当然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。
2.使用OGNL进行参数传递。
OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。3.强大的拦截器
Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。4.易于测试
Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。5.易于扩展的插件机制
在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。常用的Struts2的扩展可以通过这个链接找到:
***隐藏网址***6.模块化
Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:
将配置信息拆分成多个文件
把自包含的应用模块创建为插件
创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。7.全局结果与声明式异常
为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面,这一功能十分实用。
struts2 标签的作用
struts2 标签的作用
1.STRUTS 在 SSH 框架中起控制的作用 , 其核心是
Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 Struts-confi g.xml. 主要控制逻辑关系的处理 .
2. struts 负责 web 层
.
ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。在
struts-config.xml 中定义
《action-mapping》, ActionServlet 会加载。
struts2 作用
作为web层框架应该大体实现以下功能:
1.获取表单内容,并组织生成参数对象
2.根据请求的参数转发请求给适当的控制器
3.在控制器中调用业务接口
4.将业务接口返回的结果包装起来发送给指定的视图,并由视图完成处理结果的展现
5.做一些简单的校验或是国际化工作
无论是登录还是上传什么,没有其他层的协助是无法实现的,当然你也可以硬编码的来实现业务逻辑或数据库操作,这样的做法扩展性和可维护性极差
hibernate是操作数据库的一种框架,它简化了直接使用jdbc api的代码操作数据库的复杂性和冗余性
spring则完全是一种架构型的框架了,它不属于J2EE应用中的任何一个层,但它提供了对象依赖注入的思想,并且为每个层中遇到的实际问题提供了大量现成的模板类,使用这些模板类的方法很easy,大多数情况下只需要你在配置文件里配置一下就可以实现诸如事务管理或安全性控制这样的复杂问题.使用spring你的代码不依赖于框架,不依赖于具体实现,而依赖于接口,这对于实现松散耦合的架构来说是大有裨益的.spring不仅仅可以用于web应用,在普通的java应用中也可以使用spring.spring不是个复杂的框架,它的核心包很小并且具有轻量级的架构,基本上spring的核心只有2个东西:Ioc & AOP,Ioc其实就是工厂模式的一种体现,而AOP则来源AOP联盟,使用了拦截的思想...学了spring,现在写起代码觉得自己就像个白痴,有什么问题直接在配置文件里配置一下相关的模板类就OK了,它是真正为程序员减轻工作负担的框架.

更多文章:
flash player电脑版下载(FLASH PLAYER在哪下能安全的下载呢)
2026年10月22日 19:20
nation和national的区别(为什么nation和national两者的a发音不一样)
2026年10月22日 16:40
达梦 insert into select(oracle中insert语句怎么嵌入select)
2026年10月22日 15:20
struts作用(请简单谈一下spring,struts,hibernate的作用;)
2026年10月22日 05:20
low power是什么意思(MP3打开以后提示Low power!是什么意思啊)
2026年10月22日 03:50






