struts2学习笔记 转载

package详解 1.1. action A)name action的名称,是外界反问的唯一性标识 B)class action所对应的类 C)method 在一个action中可能有很多个方法,那么我们就可以结合这个属性去访问 一个action中不同的方法体。 如:在LoginAction中有两个方法体,分别是login和checkValid,如何访问呢? 你会发现这两个action的配置加载了同一个类com.sun.demo.LoginAction,不同的是属性name和属性method的区别,在访问的时候,根据name去访问到对应的类文件,然后再根据对应的method去访问相应的方法体。 DMI【动态调用action的不同方法】: 我们不再根据method属性来访问不同的方法了,而是在前台View页面进行设置: VIEW: 登录 验证 用感叹号【!】来做标识,依次向下执行,前面为action名称,后面是方法名。 以上method和DMI的区别在于前者每个方法可以返回不同的结果,且在每个方法中可以使用不同的拦截器,而后者最终的结果都是一样的,它们使用的拦截器也是一样的,具体使用那种方式进行设置依据开发的实际需要进行选择。 在这里有必要提醒一下: 在设置action属性method时,其多对用的Action类中的方法名可以为“do方法名”,如: 在com.sun.demo.LoginAction类中对应的方法可以写成这样doLogin 通配符映射: * 代表0-N个字符,但是不包括"/" ** 代表0-N个字符,包括"/" \ 转义字符 在一个包中可能存在多个action,如: 仔细观察就会发现,这些action的名称有些相同的特征,我们可以通过通配符来处理。 当我们访问addNote时,add字段就会填补*通配符,同时依据占位符的顺序去查询对应的方法。 对于以上这种action名称的设定,我们一般是在指明对与什么表进行操作的情况下,但是当有多个表时,我们的操作就显得有点麻烦了,现在我们又有了新的设定,如下: 也就是设定多个通配符,同时采用占位符遍历的方式去访问各个action中的方法。{0}表示**的整体信息 注意:在用占位符去匹配某个Action的时候,得注意首字母的大小写 通配符的变种: 默认action : ........ *号可以匹配任何的字符串,所以以上的两个默认的Action会不会发生错误呢?【不会】 总结: 当action的name属性中没有任何通配符时,其优先级最高。 只要有通配符,不论是什么通配符,一律按顺序向下执行。 我们一般依照没有通配符,有通配符,没有匹配的顺序进行编写。 D)Converter 1.2. default-action-ref "Login"是一个action的引用,在访问action的时候,如果action不存在,那么就会访问默认的action。但是这个必须放在所有action的最前面,另外值得关注的是,这样的默认处理只是对于action的访问就行了设置,对于访问不存在的页面是无法进行处理的,这就需要在web.xml 中就行设置了。 404/error.jsp 不过这样的设置有时候会出问题,不是总是正确的,这个得参考一下浏览器的高级设置 1.3. default-class-ref 当访问不到指定的action类时,就会调用这个默认的action类进行处理。 1.4. default-interceptor-ref 当访问不到指定的interceptor类时,就会调用这个默认的interceptor进行处理。 1.5. global-exception-mappings 设置全局异常转向,可以被直接访问。 1.6. global-results 设置全局处理结果转向,可以在action类中进行直接的转向。 1.7. Interceptors拦截器 在struts2中,许多人都action都有一个共同需要关心的问题,比如对页面的输入进行验证,对上传的文件进行预处理,防止重复提交,在页面显示前进行下拉列表的初始化,“拦截器”使得其变得相应容易些。 拦截器在action被调用前后都会被调用去执行一些code,struts2框架的大部分功能均是通过拦截器来实现的,如防止重复提交,类型转换,对象封装,校验,文件上传,页面预装载等,每个拦截器都是独立装载的,我们可以根据需要为每一个action配置其所需要的拦截器,例如:一个action需要来进行类型转换和文件上传,那么我们就可以为其设置两个拦截器。 测试一下: 找到xwork.jar包下的com.opensymphony.xwork2.interceptor包下的TimerInterceptor.class. 怎么配置拦截器: 在某个包下编写如下代码: 在该包下的任何一个action中,若想要使用该拦截器,那么只要在action中添加如下代码: 然后再去运行项目文件,我们发现报错了,为什么呢???? 在这里要特别的提醒一下: 我们之前的项目中,package继承了struts-default,这其中实现了各种拦截器,是系统默认创建的,在我们自己不去手动配置拦截器时,系统会默认的调用struts-default中的拦截器,而当我们自己手动配置了拦截器后,系统就不再去调用默认的那些配置了,在上面的例子中,我们的拦截器是配置在一个页面提交的action中的,所以还需要一个参数拦截器,可是我们没有配置所以报错了,而在自己不手动配置拦截器的情况下,在struts-default中这些必须的拦截器配置都是有的,懂了吧。但是我们在配置的时候倒是不妨多参考一下其中的各种信息。 再配置一个拦截器: 在需要传递参数的action中引用该拦截器: 当然了,我们也可以在action中引用默认的拦截器: 别的包,子包也可以继承父包,那么在父包中定义的拦截器在子包中也可以使用。 当某些action共同使用多个相同的拦截器时,可以将这些重复使用的拦截器放在一个拦截器栈中: ........... 1.8. result-types

转载于:https://www.cnblogs.com/lxJack/archive/2011/01/09/1931448.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值