`
明日天涯
  • 浏览: 35660 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

浅谈struts1与struts2

阅读更多
    我想大家对于struts框架是绝对不会陌生的,最近刚刚学习了struts框架,这里我想谈一下自己对该框架的理解。首先,我要讲到的是struts1框架,该框架是对mvc模式思想的一种应用。为了对该框架的整体思想有个比较好的把握,个人认为必须要理解一下该框架的原理及具体的业务流程。这里,我们来模拟一下struts1的工作现场:首先假设有一个用户在客户端提交了一个请求,然后该请求会提交给struts1中做为控制层的servlet,称之为主控servlet(也就是ActionServlet,该servlet是由struts1框架提供的,类似于一般的servlet,只是struts1框架对其进行了功能上的包装和扩展。对于该主控servlet,我们只需要去配置它,然后用它就可以了),然后,主控servlet会根据web.xml配置文件中所配置的struts-config.xml(即struts配置文件)来寻找客户端所请求的具体的action对象。若找到,则将客户端的请求参数打包到struts-config.xml中所配置的与客户端所请求的action对象对应的formBean对象中(也就是说一个具体的action对象,一定会对应一个formBean对象,或者称之为actionForm对象)。接着,主控servlet会将打包好的formBean对象转发给刚刚找到的action对象,并由action对象进行业务逻辑的处理(实际上,个人认为action对象并不进行具体业务的处理,而只是调用了具体的业务逻辑处理模型来进行处理,也就是说调用了模型层中的对象,例如dao类对象),处理完毕之后,action对象会返回一个forward对象(也就是包装了所要跳转的目标url地址的对象,该对象可以事先在struts-config.xml中配置好,也可以直接创建),并将该forward对象交给主控servlet,由主控servlet来执行具体的跳转动作。换句话说,action对象决定了跳转的目的地址,而具体的跳转动作则是由主控servlet来执行。这里,有必要总结一下主控servlet的职责。大体上来讲,主控servlet负责接收客户端提交的业务请求(有些人称之为拦截请求),然后转发给具体的action对象来处理。而实际上action对象也是通过调用具体的业务处理模型对象来处理业务请求的,所以可以将action对象理解为是主控servlet的功能的延续,并可以把action对象归为控制层。总之,对于主控servlet,我们要记住的是两个核心动作:接收请求和转发请求。其次,我们来总结一下使用struts1框架的具体步骤:1. 在web.xml中配置ActionServlet(主要配置的是ActionServlet类存放的路径,以及ActionServlet的映射路径,还有就是struts-config.xml的存放路径。2. 根据具体的业务功能编写相应的jsp文件、actionForm和action。3. 在struts-config.xml中配置具体的actionForm和action对象(如有必要,还可以配置一下forward对象)。好了,大体上struts1框架的使用就是这三大步骤了。

    下面,我们接着来谈一下struts2框架。虽然称之为struts2框架,但是其工作原理跟struts1框架却有着很大的差异。从某种程度上来讲,struts2框架并不是在struts1框架的基础上发展起来的,而是继承了WebWork的血统。接着,我们先来分析一下struts2框架的工作原理,为了跟struts1框架有鲜明的比较,我们还是使用上面使用的那个模拟情景:客户端提交了一个业务请求,该请求被web.xml中配置的FilterDispatcher对象截获(FilterDispatcher类是一个过滤器,该类是struts2的核心类,它充当了Struts1中的ActionServlet中的角色),然后由该对象将请求转发给具体的action对象(这一点跟struts1框架类似,毕竟它们都是使用了mvc设计模式。但是,值得注意的一点是,struts2框架中的具体action类并非继承自Action,而是继承了ActionSupport类),最后action对象处理完毕之后会返回一个目标url给FilterDispatcher对象,由FilterDispatcher对象执行跳转的动作。仔细看了这个业务流程的朋友,是否会注意到这里我没有提到actionForm?是的,在struts2框架中并不存在actionForm对象。那struts2是如何实现struts1中的actionForm功能的呢?实际上,可以这样理解,struts2框架中把struts1中的actionForm的职责合并到了继承了ActionSupport类的action对象中去了。那该如何合并呢?好了,这个问题的答案就是,将客户端请求的参数封装为action对象的属性,并提供set、get方法,以便于注入和提取客户端的请求参数。这因为这样,所以action对象中定义的属性名必须与客户端的请求参数的名称一致。此外,在struts2框架中也用result配置代替了struts1中的forward配置。此外,需要提到的一点是,struts2中对于防重复提交以及文件上传等功能的实现也与struts1框架有所差异,有兴趣的朋友可以研究一下。
0
0
分享到:
评论

相关推荐

    浅谈Struts框架技术.

    Struts框架在JSP Model2架构上建立,实现了MVC模式,使得业务逻辑、数据显示和用户交互得以有效分离。 **MVC模式详解** MVC模式由模型(Model)、视图(View)和控制器(Controller)三部分组成。模型负责处理业务...

    浅谈Struts2拦截器的原理与实现.docx

    以下是对Struts2拦截器原理与实现的详细解析: 1. **拦截器的概念** Struts2拦截器是一种AOP(面向切面编程)的实现,它可以在不修改Action代码的情况下,通过定义拦截器并在配置文件中设置拦截器链,来动态地添加...

    浅谈struts2安全

    1. **参数注入**:由于Struts2允许通过Action类的属性接收用户输入,如果没有进行适当的验证和过滤,可能导致参数注入攻击。例如,恶意用户可以通过构造特定的URL或HTTP请求,绕过正常的输入验证,将恶意代码注入到...

    通信与网络中的浅谈STRUTS框架应用对于Web服务扩展的作用

    1)建立在MVC这种公认的好的模式上的,struts在M,V,C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库,也就是说它的着力点在C和V上,有mvc的一系列有点,如:结构层次分明,高可重用性,增加了程序的...

    浅谈基于Struts和Hibernate的J2EE应用

    1. 配置Struts的配置文件(struts-config.xml),定义ActionMapping,指定请求如何映射到特定的Action。 2. 编写Action类,实现业务逻辑,通常会调用Hibernate来处理数据库操作。 3. 创建ActionForm,用于在Action和...

    浅谈Struts2与Webwork的不同和相同点

    Struts2实际上是Struts1和WebWork融合的产物,旨在提供更高效、更灵活的解决方案。这两者之间的不同和相同点可以从以下几个方面进行探讨。 首先,架构上的差异是两者最显著的区别。Struts1基于ActionServlet,它...

    浅谈struts1 & jquery form 文件异步上传

    在本文中,我们将探讨如何使用Struts1框架与jQuery Form插件实现文件的异步上传。Struts1是一个历史悠久的MVC(Model-View-Controller)框架,虽然它已不再是最新的技术,但在许多遗留系统中仍然被广泛使用。jQuery ...

    关于struts2中Action名字的大小写问题浅谈

    Struts2 中 Action 名字的大小写问题浅谈 Struts2 框架中 Action 的命名规则是开发者需要注意的问题之一。在日常开发中,开发者可能会遇到各种错误,例如在使用 Struts2 框架编写 Action 类以及在 jsp 中写调用相关...

    浅谈SSH学习要点

    在进阶阶段,Spring与Struts和Hibernate的整合是提升整体应用效能的关键,例如通过Spring管理Struts的Action和Hibernate的SessionFactory,实现统一的事务管理,这样不仅可以减少代码量,还能增强系统的稳定性和可...

    Struts2 技术内幕读书笔记(1)

    ### Struts2 技术内幕读书笔记(1) #### WEB开发浅谈 ##### 面向对象浅谈 面向对象编程(Object-Oriented Programming,OOP)是一种软件开发范式,它通过模拟现实世界中的对象及其交互来构建程序结构。这种编程...

    浅谈Strut2如何对请求参数的封装

    Struts2是一个流行的Java web框架,它简化了MVC(模型-视图-控制器)架构的实现。在Struts2中,请求参数的封装是一个关键的特性,它使得开发者能够轻松地从HTTP请求中获取数据并将其绑定到Action类的属性上。下面...

    OGNL表达式语言浅谈.pdf

    在Struts2框架中,OGNL作为核心表达式语言,扮演着连接Action对象与视图层的关键角色。 首先,OGNL将Action对象和其他数据压入一个名为ValueStack的结构中,这个ValueStack类似于一个遵循堆栈原则的List,但具备更...

    浅谈开源软件与工业控制系统安全的关系

    2. **安全漏洞收集与管理的分散性**:开源社区中关于安全漏洞的信息分散且管理不够规范,这导致了安全漏洞的信息收集变得困难。根据White Source公司2020年发布的《开源代码脆弱性态势》报告,尽管大部分开源软件...

    浅谈Java语言评价胜出的8大技术优势

    ### 浅谈Java语言评价胜出的8大技术优势 #### 1. 强大的API支持 Java提供了非常丰富的API支持,包括网络编程中的Socket API、数据库操作中的SQL API、图形用户界面的Swing和AWT API等。这些API不仅功能强大而且...

Global site tag (gtag.js) - Google Analytics