每日五题(struts2)



struts2面试题:http://mp.weixin.qq.com/s?__biz=MzAwNDExNjEzNw==&mid=201980000&idx=1&sn=441bef0f58b109af1c91e5bf91771907




1.Struts工作机制? 
参考资料: http://blog.csdn.net/g_beginner/article/details/6791106
http://blog.chinaunix.net/uid-24343152-id-3038077.html
http://blog.chinaunix.net/uid-24205507-id-3804311.html
http://duanxx.iteye.com/blog/1662918



Struts的工作流程: 
在web应用启动时就会加载初始化ActionServlet(中心控制器,司令官,它提供一个中心位置来处理全部的终端请求,它负责将HTTP的客户端请求组装之后根据配置文件的信息发放到不同的处理器),ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象  当ActionServlet接收到一个客户请求时,将执行如下流程. 
    -(1)判断是否为action后缀,并检索和用户请求匹配的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组件生成动态网页,返回给客户; 
=====================================================================


1 客户端初始化一个指向Servlet容器的请求;
    
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,
     服务器启动-->init()-->FilterHostConfig加载配置信息-->Dispatcher(调度员) 
                        x=InitOperations.initDispatcher创建和初始化调度-->dispatcher.cleanUpAfterInit()清理任何资源用于初始化调度 --> init.cleanup()--> ActionContext.setContext(null);
                          init-->FilterHostConfig(主机配置包裹filterconfig)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action
       ActionMapping mapping = prepare.findActionMapping(request, response, true);
       //ActionMapping{name='reg_student', namespace='/', method='null', 


extension='action', params=null, result=null}
                if (mapping == null) {
                    boolean handled = execute.executeStaticResourceRequest(request, 


response);
                    if (!handled) {
                        chain.doFilter(request, response);
                    }
                } else {
                    execute.executeAction(request, response, mapping); //执行一个


action
                }
            }
        } finally {
            prepare.cleanupRequest(request); //清除请求
}
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy(action的代理)
   ActionProxy proxy = getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
           namespace, name, method, extraContext, true, false);
   proxy.execute();
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器


(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果


。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者


FreeMarker的模版。
在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 




==================================================================================


2.使用Struts2的好处? 
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技


术构建的系统非常的繁乱,代码冗余严重,
所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便


应运而生。 


1.它是建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一


个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所


带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于


开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;


2.其次,它是个开源项目得到了包括它的发明者Craig R.McClanahan在内的一些程序大师和高


手持续而细心的呵护,并且经受了实战的检验,使其功能越来越强大,体系也日臻完善;


3.是它对其他技术和框架显示出很好的融合性。


基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件


===========================================
3.Struts的validate框架是如何验证的? 

有两种方法:

1.配置XML文件

2.继承ActionSupport并实现validate()方法,



=====================================================================


4.说下Struts的设计模式

参考:http://book.51cto.com/art/201201/311894.htm

MVC模式(Model-View-Controller 模型-视图-控制器) Struts主要担当了控制器的作用

Struts2的内部实现却离不开这些设计模式。有一些核心的设计模式,甚至贯穿了整个Struts2的逻辑主线,成为Struts2内部实现中不可或缺的重要组成部分。

在Struts2中,我们将先后接触到命令(Command)模式、ThreadLocal模式、装饰(Decorator)模式、策略(Strategy)模式、构造(Builder)模式、责任链(Chain Of Responsibility)模式、代理(Proxy)模式等等。这些设计模式的反复使用,使得Struts2的实现本身就充满了最佳实践。




 ===========================================================================
5.Action 的实现通集成常用那种方法? 
1:直接实现自己的Action 
2:另一种是实现Action的接口并重写execute()方法
3:继承ActionSupport

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值