零距离接触struts

来源:互联网 发布:Windows 登录网络 编辑:程序博客网 时间:2024/04/26 13:26

        Struts今天学习完了,与上个学习项目相比,这个的学习慢了很多,主要还是自己懈怠了。

        Struts是一个很经典的MVC框架。

ActionServlet

        ActionServlet俗称前端控制器,对URL进行截取,由截取到的URL获取到struts-config中配置的以此URL为path的Action。

        ActionServlet还利用BeanUtils对request中的parameter的获取进行了封装成了一个ActionForm,从而使得获取参数这个环节简单了很多。

        此类是有Struts进行的实现,无需修改。

ActionForm

        ActionForm是对页面参数获取进行的封装。此类编写要求:属性要有getter和setter方法,名称一般与表单上name要求一致。

        获取参数用的方法是getElementsByName,所以获取到的是一个数组,所以如果要获取多个(checkbox),那么在ActionForm中用一个数组接收即可。

        如果获取的是上传数据,那么用FormFile参数接收即可,多文件上传在后续博客会进行详细叙述。

        ActionForm的存在,从另一方面减少了开发的工作:转换器。在ActionForm如果设置参数为int类型的,那么会直接将页面参数转成int类型的,这些都归功于转换器。需要注意的是java.util.Date在ActionForm没有转换器,所以如果要用这个类型那么转成字符串或者自定义一个转换器。

Action

        Action就是业务控制器了,主要完成参数的获取,Model的调用,转向这三个功能。

        在参数获取方面,有ActionForm收集表单数据,还可以自己通过request进行获取

        在转向方面,struts提供了ActionForward这个类,可以通过ActionMapping获取,也可以自己手动new一个。

        需要注意的是:Action是单实例的,所以会存在线程安全问题。

ActionForward

        ActionForward封装了转向信息,在配置Action时对forward标签进行配置(非forward属性)。

ActionMapping

        每一条Action的配置信息,都以path为key,值为ActionMapping在Map中进行了存储,在访问时,如果Map中没有以path为key的记录,那么就返回有unknown属性的mapping,如果没有,那么就将此异常交给tomcat来处理。

        关于Action的配置,都在ActionMapping中有所体现,例如type可以用可以用它getType()进行获取,在ActionServlet中也是通过这个方法获取到类名从而实现动态加载然后放到Map中的。

ForwardAction

        这个是一个Action,如果没有特别需要,他等价于Action配置forward属性。

        二者区别:

        在ActionServlet中,processForward方法是用来判断是否设置了forward属性的,如果设置了,那么就会直接返回,Action不会进行实例化。

        而ForwardAction的的转向页面是配置在parameter中的,而type统一配置成org.apache.struts.actions.ForwardAction,此Action会进行实例化。

        如果在Action没有处理,那么上面两种方法都没有区别,但如果需要处理,就要用到后者,新建一个类继承ForwardAction,然后重写execute方法,进行完自己的处理后,然后调用父类execute方法,不需要自己写转向语句,因为在ForwardAction实现的execute方法中,有转向操作。

DispatchAction

        DispatchAction也是一个Action,它的出现是因为之前的写法Action的数量太多了,有些Action可能就是3-4行有效代码,但是就是一个类,对类的维护带来了不便。

        集成DispatchAction的类,不需要重写execute方法,只需要写与execute方法同参数同返回值的一个方法

        在配置DispatchAction时,配置一下parameter这个属性,然后在调用的时候,附带parameter设置的参数值为要调用的方法名(完全一样),那么就会调用到相应的方法上面去了。

其他边缘知识点:

        国际化、异常、模式匹配、标签库等就不做罗列了,我把他们归结为用的时候再详细学习的知识,现在知道就行了。

        本文书写目的旨在在今后再碰到MVC框架时,将新知识点往此框架上靠拢,所以主要是原理上的说明,如果只是实际使用,感觉还是很容易上手的,因为框架的出现带来的是项目开发的简单便捷以及规范。

        有不全,不对之处欢迎交流~~

原创粉丝点击