Struts 基础题

###1. Struts的应用(如STRUTS架构) Struts 是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。实现了业务代码与视图代码分离,能有效的理清系统结构,降低了系统的复杂度和维护难度。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化。 ###2. Struts 的5个主要类 ActionServlet是核心控制器,系统维护的,你不能操作,它主要是根据传入的action路径在ActionMapping中查找相应的类,并调用它。 Action是业务控制器,主要是从ActionForm中接收页面传进来的数据,然后进行逻辑处理。 ActionForm是用来接收页面上表单中的数据。 ActionMapping是用来配置每个Action所对应的路径。 ActionForward是用来实现跳转,在Action中最后一行语句通常是return mapping.forward()这里传入的值就在ActionForward中设置。

###4. Struts工作原理以及为什么使用 Struts 的工作原理: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,当ActionServlet接收到一个客户请求时,将执行如下流程: (1) 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; (2) 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; (3) 根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; (4) 如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象, 就表示表单验证成功; (5) ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给那个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; (6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件; (7) ActionForward对象指向JSP组件生成动态网页,返回给客户;

为什么要用: JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件

###6. Struts1和Struts2区别 Action类 Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。

Struts 2的Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2的Action对象使用。

线程模型 Struts 1 Action类是单例类,因只有一个示例控制所有的请求。单例类策略造成了一定的限制且给开发带来了额外的烦恼。Action资源必须是程安全或者同步的

Struts 2 Action对象每一个请求都实例化对象,所以没有程安全的问题。(实践中,servlet容器生许多丢的对象对于每一个请求,多于一个的对象并不影响垃圾收集)

Servlet 依赖 Struts 1的Action类依赖于servlet API以HttpServletRequest和HttpServletResponse作参数传给execute方法当Action被调用时。

Struts 2的Action不和容器有关。Servlet上下文被表现简单的Maps,允许Action被独立的测试。Struts 2的Action可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素少或者排除直接访问HttpServletRequest或者 HttpServletResponse的需要。

易测性 测试Struts 1的主要障碍是execute方法暴露了Servlet API。第三方的扩展,Struts测试用例,提供Struts 1的集合对象。

Struts 2的Action可以通过实例化Action测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。

接受输入 Struts 1使用ActionForm对象捕获输入。象Action一样,所有的ActionForm必须扩展基类。因其他的JavaBean不能作 ActionForm使用,开发者经常创建多余的类捕获输入。DynaBeans可以被用来作替代ActionForm的类创建。但是开发者可以重新描述 已经存在的JavaBean。

Struts 2Action属性作输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action的属性可以通过标签库访 问。Struts 2也支持ActionForm形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象使用。模型驱动特性简化标签对POJO输入对象的引 用。

表达式语言 Struts 1整和JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。

Struts 2使用JSTL,但是框架也支持更大和更灵活的表达式,叫做“对象图形符号语言”(OGNL)。

将值绑定到视图上 Struts 1使用标准JSP机制来绑定对象到页面上下文。

Struts 2使用“ValueStack”技术了标签库可以不用链接你的视图到对象的表现类型访问值。ValueStack策略允许重用视图。

类型转换 Struts 1的ActionForm属性经常都是String的。Struts 1使用Commons-Beanutils类型转换。转换每一个类,不是每一个实例配置。

Struts 2使用OGNL类型转换。框架包含转换器基本的和共同的对象类型和原始类型。

验证 Struts 1支持手动验证凭借ActionForm的validate方法,或者通过扩展的公用验证器。类可以有不同的验证上下文未相同的类,但是不能包括验证子对象。

Struts 2支持手动验证凭借validate方法和XWork验证框架。Xwork验证框架支持一连串的验证子属性使用的验证了属性类的类型和严正上下文而定义。

Action执行的控制 Struts 1支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。

Struts 2支持在每一个Action基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建且使用不同的所需的Action。

###7. Struts的MVC模式

控制层: 有一个struts-config.xml,与之相关联的是ActionServlet,在Struts中,承担MVC中的Controller角色。 ActionServlet是一个核心的控制组件,这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的业务Action。另外ActionServlet也负责用相应的请求参数填充ActionForm,并传递给业务Action。业务Action实现核 心业务逻辑,它可以访问JavaBean或EJB。最后业务Action会把控制权传给后续的JSP文件,后者生成视图。所有这些控制逻辑都是由 struts-config.xml文件来配置。

视图层:主要是由JSP生成页面完成视图,Struts提供丰富的JSP标签:Html、Bean、JSTL、Logic、Template等,这有利于分开视图逻辑与业务逻辑。

模型层: 模型是以一个或多个JavaBean的形式存在。这些bean分为三类:ActionForm、Action、JavaBean、EJB。 ActionForm通常称之为FormBean,封装了来自于Client的用户请求参数信息,如:表单信息。Action通常称之为 ActionBean,获取从ActionServlet传来的FormBean,取出FormBean中的相关信息,并作出相关处理,一般是调用 JavaBean或EJB等。

核心:Struts的核心是ActionServlet,ActionServlet的核心是Struts-config.xml。

转载于:https://my.oschina.net/xianggao/blog/358842

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值