struts2(struts1和struts2的区别)
本文目录
- struts1和struts2的区别
- 为什么要用到struts2
- java web 如何加入struts2框架
- struts2的核心控制器是什么 2、什么是拦截器 3、什么是值栈
- struts2 显示数据库中的html
- struts1和struts2和springMVC的区别和介绍
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框架,具体包含以下两个步骤:
将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方法的参数有
更多文章:

CAD制图中dwg图形文件与dxf图形文件有什么区别?dxf文件用什么打开
2025年3月11日 11:00

dictionary怎么读音发音(请问dictionary怎么读)
2025年3月26日 17:40

网站源代码怎么找下载信息(浏览器查看网页源代码怎样通过代码找到地址,然后下载)
2025年3月3日 09:50

mysql字段求交集(请教下mysql数据表合并问题,有交集,需要自动更名,高手帮帮忙)
2025年3月29日 06:00

folderbrowserdialog(folderBrowserDialog1 的使用C#)
2025年4月5日 01:30

contenttype有哪些(html中的content-type是什么意思)
2025年3月4日 05:00

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

queryrunner(QueryRunner qr = new QueryRunner(ds);有什么用啊)
2025年3月5日 11:50

log4j logback(为什么要用SLF4J+Logback 替换commons-logging+log4j)
2025年3月1日 14:20

x86_64(linux发行版中的i386/i686/x86-64/有什么区别)
2025年3月14日 22:10

localizer是什么意思(localizer是什么意思)
2025年2月26日 11:20

matlab中怎么建立wrl物体的包围盒?怎样绘制osg包围球框(就像包围盒框那样),急急急急
2025年3月9日 08:20