Struts2的基本工作流程认识

    前边对Struts2有了一些了解,为了进一步理解,对其工作流程进行分析。

    一、从无到有的过程

        在不用Struts框架之前我们需求的功能也是可以实现的,下面就从最初当我们不用框架的基本功能实现方法过度到使用框架,同时体会框架的强大之处。

        1、  需求:实现如下链接访问:/mytest/addAction.action、/mytest/deleteAction.action、/helloworld/helloworldaction.action。在逻辑部分实现类名输出。

        2、  基本实现

首先需要为每个请求创建一个类,在对应的类中调用execute方法实现逻辑功能。同时定义一个Filter,根据路径判断创建哪个对象并调用其方法。

        3、  增强扩展性

为了代码的通用性和复用性,在这里定义一个接口:Action,在接口中定义execute方法,然后让别的Action实现该接口。在Filter中就不再直接new对象,而是通过反射获取对象,同时将需要反射创建的对象和对应的请求以键值对的形式放到Map中

        4、  增加配置文件

经过上边几步之后,代码中还是有些问题,代码中所有的有关请求的字符串都是写死的,这样扩展性就是一个很大的问题,由于配置文件是不用的编译的,因此可以考虑将变动的请求链接都配置到配置文件中。为了让转向页面也是可配置的,可以让execute方法返回一个字符串,用来指定转向页面。在代码运行时解析配置文件,

    二、过程分析

        此时代码执行过程为:首先tomcat启动→加载web.xml文件→加载过滤器→加载并解析配置文件。这样在需要一个新的请求时只需要增加配置文件信息,Action类和转向的JSP页面即可。

    三、Struts2框架实现及流程

        Struts2框架的实现过程大致就是上边的过程,但是struts2的框架将更多的功能实现都封装了起来,例如;数据封装、类型转化、国际化等。下面对其执行流程进行分析:

        1、  web客户端发送请求信息

        2、  到达Tomcat,创建HttpServletRequest和HttpServletResponse对象,被struts2的过滤器StrutsPrepareAndExecuteFilter拦截。

        3、  通过ActionMapping对象判断是否为Action请求。如果不是,直接转向JSP页面。(下面为Action请求)

        4、  依次调用从ExcuteOperations到Dispatcher调用到DefaultActionProxyFactory,创建一个代理类StrutsActionProxy。

        5、  创建ActionInvocation,然后相关Action和拦截器都会放到ActionInvocation中。

        6、  依次执行拦截器。

        7、  调用到Action方法,返回需要转向的字符串。

        8、  通过返回的字符串,创建Result对象,并转向对应JSP页面

        9、  拦截器依次出栈,返回结果在JSP页面渲染。

    四、体会

        Struts2中18个拦截器的设计思想很有借鉴意义,如果不将这些功能分开来,就会导致整个拦截器过于庞大,而且不便于控制和切换,Struts2的拦截器通过配置文件,设计成了一个可以配置的一个功能,如果不需要就可以将其去掉,而且还可以自己定义和添加,从而显的十分灵活。这是我们设计软件需要追求的一种好的效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值