Sruts2学习笔记(二)

来源:互联网 发布:简单时间序列数据例子 编辑:程序博客网 时间:2024/05/16 01:01

Package
    Struts2的package的概念和java中的package概念有点不同。因为其能够继承。java中的包是没有继承的。
    其有4个属性。
    name (required):包的名字
    namespace:路径,就是URL中的路径。关于这个,有一点需要注意的是,如果说这个为空。那么这个package中的所有action,都将按照名字,而不是完整的路径来匹配。举例来说。如果说一个package的namespace为空,且其中的有一个A action,且web中没有这个A action。那么XXX/A.action, /A.action ……都会匹配到A上面。
    extends:继承。一般建议继承Struts-default。
    abstract:是否为抽象。

struts-default package
   这是一个包含有很多基础设施的一个包。在struts2中。intercepter做为一个很重要的组成部分,其的作用类似于一种服务的提供者。而struts-default这个包当中,就包含了一些常用的intercepter。
   比方说负责验证的workflow(可能这不是其唯一的功能),负责传递数据的param,以及负责数据上传的fileUpload。这些都是包含在struts-default中的intercepter-stack里面。
   所以来说,如果继承了struts-default包,免去了很多重新配置intercepter的工作。同时,也说明,在package中,不仅仅只是action那么简单的。还有很多其他东西,组成package,使其能够进行工作。

ActionSupport
   这是一个包含了一个Aciton常用方法和常用参数的类。其实任何一个pojo类都可以成为一个action。前提就是其有一个实现返回string的execute的方法。但是这样会一个问题就是规范,毕竟有时候拼写错误也是相当麻烦的一件事情。
   其实在这里,引入AcitonSupport讲的还是intercepter。这里讲了两个intercepter,一个是workflow,另一个则是param。最主要的还是workflow。通过workflow,可以把验证的逻辑和本来的业务逻辑进行分离。
   引入了intercepter的作用并不是只是简简单单的使得代码更加简洁。而是提供一种“流”的概念。就比说用户验证的整个过程,首先是param把数据放入到aciton上面,其次是workflow进行验证。如果验证不通过。则返回前面一个页面。
   标准的validate返回值是void,就能说明这一点。因为对于struts来说,控制“流”的并不是一个一个aciton,aciton某种意义上只是提供逻辑的一个平台。

Action的作用
   1 ACTIONS ENCAPSULATE THE UNIT OF WORK。
        其实这句话,有点拗口。unit of work,工作的单元。一个工作是一个逻辑块。这里也就定位了,它只是一个工作流上的一个点。它能决定一个工作流的走向,比如下一个调用哪一个action,是否可以通过合理性的验证……但是这些,只是一种反馈。
    
   2,ACTIONS PROVIDE LOCUS FOR DATA TRANSFER:数据分销中心。由于有valuestack存在,所以,action,已经不是简简单单的一个控制器
   
   3:ACTIONS RETURN CONTROL STRING FOR RESULT ROUTING,更好的解释了第一个。他只是返回了control string。

对象装配
     对于习惯了oo的人来说,对象这是一个宝贝一样的存在,而web开发中,输入的input都是一些原始的string类型。转换是一件让人很头痛的事情。
     在struts2中,有两种让对象进行转换的方法。
     Object-backed JavaBeans properties:这种比较简单,我觉得是比较好的方式。打个比方说,user类有两个属性name和password,那么在jsp上的input的name属性分别为use.name和user.password两个就可以了。然后在action类上面,设个user的属性就问题解决。
     ModelDriven actions:让action类实现ModelDriven接口。ModelDriven返回的是一个空的你要装配的Bean类。以上面的例子为例,就是这个bean要有name和password两个属性。有一点不要混淆的就是,装配过程实在action外面完成的。struts通过完成getModel方法,得到一个bean,并把属性装入到其中的属性当中去。
     我觉得前一种方法比较好。

文件上传
[file name from form] File—the uploaded file itself
[file name from form]ContentType String—the content type of the file
[file name from form]FileName String—the name of the uploaded file,
  在action中实现这3个方法就可以了。其中文件是放在file当中。