打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
struts2的开发规范与技巧

struts2的开发规范与技巧
Struts2的前景还是稳健的,使用的人数在不断的增加。参看struts 2依然坚挺 Seam前景不明

但基于Struts2的开发,如果没有足够的经验和规范做支撑,并不能带来还多的好处,如果失控,一样和JSP+servlet泛滥,这一点需要警示。
1).Action类及Action Name的命名规范
  Action类的后缀统一加上"Action",
  Action的Name与类的名称保持一致,但不要"Action"的后缀。
  这样是为了通过Action的调用url, 很方便的找到Action类。
 
1  action name="searchKnowledge"
2   class="com.demo.search.action.SearchKnowledgeAction">
3   result name="search">/demo/search.jspresult>
4  action>
 
  如上,看到/searchKnowledge.action,就可以很清楚的知道类是SearchKnowledgeAction了。很多人不注重这一点,开发调试中,每次都要笨拙的看struts.xml文件。
2).每个项目都必须至少有一个公用的Action类,GenericAction
  完成的功能如下:
  1.获取、注入request
  2.获取、注入Session
  3.错误页面跳转
  4.获取在线用户和会员的信息(个人信息、权限、角色等)
  5.注入类型转换的格式转换类,如日期类型转换:ConvertUtils.register(new DateConverter(), Date.class);
  6.获取系统配置信息,如公用变量(如配置路径等)
  7.对于request参数的处理等
  8.其他可扩展的操作
3).擅长使用Dispatch的模式
  有人说Action,不就是Dispatch的延伸吗,其实还可以做的更好。
  这个典型的模式如下:
  1.页面表单的Hidden参数中,就是一个ID,如queryID="queryKnowledges". Action="/paginate.action"
  2.PaginateAction的模板如下
1private String queryID;
2    public String execute() {
3        //获得Service的接口
4        //根据queryID调用Ibatis分页查询方法
5        return queryID;  //这一点,就是动态跳转,在Action不明确注明"success"之类的跳转名称。
6    }
      3.在struts.xml中进行配置与queryID想对应:
 
 1   action name="paginate"
 2   class="com.gehc.util.pagination.PaginateAction">
 3   result name="queryKnowledges">
 4    /demo/knowledgeList.jsp
 5   result>
 6  
 7   result name="queryIssue">
 8    /pm/issue/allIssue.jsp
 9   result>
10                       
11    action>

   实战代码如下:
  
4).配置文件的目录结构
 
5).不断的提炼公用的Action,并放在一个package中:
  如上传、下载、异常处理、excel数据录入、过滤器(filter)、截取器(inteceptor)等等
 
6).将一个模块中的Action放置在一起
   
7).擅与使用redirect来保持request参数.
  使用redirect一样可以将request参数传递到下一页面中,不需要使用session.
  viewPost?postid=${postid}
 
public String execute() throws Exception {
     //一些处理……
     name=xiaowang ; //给要传递的参数赋值
     return SUCCESS;     //默认页面
   //return "redirect_1" ; //重定向(不带参数) showInfo.do
   //return "redirect_2" ; //重定向(带固定参数yangzi) showInfo.do?name=yangzi
   //重定向(带动态参数,根据struts.xml的配置将${name}赋值为xiaowang)最后为 showInfo.do?name=xiaowang  
   // return "redirect_3" ;
//return "redirect_4" ; //这个是重定向到 一个action
}
action name="login" class="LoginAction">
   result name="success" type="velocity">/pages/logok.vmresult>
   result name="redirect_1" type="redirect">showInfo.doresult>
   result name="redirect_2" type="redirect">showInfo.do?name=yangziresult>
   result name="redirect_3" type="redirect">showInfo.do?name=${name}result>
   result name="redirect_4" type= "redirect">
              param name="actionName">showInfoparam>
              param name="name">${name}param>
    result>  
action>
8)灵活使用chain模式,来编写简短而高度重用的Action,把相关的几个action连接起来,共同完成一个功能。
      同一个Chain的多个action间数据的传递非常方便,由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用,上一个Action的成员变量。      
1<action name="step1" class="test.Step1Action"> 
2        <result name="success" type="chain">step2.action</result> 
3</action> 

5<action name="step2" class="test.Step2Action"> 
6        <result name="success">finish.jsp</result> 
7</action> 
9) 编写简洁而高度重用的Action的另一个方法,就是将页面的渲染,格式转换的逻辑,抽取出来,自定义成Result。
官方的Result
Chain Result - 用于 Action Chaining
Dispatcher Result - 用于 JSP 整合
FreeMarker Result - 用于 FreeMarker 整合
HttpHeader Result - 用于控制特殊的HTTP行为
JasperReports Result - 用于 JasperReports 整合
Redirect Result - 用于直接跳转到例外的URL
Redirect Action Result - 用于直接跳转到另外的action
Stream Result - 用于向浏览器返回一个InputStream (一般用于文件下载)
Velocity Result - 用于 Velocity 整合
XSL Result - 用于 XML/XSLT 整合
PlainText Result - 用于显示某个页面的原始的文本 (例如 jsp, html 等)
Json Result
JFreechart Result
10) 明确Action类不要超长,如不要超过500行代码。
     很多人为了偷懒,喜欢在一个Action中,不断的添加方法,而不管这些方法与Action的语义是否符合,到底是多个Action,还是多个方法,在开发过程中,还是要注重这些方法是否与创建Action类的目的、语义保持一致。
     最好明确代码的长度,团队人多,手杂,水平不一,为了保证可维护性,这是一个不得已的方法。
本文来源于http://www.blogjava.net/oneeyewolf 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
重定向 redirect
struts2中常用Result类型的用法
使用redirect避免重复提交
struts 2 action type为chain传值
Struts2配置RESULT中TYPE的参数说明
struts2 返回类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服