springmvc和struts2区别
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拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。
Struts、Spring、Hibernate三大框架的原理和优点
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
对比分析Struts和Spring两种MVC框架
对比分析Struts和Spring两种MVC框架2008年08月12日星期二17:26基于Web的MVC framework在J2EE的世界内已是空前繁荣。
TTS网站上几乎每隔一两个星期就会有新的MVC框架发布。
目前比较好的MVC,老牌的有Struts、Webwork。
新兴的MVC 框架有Spring MVC、Tapestry、JSF等。
这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRaptor等。
这些框架都提供了较好的层次分隔能力。
在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。
如何选择一个好的框架应用在你的项目中,将会对你的项目的效率和可重用是至关重要的。
本文将对目前最流行、最常用的两种framework进行介绍。
一)StrutsStruts是Apache软件基金下Jakarta项目的一部分。
Struts框架的主要架构设计和开发者是Craig R.McClanahan。
Struts 是目前Java Web MVC框架中不争的王者。
经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。
但是Struts某些技术特性上已经落后于新兴的MVC框架。
面对Spring MVC、Webwork2 这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。
但站在产品开发的角度而言,Struts仍然是最稳妥的选择。
Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。
基于struts构架的web 应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。
根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。
但Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。
Struts,Hibernate,Spring三框架的优缺点
上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具,没有商业公司支持,没有标准化等等这些站不住脚的理由。
6. 支持I18N
一、转到展示层时,需要配置forward,每一次转到展
示层,相信大多数都是直接转到jsp,而涉及到转向,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。
四、EB和Hibernate学习难度在哪里?
Java Web层框架比较:JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket
【译者按】这是Matt Raible在今年(2007年)6月24-27号召开的JA-SIG夏季会议上所作的主题演讲,Matt从众多方面对Java Web层框架做了一个全面、深入的比较。
笔者认为这是一份及时的文档,它对开发者如何判定一个Web层框架的好坏、如何选择适合自己项目的框架有极大的指导作用。
本文是对Matt Raible演讲稿的整理归纳。
【作者介绍】Matt Raible,开源框架AppFuse的发起者、主要开发者;《Professional JSP 2.0》、《Spring Live》等书的作者;众多会议的演讲者,MySQL User Conference, ApacheCon, ApacheCon EU等;现任Raible Designs的CEO。
首先,Matt以自己的实践经验,指出了Java Web层框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他们各自的优、缺点:JSF优点:Java EE标准,这意味着有很大的市场需求和更多的工作机会上手快速并且相对容易有大量可用的组件库缺点:大量的JSP标签对REST和安全支持不好没有一个统一的实现。
既有SUN的实现,又有Apache的实现——MyFaces。
Spring MVC优点:对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等便于测试——归功于IoC缺点:大量的XML配置文件太过灵活——没有公共的父控制器没有内置的Ajax支持Stripes优点:不需要书写XML配置文件良好的学习文档社区成员很热心缺点:社区比较小不如其他的项目活跃ActionBean里面的URL是硬编码的Struts 2优点:架构简单——易于扩展标记库很容易利用FreeMarker或者Velocity来定制基于控制器或者基于页面的导航缺点:文档组织得很差对新特征过分关注通过Google搜索到的大多是Struts 1.x的文档Tapestry优点:一旦学会它,将极大地提高生产率HTML模板——对页面设计师非常有利每出一个新版本,都会有大量的创新缺点:文档过于概念性,不够实用学习曲线陡峭发行周期长——每年都有较大的升级Wicket优点:对Java开发者有利(不是Web开发者)页面和显示绑定紧密社区活跃——有来自创建者的支持缺点:HTML模板和Java代码紧挨着需要对OO有较好的理解Wicket逻辑——什么都用Java搞定接着,Matt通过采访这些框架的作者,与他们讨论各种开源的Java Web框架,并且突出各个框架的长处、听取框架作者对其他框架的看法,希望借此了解这些框架的未来发展方向。
22道Java架构师面试题及答案分享
22道Java架构师⾯试题及答案分享1、你认为项⽬中最重要的过程是那些? 分析、设计阶段尽量找出进度的优先级 2、如果给你⼀个4-6⼈的team,怎么分配? 挑选⼀技术过硬的⼈作为我的替补。
其它⼈平均分配任务,每周进⾏全⾯的任务分配,每个⼈领取⼀周的⼯作量,每天汇报进度。
3、简述软件开发⽂档? 需求分析、概要设计、详细设计、操作⼿册、测试计划 4、你认为⼀个项⽬如何才正确? 是企业利益最⼤化。
5、你经常读那些书? Java编程思想 Java模式 6、springmvc的⼯作原理? 客户端请求提交到DispacherServlet由DispacherServlet控制器查询HandlerMapping,找到处理请求的Controller Controller调⽤业务逻辑处理后,返回ModelAndView DispacherServlet查询视图解析,找到ModelAndView指定的视图 视图负责将结果显⽰到客户端 7、springmvc 和struts2的区别? 机制:springmvc 的⼊⼝是servlet,struts2的⼊⼝是filter 性能: springmvc 会⽐struts2快⼀点。
springmvc是基于⽅法设计,struts2是基于类,每次发⼀次请求都会实例⼀个action,每个Action 都会被注⼊属性。
参数传递:struts2是在接受参数的时候,可以采⽤属性来接收参数,这家说明可以让多个⽅法共享 拦截器机制:struts2有⾃⼰的interceptor机制,springmvc⽤的是独⽴的AOP⽅式,strtus2的配置⽂件还是⽐springmvc⼤,springmvc 使⽤简洁,springMVC⽐struts2开发效率要⾼、 8、struts2⼯作原理? 客户端初始化⼀个执⾏servlet的请求 这个请求经过⼀系列的过滤器,被FilterDispatcher调⽤,询问ActionMapper来决定是否调⽤Action FilterDispatcher把请求的处理交给ActionProxy ActionProxy通过Configuraction Manager询问相关的配置⽂件,找到需要的Action类 ActionProxy创建ActionInvocation的实例 ActionInvocation调⽤Action前后的拦截器 Action执⾏完毕后,根据struts、xml配置⽂件找到对应的视图页⾯ 9、Hibernate ⼯作原理? 读取并解析配置⽂件 创建SessionFactory 打开Session 创建事务:transaction 持久化操作 提交事务 关闭Session 关闭SessionFactory 10、为什么要⽤spring? spring能够很好的和各⼤框架整合 spring 通过IOC容器管理了对象的创建和销毁⼯⼚模式 在使⽤hiberna,mybatis的时候,不⽤每次都编写提交的事务的代码,可以使⽤spring的AOP来管理事务 AOP其实就是⼀个动态代理的实现 声明式事务和编程式事务 11、mybatis的优缺点? 优点:SQL写在XML中,便于统⼀管理和优化 提供映射标签,⽀持对象和数据库的orm字段关系映射 可以对SQL进⾏优化 缺点: SQL⼯作量⼤ mybagtis移植姓不好 不⽀持级联 12、谈谈SSH整合? struts(表⽰层)+spring(业务层)+hibernate(持久层) struts是⼀个表⽰层的框架,主要⽤于接收请求,分发请求。
Struts2是一个典型的MVC架构
Struts2+Spring+Hibernate设计模式一、Struts2技术Struts2是一个典型的MVC架构,给软件开发带来很大的方便。
MVC是一种设计模式,它强制性地使应用程序的输入、处理和输出分开。
使用MVC 模式,应用程序被分成三个核心部件:模型(Model,即M)、视图(View,即V)、控制器(Controller,即C)。
它们各自处理自己的任务。
在Struts2中,其中M(业务层)用Java程序(业务类)来实现,V(表示层)用JSP 来实现,C用Action类来实现。
客户端服务器1.浏览器发出的请求可以用下列方式:1)提交HTML网页form表单<form action="login" method="GET">name: <input type="text" name="name"><br>pass: <input type="password" name="pass"><br><input type="submit" value="submit"></form>2)直接在地址栏输入http://localhost:8080/login?name=abc&pass=1233)点击超链接<html><body><a href="login?name=abc&pass=123">test</a></body></html>在struts2编程中login只是请求的逻辑名字,而不是具体的jsp或servlet。
2.过滤器根据请求和Struts.xml配置文件去调用对应的ActionStrtuts2本质上是一个过滤器,所以需要在web.xml中配置一个Struts2的过滤器。
Struts2和springmvc的区别
Struts2和springmvc的区别⼀、框架机制1. spring MVC是通过servlet的⽅式进⾏拦截,在第⼀次请求发送时初始化,并随着容器关闭⽽销毁。
2. struts2是通过filter(拦截器)的⽅式进⾏拦截,在容器初始化时加载。
晚于servlet销毁。
⼆、拦截机制1.struts2 是类级别上的拦截,每次请求都会创建⼀个对应的action,⼀个url对应action中的⼀个⽅法,action类中的属性被所有⽅法共享,所以action在spring只能配置成多例的,因为是多例的,⽆法使⽤注解等⽅式开发。
如果有两个请求同时访问action,则会发⽣线程并发,导致类属性值错乱,线程不安全。
struts2通过类属性的⽅式接收请求参数,并通过get,set⽅法设置值,也可以通过模型驱动的⽅式注⼊值,action类需要继承ActionSupport实现ModelDrivenMO<T>接⼝。
struts2使⽤的是值栈机制,将页⾯需要的值压⼊值栈,则可在页⾯上通过OGNL表达式获取。
Struts2有⾃⼰的拦截机制,⾃定义Interceptor类,然后进⾏配置,配置⽂件⾮常⼤。
2.spring MVC是⽅法级别上的拦截,⼀个请求对应着⼀个controller中的⽅法,请求参数会封装到⽅法参数中,如果是对象类型的参数则需要在参数名前加上@RequestBody注解即可。
controller类中的属性被⽅法所共享,controller类默认是单例的,在请求发送时不会创建对象,所以可以使⽤注解开发。
spring MVC则是通过⽅法参数model对象来设置需要返回的值,(和request的⽤法相似,因为底层封装的就是request),在页⾯通过el表达式获取。
springMVC有独⽴的AOP拦截机制。
三、性能⽅⾯1.spring MVC⼏乎实现了零配置,在配置了基本的东西之后,再编写controller类和⽅法时,只需加上注解即可,⽆需频繁修改配置⽂件,⽽struts2的机制让他⽆法使⽤注解开发,那就需要编写⼀个action类配置⼀遍,显得⾮常繁琐。
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"技术。
Spring3_MVC与Struts2.x比较
Spring MVCSpringMVC非常优秀的MVC框架, 由其是在3.0版本发布后, 现在有越来越多的团队选择了Spring3 MVC来作为MVC的框架.SpringMVC结构简单,灵活性较高,性能也很优秀。
核心类与接口:DispatcherServlet -- 前置控制器HandlerMapping接口-- 处理请求的映射HandlerMapping接口的实现类:SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上HandlerAdapter接口-- 处理请求的映射AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上Controller接口-- 控制器由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,所以我们并没有用到这个接口。
HandlerInterceptor 接口--拦截器我们自己实现这个接口,来完成拦截的器的工作。
ViewResolver接口的实现类UrlBasedViewResolver类通过配置文件,把一个视图名交给到一个View来处理InternalResourceViewResolver类,比上面的类,加入了JSTL的支持View接口JstlView类LocalResolver接口HandlerExceptionResolver接口--异常处理SimpleMappingExceptionResolver实现类ModelAndView类核心流程图DispatcherServlet说明使用Spring MVC,配置DispatcherServlet是第一步。
DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。
ibatis struts2 spring 介绍
系统架构
设计的原则和评判标准
系统的内聚和耦合度 层次的清晰和简洁性 易于实现性 规范性 可维护性(业务的修改、架构的更换) 可升级和可扩充性 可移植性 可复用性 利于团队合作开发
可靠性、 强壮性、灵活性 高效、 安全
系统的分层结构
我们在解决一个复杂的问题的时候,通常使用 的一个技巧就是分解,把复杂的问题分解成为 若干个简单的问题,逐步地、分别地解决这几 个小问题,最后就把整个问题解决掉。 设计一个复杂的软件系统的时候,同样的,为 了简化问题,我们也通常使用的一个技术就是 分层,每个层完成自身的功能,最后,所有的 层整合起来构成一个完整的系统(“分而治之” 的思想)。
MVC发展历程
后来出现了jsp的页面标签和ajax,可以异步的 请求服务器端资源,将M与VC分开,但是系统 仍然不够灵活。 终于出现了MVC,系统三部分完全解耦分离, 灵活度大大提高,可以采用flex等作为V了。
MVC 的问题 JSP (view) +SERVLET (controller)
Singleton:单例对象的管理
Dependency Inject (DI)
建立/初始化 Object with DI 业务逻辑
Object
业务逻辑
AOP简介
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分 离应用的业务逻辑与系统级服务(例如审计(auditing)和事务 (transaction)管理)进行内聚性的开发。应用对象只实现它 们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚 至是意识)其它的系统级关注点,例如日志或事务支持。
JSP 与 SERVLET 一一对应 大量的 SERVLET SERVLET 的代码相似度很高
java开发常用的框架
java开发常用的框架Struts1框架是apache公司的开源子项目,是基于mvc逻辑分层的web层框架实现。
是出现最早的web层框架,应用最广发。
Struts1框架重点关注的是控制层,关于视图层只是提供了大量的标签;关于model层的影响微乎其微。
Struts2是一个基于MVC〔制定〕模式的Web应用框架,它本质上相当于一个servlet,在MVC制定模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2是Struts 的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别庞大。
Struts 2以WebWork为核心,采纳拦截器的机制来处理用户的请求,这样的制定也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相关于WebWork,Struts 2的变化很小。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java程序员可以为所欲为的使用对象〔编程〕思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作ExpertOne-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。
java开发框架面试题整理
Java开发框架面试Struts2热点面试题?1. 简述Struts2 的工作流程:①. 请求发送给StrutsPrepareAndExecuteFilter②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个Struts2 请求③. 若该请求是一个Struts2 请求,则StrutsPrepareAndExecuteFilter 把请求的处理交给ActionProxy④. ActionProxy 创建一个ActionInvocation 的实例,并进行初始化⑤. ActionInvocation 实例在调用Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。
⑥. Action 执行完毕,ActionInvocation 负责根据struts.xml 中的配置找到对应的返回结果。
调用结果的execute 方法,渲染结果。
⑦. 执行各个拦截器invocation.invoke() 之后的代码⑧. 把结果发送到客户端2. Struts2 拦截器和过滤器的区别:①、过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。
②、Struts2 拦截器只能对Action 请求起作用,而过滤器则可以对几乎所有请求起作用。
③、拦截器可以访问Action 上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能.④、在Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
3. 为什么要使用Struts2 & Struts2 的优点:①. 基于MVC 架构,框架结构清晰。
②. 使用OGNL: OGNL 可以快捷的访问值栈中的数据、调用值栈中对象的方法③. 拦截器: Struts2 的拦截器是一个Action 级别的AOP, Struts2 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。
浅析struts2和springMVC的异同
1 s p r i n gMVC简介
s p r i n g MVC属于 S p r i n g Fr a me Wo r k的后 续产 品 ,已经融 合
在S p r i n g W e b F l o w里 面 S p r i n g 框 架 提供 了构建We b 应 用程 序
第五 , Ac t i o nP r o x y通过 C o n f i g u r a t i o n Ma n a g e r 询 问框 架 的
配 置文件 , 找 到需要 调用的A c t i o n 类;
第六 , Ac t i 0 n Pr o x y 创 建 一 个 Ac t i o n l n v o c a t i o n 的 实例 ;
经验交流
浅 析s t r u t s 2 和s p r i n g MV C 的异 同
陈张 成 都 师范 学 院
摘要: s t r u  ̄ s 2 和s p r i n g M V C 都是j a v a w e b 开发比较 主流的框架 , 目 前企业中使 ,  ̄ s p r i n g M v c 的比例已经远 远超  ̄s t r u t s 2 , 那么两者到底 有什么区别, 是很 多初学者 比较 关注的问题 。
Ht t p Me s s a g e Co n v e t e r : 将 请求 消息转 换 成一 个对 象 , 将对 象 转 换 为指定 的 响应信息 ; 第 五 ,Ha n dl e r 执 行完 成 后 ,向Di s p a t c he r Se r v l e t 返 回一 个
Mo d e l An d VJ e w对 象 ;
深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计
深入浅出的理解框架(Struts2、Hibernate、Spring)与MVC 设计现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Suts2,Spring,Hibernate。
似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础。
然而,假如在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我十分惬意的答复。
由于他们都在为了学习而学习,为了工作而学习,而不是在真正去深化了解一个框架。
其实全部的人都应当思量这样的问题:为什么要学习框架?框架到底给我带来了什么?接下来,我们以登录作为一个最容易的例子,来看看不同的年月,我们是怎么写Web程序的。
后来,我们放弃了在页面上写规律后来,程序写得越来越多,我们发觉,这种在HTML代码中编写Java代码来完成规律的方式存在着不少问题:1. Java代码因为混杂在一个HTML环境中而显得混乱不堪,可读性十分差。
一个JSP文件有时候会变成几十K,甚至上百K。
要找一段规律,常常无法定位。
2. 编写代码时十分困窘,不知道代码到底应当写在哪里,也不知道别人是不是已经曾经实现过类似的功能,到哪里去引用。
3. 骤然之间,某个需求发生了变幻。
于是,每个人蒙头开头全程替换,还要当心翼翼的,生怕把别人的规律改了。
4. 规律处理程序需要自己来维护生命周期,对于类似数据库事务、日志等众多模块无法统一支持。
在这个时候,假如有一个产品,它能够将页面上的那些Java代码抽取出来,让页面上尽量少浮现Java代码,该有多好。
于是许多人开头用法servlet来处理那些业务规律。
public class LoginServlet tends HttpServlet { /* (non-Javadoc) * @see javax.servlet.http.HttpServletdoPost(javax.servlet.http.Http ServletRequest, javax.servlet.http.HttpServletResponse) */ @Overre protect void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException第1页共2页。
struts2基本学习教学
继续框架的学习:Struts2:MVC ←→SpringMVC (不要打架)Oracle:DB ←→MySQL (一些语法还是有差异的,不要打架) Hiberante:DAO ←→MyBatis (都是实现持久化的,不要打架)SSH整合的一个简单的CRUD案例!SSH: spring struts2 hibernate1,Struts2框架是一个MVC框架M(javabean) V(view) C(前端(核心)控制器,业务控制器)2,阐述Struts2的框架原理请求到达前端(核心)控制器从ActionMapper对象中查找ActionMapping对象获得ActionInvoker对象并执行Action返回视图3,在编写Struts2代码之前再介绍一个框架(了解)Struts2是Struts1的一个”延伸”(其实两个框架没有关系)其实Struts2的前身并不是struts1,它其实来自另一框架:webworkStruts1这个框架的控制器是Servlet,这个框架与servlet是严重耦合的!(ActionServlet)Struts1中的控制器是单例的!Struts2跟Servlet无关!Struts2中的控制器是多例的!4,开发Struts2的项目(学框架就是用别人的东西,学别人定义的规则)1)引入JAR包commons-fileupload-*.*.jar : 实现文件上传commons-logging-*.*.jar : apache下提供的一个日志包freemarker-*.*.jar : 提供视图解析的ognl-*.*.jar: struts2中的一个新特性,提供对象图导航语言struts2-core-*.*.jar :struts2的核心包xwork-core-*.*.jar : webwork的核心包2)在开发之前介绍几个文件:在struts2-core-*.*.jar中文件:struts-default.xml满足约束:文件中定义了组件:<bean> : 是struts2中要使用的bean对象<result-type> : 定义了struts2中视图的响应方式<interceptor>: 定义拦截器在struts2-core-*.*.jar中的org.apache.struts2包中文件:default.properties文件中定义开发的语言环境以及url的默认扩展名3)开发31)配置核心控制器(是一个过滤器) 在web.xmlorg.apache.struts2.dispatcher.FilterDispatcher (过时)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter (使用)32)View –> JSP编写自己的配置文件:在src下struts.xml满足33)编写ActionAction可以是一个普通的javabean,不需要实现任何接口或者继承任何类!(当然也可以去实现Action接口或者继承ActionSupport类)视图传值给Action:规则是视图组件的name必须和action中的属性名保持一致!!(注:方法的执行顺序Setter –> execute)5,如果在Action中要使用request,response,session,application对象,struts2框架提供了如下机制:去实现XxxAware接口6,如果在struts.xml中希望有多个action的name相同,可以使用不同package进行管理。
Spring、SpringMVC、Struts2之间的区别
Spring、SpringMVC、Struts2之间的区别⼀、Spring与SpringMVC的区别:spring是⼀个开源框架,是为了解决企业应⽤程序开发,功能如下:功能:使⽤基本的JavaBean代替EJB,并提供了更多的企业应⽤功能范围:任何Java应⽤ Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的容器框架。
1、轻量——从⼤⼩与开销两⽅⾯⽽⾔Spring都是轻量的。
完整的Spring框架可以在⼀个⼤⼩只有1MB多的JAR⽂件⾥发布。
并且Spring所需的处理开销也是微不⾜道的。
此外, Spring是⾮侵⼊式的:典型地,Spring应⽤中的对象不依赖于Spring的特定类。
2、控制反转——Spring通过⼀种称作控制反转(IoC)的技术促进了松耦合。
当应⽤了IoC,⼀个对象依赖的其它对象会通过被动的⽅式传递进来,⽽不是这个对象⾃⼰创建或者查找依赖对象。
你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,⽽是容器在对象初始化时不等对象请求就主动将依赖传递给它。
3、⾯向切⾯——Spring提供了⾯向切⾯编程的丰富⽀持,允许通过分离应⽤的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进⾏内聚性的开发。
应⽤对象只实现它们应该做的——完成业务逻辑—— 仅此⽽已。
它们并不负责(甚⾄是意识)其它的系统级关注点,例如⽇志或事务⽀持。
4、容器——Spring包含并管理应⽤对象的配置和⽣命周期,在这个意义上它是⼀种容器,你可以配置你的每个bean如何被创建——基于⼀个可配置原型(prototype),你的bean可以创建⼀个单独的实例或者每次需要时都⽣成⼀个新的实例——以及它们是如何相互关联的。
然⽽,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞⼤与笨重的,难以使⽤。
5、框架——Spring可以将简单的组件配置、组合成为复杂的应⽤。
struts spring MVC
Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。
Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。
但Struts几乎没有涉及M(Model),所以Struts可以采用JA V A实现的任何形式的商业逻辑。
Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。
在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean 工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。
就是说可将两者一起使用,达到将两者自身的特点进行互补。
MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
比如一批统计数据你可以分别用柱状图、饼图来表示。
C存在的目的则是确保M和V 的同步,一旦M改变,V应该同步更新。
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。
最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用ColdFusion 和PHP 的开发者的欢迎。
模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
第1章 理解MVCandStruts概述
1.3 Struts2框架的 框架的MVC 框架的 实现机制
Struts2框架是在Struts和WebWork基础上发展而来,它 的核心架构就是基于MVC设计模式的。在实际Web应用开 发过程中,Struts2框架主要用于解决表示层的相关问题。
1.3.1 Struts2框架来源 1.3.2 Struts2框架的基本工作流程 1.3.3 Struts2 MVC的实现方式 1.3.4 Struts2 MVC的实际应用
MVC的基本构成(2) 的基本构成( ) 的基本构成
基于MVC模型的Web应用的基本工作流程如图所示:
3 选择相 应视图 控制器 1 请求 通知改变 视图 4 查询模 型状态 模型 2 改变模 型状态
整个工作流程可以分为4个步骤: (1)用户通过视图(一般是JSP页面或HTML页面)发出请求。 (2)控制器接收请求后,调用相应的模型并改变其状态。 (3)当模型状态改变后,控制器选择对应的视图组件来反馈改 变后的结果。 (4)视图根据改变后的模型,将正确的状态信息显示给用户。 返回
返回
Model1架构模式(1) 架构模式( ) 架构模式
Model1架构模式的工作原理如图所示
客户端
1 4
JSP
2
JavaBeans
3
数据
Model1架构模式的工作流程: (1)客户端发出请求,该请求由JSP页面接收。 (2)JavaBean用于实现业务模型,JSP根据请求与不同 Java Bean进行交互。 (3)业务逻辑操作指定Java Bean并改变其模型状态。 (4)JSP将改变后的结果信息转发给客户端。
2
Action类
客户端
1
FilterDispatcher
struts.xml
MVC基础、Model2的MVC和Struts2的MVC
MVC基础、Model2的MVC和Struts2的MVC 1、MVC模式基础1.1、MVC模式简介 MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而达到更好的开发和维护效率。
在MVC模式中,应用程序被划分成模型(Model)、视图(View)和控制器(Controller)三个部分。
其中,模型部分包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式(页面、界面);而控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。
MVC模式的这三个部分的职责非常明确,而且相互分离,每个部分都可以独立的改变而不影响其他部分,大大提高了应用的灵活性和重用性。
1.2、MVC模式基础 在MVC模式中,一个应用被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。
1.2.1、模型、视图、控制器各部分的作用 模型(Model):负责封装应用的状态,并实现应用的功能。
通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息、用户信息等;而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。
视图(View):用来将模型的内容展现给用户,用户可以通过视图来请求模型进行更新。
视图从模型获得要展示的数据,然后用自己的方式展现给用户,相当于提供界面来与用户进行人机交互;用户在界面上操作或者填写完成后,会点击提交按钮或是以其它触发事件的方式,来向控制器发出请求。
控制器(Controller):用来控制应用程序的流程和处理视图所发出的请求。
当控制器接收到用户的请求后,会将用户的数据和模型的更新相映射,也就是调用模型来实现用户请求的功能;然后控制器会选择用于响应的视图,把模型更新后的数据展示给用户。
1.2.2、模型和视图的关系 在MVC中,模型和视图是分离的,通常视图里面不会有任何逻辑实现;而模型也是不依赖于视图的,同一个模型可能会有多种不同的展示方式,即同一个模型可以对应多种不同的视图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦ห้องสมุดไป่ตู้,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比较, 今天闲着没事干, 从网上找了一些资料, 再加上平时使用Spring MVC的感触来总结一下。
6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码:
@RequestMapping(value="/whitelists")
public String index(ModelMap map) {
Spring MVC PK Struts2
我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。
Spring MVC和Struts2的区别:
1. 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
List<Group> groupList = groupManager.findAllGroup(account.getId());
3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
map.put("account", account);
map.put("groupList", groupList);
return "/group/group-index";
}
// @ResponseBody ajax响应,处理Ajax请求也很方便
@RequestMapping(value="/whitelist/{whiteListId}/del")
@ResponseBody
public String delete(@PathVariable Integer whiteListId) {
whiteListManager.deleteWhiteList(whiteListId);
return "success";
}