struts2(struts1和struts2的区别)

2025-02-10 03:20:03 0

struts2(struts1和struts2的区别)

本文目录

struts1和struts2的区别

一、主体不同

1、struts1:是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。

2、struts2:Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

二、框架不同

1、struts1:通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

2、struts2:以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

三、Action处理不同

1、struts1:Action是单实例的,一个Action的实例处理所有的请求。

2、struts2:Struts 2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题。

参考资料来源:百度百科-struts

参考资料来源:百度百科-Struts 2

为什么要用到struts2

Apache Struts在2000年5月由 Craig McClanahan 发起,并于2001年7月发布了1.0版本。从技术的角度上讲,它是在开发Web程序上的一次跨越性的进步,但更重要的是,它是在最恰当的时候出现在了人们的眼前。Struts 一出现便大受欢迎,更成为了以后几年内web开发的实际标准。Struts2是Struts的下一代产品。最初提案Struts Ti所设想的发展方向,在Struts的现有代码的基础上是很难完成的。在发起提案的时候,Patrick Lightbody 把多个不同的Web框架的领导者邀请到了一起,希望大家能够协力完成一个通用的框架。但因种种原因,只有WebWork和Struts走到了一起。Struts2吸取了Struts1.x和WebWork的各种优点,更改了一些不足的地方,比如移走了原来WebWork中的IOC实现,引入Spring的IOC实现等。Struts2的目标就是----使Web开发更加容易。今天摆在web开发人员面前的是众多的web开发框架,有些来自开源社区,有些来自商业公司,以满足各种web开发需要,到目前为止,有最少超过40种的web开发框架,那我们为什么要选择Struts2呢?下面列出一些Struts2的特性。基于pojo易于测试在Struts1.x中我需要Mock出这两个Http对象,使我们很难编写Action的单元测试,与Struts1.x相比,Struts2的Action 不再依赖于HttpServletRequest和HttpServletResponse对象,使我们能够更方便的针对Action编写单元测试。Struts2的单元测试看起来就像这样:public void testEnrol(){userinfoAction.setUsername(“wangwu“);userinfoAction.setUserPassword(“123456“);userinfoAction.setMail(““);String result = userinfoAction.enrol();assertEquals(“success“,result);}与Spring的集成与Struts1.x相比,Struts2不必再自己编写singleton,进一步的降低了程序间的耦合性,就Struts2内部本身而言,降低了框架本身的偶合性。更加的模块化与Struts1.X 相比,Struts2更加的模块化,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。基于插件的框架Struts2是一个基于插件的框架,社区中提供了很多实用的插件,比如jfreechat/json等等,使用这些插件可以简化我们的开发,加快开发进度。大量的拦截器Struts2本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候我们从页面取得参数,这个时候它是String类型的,我们需要手动的把它转成Long型的或是Integer型的再使用,在Struts2中你不必这样做,Struts2中已经帮你做了这些事情了。当然我们也可以实现自定义的拦截器,比如:权限检查拦截器来做访问控制。惯例大于配置惯例大于配置是Struts2的架构目标,比如我们需要对页面输入的数据进行验证,只需取一个跟Action同名的xxAction-validation.xml文件,Struts2就会自动的进行验证。还有很多,比如国际化资源文件等。多种视图的支持多种视图的支持:jsp,freemarker,Veloctiy,只要你愿意,你甚至可以通过轻松的改造让它支持pdf,同一个项目中你可以支持多种视图。申明式的异常处理Struts2提供了方便的申明式异常处理,它看起来像这样:《global-results》《result name=“licenceException“》/WEB-INF/pages/client/licenceException.jsp《/result》《result name=“payException“》/WEB-INF/pages/client/unPay.jsp《/result》《result name=“accessDeny“》/WEB-INF/pages/client/accessDeny.jsp《/result》《/global-results》 《global-exception-mappings》《exception-mapping exception=“com.yeebobo.yeebox.web.licence.LicenceException“ result=“licenceException“/》《exception-mapping exception=“com.yeebobo.yeebox.web.licence.PayException“ result=“payException“/》《/global-exception-mappings》如果你以前是WebWork的用户,那么你会觉得Struts2和WebWork实在是太像了,当然如果你以前是Struts1.x的忠实用户,也能够快速的过渡到Struts2的开发中来,如果你重来没有用过任何框架,你也可以通过快速的学习,加入到Struts2的应用开发中来,因为它足够的简单。

java web 如何加入struts2框架

对一个javaweb中加入Struts2框架,具体包含以下两个步骤:

  1. 将Struts2的框架jar包,将jar拷贝到WEB_ROOT中WEB_INFO的lib包下面

    主要包含以下几个基础jar包:

        struts2-core-2.x.x.jar :Struts 2框架的核心类库;

        xwork-2.x.x.jar :XWork类库,Struts 2在其上构建;

        ognl-2.6.x.jar :对象图导航语言(Object Graph Navigation Language),Struts 2框架使用的一种表达式语言;

        freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写;

        commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录;

        Commons-fileupload。

 2.对配置文件进行配置,主要包括web.xml和struts.xml;

    首先是web.xml的配置,内容大致如下:

《filter》    《filter-name》struts2《/filter-name》    《filter-class》org.apache.struts2.dispatcher.FilterDispatcher《/filter-class》《/filter》《filter-mapping》    《filter-name》struts2《/filter-name》    《url-pattern》/*《/url-pattern》《/filter-mapping》

    接着对stucts.xml的配置,将该文件放在WEB-INF/classes下,内容大致如下:

《?xml version=“1.0“ encoding=“UTF-8“?》《!DOCTYPE struts PUBLIC    “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN“    “

struts2的核心控制器是什么 2、什么是拦截器 3、什么是值栈

FilterDispatcher也是Struts2的核心技术。FilterDispatcher核心控制器执行以下操作:(1)读取静态数据信息(2)决定需要转发或者导航的Action配置(3)创建Action的Context(4)创建Action代理(5)内存清理和性能优化拦截器:Interceptor 拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种个样的Web项目需求。 也可以阻止Action的执行,同时也可以提取Action中可以复用的部分。(1)在Action调用之前提供系统处理流程逻辑控制(2)和Action交互时,提供Ation执行时的一些初始信息(3)在Action结束后,一些事后的处理流程逻辑(4)修改Action中返回的Result信息(5)捕获异常值栈是用ognl表达式存值的最初地方,即一个存值的栈

struts2 显示数据库中的html

看如下代码: 《% request.setAttribute(“error“, “《font color=’red’》password wrong!《/font》《br /》“); %》 《s:property value=“#request.error“ escapeHtml=“false“ /》 《s:property value=“’test《hr/》’“ escapeHtml=“false“ /》escapeHtml=false,html标签将起作用。注意第二句如果在value中直接输出的话,要用单引号括起来。

struts1和struts2和springMVC的区别和介绍

struts1Struts1 工作流程1 ActionServlet接收由浏览器发出的请求后,检索和请求匹配的ActionMapping对象。如果不存在,返回请求无效的信息。2 检索和请求匹配的ActionForm对象。如果不存在,就创建一个。把提交的表单中的数据保存在ActionForm对象中3 根据配置信息决定是否进行校验。如果是,就进行校验。如果通过校验,进行下一步4 ActionServlet根据ActionMapping对象包含的信息决定把请求转发给哪个Action。如果这个Action的对象不存在,就创建一个,然后调用它的excute方法5 Action的excute方法返回一个ActionForward对象。ActionServlet把请求转发给ActionForward指定的JSP。6 ActionFoward对象指定的JSP生成动态网页,返回给浏览器struts2struts2是webwork升级版,跟struts1没有关系。struts1和servlet耦合度高,各层之间耦合度高,单元测试困难,表示层技术单一,而struts2没有和servlet耦合,更容易测试,支持更多表示层技术。struts2工作流程1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求。2) 这个请求经过一系列的过滤器(Filter)。3) 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。6) ActionProxy创建一个ActionInvocation的实例。7) ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。Struts2的核心就是拦截器。Struts.xml中所有的package都要extends=“struts-default“。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。springmvc1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet将请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。struts1与struts2的比较1、struts1要求Action类继承一个抽象基类,而不是接口,struts2继承ActionSupport类或者实现Action接口。2、struts1是单例模式的,Action资源必须是线程安全的或同步的,会有线程安全问题,struts2为每一个请求都实例化一个对象,不存在线程安全问题。3、struts1依赖servlet API 因为execute方法的参数有

struts2(struts1和struts2的区别)

本文编辑:admin
struts2 ,struts ,tr

本文相关文章:


struts2(struts2的优点是什么)

struts2(struts2的优点是什么)

本文目录struts2的优点是什么Eclipse怎样配置struts2apache struts2漏洞在net平台有吗求下面struts2漏洞攻击代码详解!!struts2的基本结构和构成struts2.0的工作原理struts2的优点是什

2025年2月9日 08:50

更多文章:


CAD制图中dwg图形文件与dxf图形文件有什么区别?dxf文件用什么打开

CAD制图中dwg图形文件与dxf图形文件有什么区别?dxf文件用什么打开

本文目录CAD制图中dwg图形文件与dxf图形文件有什么区别dxf文件用什么打开dxf文件用什么软件打开微信怎么看dxf文件CAD制图中dwg图形文件与dxf图形文件有什么区别CAD制图中dwg图形文件与dxf图形文件区别为:性质不同、打开

2025年3月11日 11:00

dictionary怎么读音发音(请问dictionary怎么读)

dictionary怎么读音发音(请问dictionary怎么读)

本文目录请问dictionary怎么读dictionary怎么读dictionary读什么词典的英文怎么读dictionary该怎么读【发音】请问dictionary怎么读dictionary代码字典; 音标翻译一下就会了。dictiona

2025年3月26日 17:40

网站源代码怎么找下载信息(浏览器查看网页源代码怎样通过代码找到地址,然后下载)

网站源代码怎么找下载信息(浏览器查看网页源代码怎样通过代码找到地址,然后下载)

本文目录浏览器查看网页源代码怎样通过代码找到地址,然后下载怎么获取网页源代码中的文件怎样从网页源码中找到下载地址浏览器查看网页源代码怎样通过代码找到地址,然后下载查找呗可以查找rar txt iso等等文件格式,然后匹配下载,或者观察网页形

2025年3月3日 09:50

mysql字段求交集(请教下mysql数据表合并问题,有交集,需要自动更名,高手帮帮忙)

mysql字段求交集(请教下mysql数据表合并问题,有交集,需要自动更名,高手帮帮忙)

本文目录请教下mysql数据表合并问题,有交集,需要自动更名,高手帮帮忙求问:mysql如何查询两个字段数不同的表中数据不一致的记录MSSQL和MySQL中,如何将两列字段的值互相交请教下mysql数据表合并问题,有交集,需要自动更名,高手

2025年3月29日 06:00

folderbrowserdialog(folderBrowserDialog1 的使用C#)

folderbrowserdialog(folderBrowserDialog1 的使用C#)

本文目录folderBrowserDialog1 的使用C#c#webform 有没有文件夹选择框folderbrowserdialogfolderBrowserDialog1 的使用C#虽然你找到了,还是和你说说好了~~~//设置根在桌面

2025年4月5日 01:30

contenttype有哪些(html中的content-type是什么意思)

contenttype有哪些(html中的content-type是什么意思)

本文目录html中的content-type是什么意思http content-type有哪些html中的content-type是什么意思content-type是内容类型,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、

2025年3月4日 05:00

ssh框架流程(SSH框架的运行流程是怎样的)

ssh框架流程(SSH框架的运行流程是怎样的)

本文目录SSH框架的运行流程是怎样的SSH框架的执行过程JAVA SSH框架搭建流程急求SSH框架的具体流程SSH框架流程是怎样的,要具体点的,不要大概、、、怎么快速搭建ssh框架JavaEE的ssh框架要怎么做搭建ssh框架步骤整合SSH

2025年2月28日 19:20

POP3和SMTP是是什么意思?Q邮箱里的“pop3登录”是神马玩意儿(麻烦筒子们留心一下“问题补充”哈)

POP3和SMTP是是什么意思?Q邮箱里的“pop3登录”是神马玩意儿(麻烦筒子们留心一下“问题补充”哈)

本文目录POP3和SMTP是是什么意思Q邮箱里的“pop3登录”是神马玩意儿(麻烦筒子们留心一下“问题补充”哈)qq邮箱pop3登录失败,密码正确的邮箱的POP3是什么意思,什么是用POP3登入POP3和SMTP是是什么意思POP3是Pos

2025年2月15日 05:10

apartment什么意思(apartment什么意思)

apartment什么意思(apartment什么意思)

本文目录apartment什么意思apartment中文是什么意思Condo和apartment的区别是什么apartment和flat意思有什么不同(在英式英语里)apartment汉语啥意思apartment是什么意思apartment

2025年2月10日 21:40

queryrunner(QueryRunner qr = new QueryRunner(ds);有什么用啊)

queryrunner(QueryRunner qr = new QueryRunner(ds);有什么用啊)

本文目录QueryRunner qr = new QueryRunner(ds);有什么用啊QueryRunner类方法的参数都是什么意思 QueryRunner qr = new QueryRunner(ds);有什么用啊你好!Query

2025年3月5日 11:50

log4j logback(为什么要用SLF4J+Logback 替换commons-logging+log4j)

log4j logback(为什么要用SLF4J+Logback 替换commons-logging+log4j)

本文目录为什么要用SLF4J+Logback 替换commons-logging+log4jlogback和log4j的区别如何将应用的log4j替换成logback详解log4j子类怎么调用父类中定义的loggerlogback和log4

2025年3月1日 14:20

x86_64(linux发行版中的i386/i686/x86-64/有什么区别)

x86_64(linux发行版中的i386/i686/x86-64/有什么区别)

本文目录linux发行版中的i386/i686/x86-64/有什么区别windows x86-64什么意思dyld_shared_cache_x86_64是什么,可以删除吗i386 和 x86-64 有什么区别ARM64跟x64有什么区别

2025年3月14日 22:10

localizer是什么意思(localizer是什么意思)

localizer是什么意思(localizer是什么意思)

本文目录localizer是什么意思sector是什么意思localizer是什么意思localizern.定位器,定位信标; 例句:1.Are you turning on the localizer now? 你现在转向航道了吗? 2.

2025年2月26日 11:20

指针的指针是什么(指向指针的指针是什么意思)

指针的指针是什么(指向指针的指针是什么意思)

本文目录指向指针的指针是什么意思什么是指针什么是指针的指针他们之间有本质的区别么指针的定义是什么什么是指针指向指针的指针是什么意思1指针也是一个变量,在PC机windowsvc里占4个字节,dos的tc里是2个字节2指针变量里存的是一2字节

2025年2月13日 22:10

基本数据类型(C语言 四种基本数据类型)

基本数据类型(C语言 四种基本数据类型)

本文目录C语言 四种基本数据类型java的基本数据类型有哪些基本数据类型有啥基本数据类型有哪些Java中基本数据类型有哪些java中除了布尔类型和字符串类型外,其他基本数据类型的级别顺序是什么如何理解Java中基本数据类型不可变javasc

2025年3月10日 07:10

their怎么读语音(their怎么读)

their怎么读语音(their怎么读)

本文目录their怎么读theⅰr的英标读音怎么读我听不清strech out their 是怎么发音的their怎么读i耱☆☆☆☆☆their用英语怎么读their英语读音是什么their怎么读their 英们的They have a

2025年3月15日 23:20

capital什么意思(capital中文是什么意思)

capital什么意思(capital中文是什么意思)

本文目录capital中文是什么意思capital是什么意思capital啥意思“capital”是什么意思capital是什么意思怎么用会计学中,capital指什么capital什么意思及同义词capital中文是什么意思n. 资本;

2025年3月22日 01:20

个人简历怎么写最好(个人事业简历怎么写)

个人简历怎么写最好(个人事业简历怎么写)

本文目录个人事业简历怎么写求职简历如何填写比较好个人事业简历怎么写简历其实就是一份推销自己的宣传单, 千万不要觉得我要做一个非常精美的简历,花很多心思在设计上。这样做真的没必要,除非你要体现自己的强大设计水平,否则可能还会给面试官带来华而不

2025年2月12日 21:00

matlab中怎么建立wrl物体的包围盒?怎样绘制osg包围球框(就像包围盒框那样),急急急急

matlab中怎么建立wrl物体的包围盒?怎样绘制osg包围球框(就像包围盒框那样),急急急急

本文目录matlab中怎么建立wrl物体的包围盒怎样绘制osg包围球框(就像包围盒框那样),急急急急包围盒的分类什么是汽车侧围纸盒的介绍unity里的碰撞检测boxcolider是AABB包围盒,还是obb包围盒matlab中怎么建立wrl

2025年3月9日 08:20

google地图api(谷歌地图API的简介)

google地图api(谷歌地图API的简介)

本文目录谷歌地图API的简介如何通过google map api实现地图定位如何使用GOOGLE EARTH 的API开发自己的应用程序什么是 Google地图ApiKey如何获取Google地图API密钥GoogleMap v3 API详

2025年2月13日 14:00

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索