`
zengshaotao
  • 浏览: 754265 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts经典问题集锦

 
阅读更多

1.什么是MVC?

MVC是Model,View,Controller的缩写,MVC是Application开发的设计模式,也就是大家所知道的Model2.

在MVC的设计模式中,它包括三类对象:

(1)模型(Model)对象:是应用程序的主体部分。

(2)视图(View)对象:是应用程序中负责生成用户界面的部分。

(3)控制器(Control)对象:是根据用户的输入,控制用户界面数据显示及更新Model对象状态的部分。控制器协调M与V,起来一个很好的纽带作用. 

 

2.MVC有哪些优缺点?

 优点:

1)视图控制模型分离, 提高代码重用性,提高开发效率,便于后期维护, 降低维护成本。

2)方便多开发人员间的分工。

 缺点:

1)清晰的构架以代码的复杂性为代价, 对小项目优可能反而降低开发效率。

2)运行效率相对较低

3)目前没有比较好的rich 客户端的解决方案

4) 控制层和表现层有时会过于紧密,导致没有真正分离和重用

 

3. struts1的工作流程
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中,同时通过IoC的思想注入了一些对象,如request,response等,当接收到一个客户请求时由tomcat进行一些前提的处理,如收集数据到request对象中,并调用ActionServlet对象,ActionServlet截取用户提交的URL,根据最终获得的PATH路径,匹配上struts-config.xml中配置的action,action经过相应的业务逻辑的处理,返回一定内容,最后交由服务器进行跳转.
整个请求与响应的过程中一些细节需要注意:
(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

 

5。struts1和struts2的区别和对比?

 

 

Action 类:

Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。

Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

 

线程模式:

Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事。Action资源必须是线程安全的或同步的。

 Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

 

Servlet 依赖:

 Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。

 Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

 

可测性:

测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。

Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

 

捕获输入:

Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。

Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。

 

表达式语言:

Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

 

绑定值到页面(view):

 Struts 1使用标准JSP机制把对象绑定到页面中来访问。

Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

 

类型转换:

Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。

Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

 

校验:

 Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

 

Action执行的控制:

Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

 

6.简述Struts Form Bean的表单验证流程
   

    1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。
    2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。
    3、如果validate()方法返回的ActionErrors 对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。
    4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。
对于以上流程的步骤4 。如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。

 

 

7. Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因
不是

声明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spring中用scope="prototype"来管理.

但是对于actionForm则不同,   每当有一次用户的请求,ActionFrom就会被创建一次

分享到:
评论

相关推荐

    struts中文问题,struts国际化问题——终极解决方案

    经典的struts中文问题,国际化问题终极解决方案

    Struts2课堂学习总结

    struts2的经典总结,对struts2最容易忽视的问题和难点,以及怎样快速掌握作了很好的总结。

    Struts2 in action中文版

    11.1.2 Struts 2如何解决本地Java对i18n支持的问题 243 11.2 Struts 2 i18n示例 244 11.2.1 Struts 2 i18n快速展示 244 11.2.2 幕后一览 246 11.3 Struts 2 i18n详情 247 11.3.1 Struts 2默认的TextProvider Re-...

    struts中配置动态ActionForm

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助。在此谢谢各位!...

    精通Struts,孙卫琴(全)

    孙卫琴的经典著作之一,如有问题可以联系我

    struts 2完成登录

    关于struts 2 基础的一个例子,完成整个经典案例登陆问题,熟练运用 struts 2 配置......

    Struts中重写方法中文转码问题

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助。在此谢谢各位!...

    J2EE中Struts中四种解决中文乱码问题的方法

    本文档含有四种解决struts中出现的中文乱码的方法,只要按步骤,一定可以使用,非常经典哦

    struts2+hibernate3+spring

    struts2+hibernate3+spring,一个经典的例子,可以直接应用于项目,没有解决不了的问题 做这个东西的时候,遇到的问题也很多,如有疑问,请发邮件到love_zhangxsh@126.com,进行探讨

    struts2_demo.rar_Java编程_Java_

    关于struts2.0的验证框架第六个故事,关于struts2.0的多文件上传第七个故事,关于struts2.0的单个文件上传第八个故事,关于struts2.0的批量处理第九个故事,关于struts2.0里的get提交传递参数的问题第十个故事,...

    struts2.2.3+ hibernate3.6+spring3.0.5

    经典SSH组合(struts2.2.3+ hibernate3.6+spring3.0.5),已经在项目中成功,完全不会有兼容问题,非常适合初学者

    struts2,hibernate3,spring2,ajax的经典项目.part1.rar

    共三个包,挺不错的,用MYSQL+以上东西做的,有问题请M我

    struts+spring+hibernate实例

    比较经典的ssh实例开发,按照步骤做可以解决不会的问题。

    01_张孝祥09年Struts视频_文件上传单元

    所讲解的内容组织和衔接得非常巧妙,通过一个个实际的应用需求和问题巧妙引出各个知识点的讲解,案例小巧经典,思路和条理清晰透彻,一切似乎都水到渠成,让听众一听就懂、一学就会。

    Struts在行动使用领先的JAVA框架构建Web应用

    很经典适合收藏!! &lt;br&gt;本人所发布的所有资源,请访问以下地址 http://download.csdn.net/user/hahaomi23&lt;br&gt;http://download.csdn.net/user/hahaomi23&lt;br&gt;&lt;br&gt;希望这些资源对大家有所帮助! 如有问题可...

    6年javaEE开发的Word资料合集

    pio + itext 生成报表 几大框架问题 Struts2常用标签总结等 Word文件"&gt;包括165个javaEE学习的Word文件 jstl标准函数 mysql命令详解 javascript 常用JavaScript代码 java位运算大全 java struts2 0经典知识点 ORACLE ...

    收集的常见的专业问题解决办法.rar

    2009-03-20 16:37 254350 86752 常见的专业问题解决办法\解决Struts中ApplicationResources_properties文件不支持中文问题_微科工作室 QQ:28790953____.mht 2009-02-25 08:45 文件夹 文件夹 常见的专业问题解决办法...

    java技术文档 常用类和经典应用

    Eclipse中cvs的使用.pdf Eclipse中Web应用开发基础.pdf HashSet类的用法.pdf Hashtable类的用法.pdf Java语言基础.pdf Math类的常用方法.pdf String与StringBuffer.pdf ...在Eclipse中使用Struts开发购物车.pdf

Global site tag (gtag.js) - Google Analytics