struts2的部分总结

来源:互联网 发布:python将string转int 编辑:程序博客网 时间:2024/06/15 06:08

1.
  <package name="zoner" extends="struts-default">

                 <action name="register" class="cn.tao.action.RegisterAction">
                                  <result name="success">/register_output.jsp</result>
                                 <result name="input" type="redirect">/inputUseTaglib.jsp</result>
                                <interceptor-ref name="defaultStack"></interceptor-ref>
                 </action>

所有的package都要ectends struts-default包(在struts.xml中能找到定义),struts-default 包是一个抽象包,就是不能有任何的action的定义。<package>的name属性只是一个标示,便于其他的包继承。包属性中namespace指的是命名空间,不加此属性的时候,提交form可以不用写上.action。注册了namespace="/text",那么提交<s:form action="/test/XXAction.action"> 这里的.action就必须要写了。(注意!)namespace是个非常重要的属性。如果在提交的/test/XXAction.action中找不到相应的action的注册就会到上一级的namespase中查找action的注册但是会报出警告。 resault-type有许多中,在struts.xml中可以看到,常用的是chain,转发,重定向,下载流等。

2.
服务器启动时自动加载struts-default.xml,struts.xml,struts-plugin.xml.
strtus结构框架中的默认属性都注册在default.properties文件里,多以手写的形式来覆盖默认属性:
  a.修改默认属性用 <content> 覆盖default.properties的属性。例:
         <constant name="struts.i18n.encoding" value="gbk"></constant>  //字符集
         <constant name="struts.custom.i18n.resources"                  
                                             value="MessageResources">                         //国际化文件
  b.修改默认属性还可以用新建struts.properties的方式重新定义属性内容。例:
          修改action的扩展名 struts.action.extension=do  这样提交到XXaction.do。
 (建议只采用一种覆盖方式,建议后者)。
  c.第三种覆盖默认文件属性的方式就是在web.xml中注册,但是不建议采用。
3.
struts.xml可以模块化,就是建立很多的struts_XX.xml,在struts.xml中在引入进来:<include file="struts_X.xml"></include>每个文件都必须以完整包的形式引入,就是头文件必须和struts.xml一样。一般每个struts_XX.xml都可以负责一个模块。

4.
模型驱动 VS 属性驱动::struts2也可以像struts1一样使用模型驱动,建立一个bean类接收from提交的属性,action要实现ModelDriven<T>接口,有泛型,<T>就是对应bean类,实现getModel方法,返回一个bean实体,同时实现execute方法。推荐使用属性驱动。

5.
防止重复提交:  在form表单中添加<s:token name="testToken"></s:token> 在相应的action中添加struts2提供的拦截器 <interceptor-ref name="token"></interceptor-ref>,这个要手动添加上因为没在默认的包栈中,声明出错跳转页面<result name="invalid.token">/inputUseTaglib.jsp</result>,出错信息是保存在actionerror中的,在国际化文件中修改出错信息:struts.messages.invalid.token=XX。

6.
动态方法调用的第二种方式: 在jsp页面的form中 action="actionname!XXmethed.action" actionname就是在xml中注册的actionname,!后面的XXmethod是写在action中复写的逻辑方法,这样省去了在xml中注册action再写method,实用。第三种方式是用通配符的形式,<action name=*action class= method="{1}">由于容易出错,了解即可。项目大了以后这两中方式在文件可读性上都不好,所以还是原来写method的方式比较受用。

7.
struts2异常处理(概述): action能抛出异常,写好异常类,在strtuts.xml中注册异常类,指明错误异常的返回页面。