struts2处理机制探索

初学Struts2,对其工作机制的一点猜测与总结:
首先在不使用struts的情况下,一般采用jsp+servlet+javabean的模式来进行开发
这种开发也可以形成MVC模式,但当servlet的数量比较多的时候,web.xml的配置就会非常的复杂
需要为每一个servlet进行配置操作。
struts的使用简化了servlet的配置操作,只需要在web.xml中加入一个过滤器对用户所输入的路径进行过滤处理
找到合适的Action来响应用户的请求。

 
 其次struts如何通过url来找到合适的Action呢?从struts的配置文件中,可以猜测其处理机制。
一般框架的编写最后都会抽象到一个配置文件中去,这样会使框架的使用和配置变得更加灵活,
Struts也不例外,将配置信息写到struts.xml文件中,然后通过解析器对配置文件进行解析,
获取信息后在利用java的反射机制进行处理操作。
struts配置文件的层级结构和每个标签的主要属性大致如下大致如下:


其中struts可以定义多个package,每个package也可以定以多个action
在每一个package中,action的name属性可以作为该包中action的唯一标识;
而package的namespace属性,我们也可理解为是表示每一个包的标识.
这样通过namespace+actionName就可以定位到每一个Action的配置
而用户所输入的url请求格式就是/namespace/actionName.action

没有看过struts2的源代码,如果单独参照它的配置文件自己实现的话,我会选择用一个HashMap来存储每个Action的信息。
其中的key值就是刚才提到的namespace+actionName;
value值是一个Object,该Object封装了所有有关该Action的信息,
包括该Action的具体实现类(class属性),调用实现类中的哪一个方法(method属性),
执行method方法前的拦截操作(interceptor-ref标签)以及执行后可能跳转的页面集合(result标签)。

这样通过namespace+actionname的key值获取到Action信息的封装对象之后
首先取出其class属性,利用java的反射机制实例化这个Action的具体实现类;
然后将所实例化的对象作为参数传递到<interceptor-ref>所定义的拦截器链中进行指定方法执行前的拦截处理操作
比较常用的拦截操作如:Field赋值(paramatersInteceptor),表单验证(ValidationInterceptor)等等;
其次获取Action封装对象的method属性,如果为空默认为execute方法,利用反射机制执行这个方法。
执行完该方法后会返回一个String字符串,该字符串会作为key值找到合适的返回页面(返回页面的定义是通过Map实现的,key值是<result>的name属性值),
最后通过request.dispatcher的形式跳转到指定页面完成一次请求-响应操作。

欢迎大虾们给与指正,骂人的闪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值