`
jiangduxi
  • 浏览: 456460 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts2的开发规范和技巧

阅读更多
基于Struts2的开发,如果没有足够的经验和规范做支撑,并不能带很多的好处.

1).Action类及Action Name的命名规范
   Action类的后缀统一加上"Action",
   Action的Name与类的名称保存一致,但不要"Action"的后缀。
这样是为了通过Action的调用url,很方便的找到Action类。
 <action name="searchUser"
 class="com.demo.search.action.SearchUserAction">
 <result name="search">/domain/search.jsp</result>
</action>


2). 每个项目都必须至少有一个公共的Action类,GenericAction
  公共的Action类完成如下的功能:
  1. 获取、注入request
  2. 获取、注入Session
  3. 错误页面跳转
  4. 获取在线用户和会员的信息(个人信息、权限、角色)
  5. 注入类型转换的格式转换类,如日期类型转换:ConvertUtil.register(new DateConverter(),Date.class);
  6. 获取系统配置信息,如公用变量
  7. 对于request参数的处理等
  8. 其他可扩展的操作

3). 擅长使用Dispatch的模式
    有人说Action,不就是Dispatch的延伸吗,其实还可以做的更好
典型的模式如下:
   1. 页面表单的Hidden参数中,就是一个ID,如queryID="queryUser" Action="/paginate.action"
  2. PaginateAction的模板如下
 
   private String queryID;
     public String execute(){
      //获得Service的接口
      //根据queryID调用分页查询方法
      return queryID; //这一点,就是动态跳转,在Action不明确注明"success"之类的跳转名称。
       }
  


  3. 在Struts.xml中进行配置与queryID向对应:
  <action name="paginate" class="com.gehc.util.pagination.PaginateAction">
    <result name="queryUser">/demo/userList.jsp</result>
    <result name="queryIssue">/pm/issue/allIssue.jsp</result>
</action>

实战代码如下:
   public String execute(){
      if(queryID != null){
          Map params = prepareParams();
          int pageSize = RequestUtil.getCurrentRowsDisplayed(request);
          PageinatedList results = queryDao.queryByPagination(queryID,params,pageSize);
          RequestUtil.initLimit(request,results.getPageSize(),results.size());

    request.setAttribute("records",results);
    forword = StringUtil.isValidStr(forward) ? forward : queryID;
    return forward;
        }else{
        return forwardError("查询ID号不能为空");
        }
     }


4)配置文件的目录结构
[img] http://dl.iteye.com/upload/picture/pic/63829/fdacff3f-dd6c-3966-a54c-493f8853ff91.bmp[/img]

5) 不断的提炼公用的Action,并放在一个package中:
   如上传、下载、异常处理、excel数据录入、过滤、截取器等等

6) 将一个模块中的Action放置在一起


7) 擅于使用redirect来保持request参数。
  使用redirect一样可以将request参数传递到一个页面中,不需要使用session。viewPost?postid=${postid}
  public String execute() throws Exception{
   name = jiangduxi;//给药传递的参数赋值
   return SUCCESS; //默认页面
  //return "redirect_1"; //重定向(不带参数)showInfo.do
  //return "redirect_2"; //重定向(带固定参数xxx)showInfo.do?name=xxx
  //重定向(带动态参数,根据struts.xml的配置将${name}赋值为XXX)最后showInfo.do?name=xxxx
  //return "redirect_3";
  //return "redirect_4";//这个是重定向到一个action
  }

 <action name="login" class="LoginAction">
   <result name="success" type="velocity">/pages/logok.vm</result>
   <result name="redirect_1" type="redirect">showInfo.do</result>
<result name="redirect_2" type="redirect">showInfo.do?name=xxxx</result>
<result name="redirect_3" type="redirect">showInfo.do?name=${name}</result>
   <result name="redirect_4" type="redirect">
     <param name="actionName">showInfo</param>
     <param name="name">${name}</param>
   </result>
 <action>


8) 灵活使用Chain模式,来编写简短而高度重用的Action,把相关的几个action链接起来,共同完成一个功能。
   同一个Chain的多个action间数据的传递非常方便,由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用,上一个Action的成员变量。
 <action name="step1" class="test.Step1Action">
   <result name="success" type="chain"> step2.action</result>
</action>
<action name="step2" class="test.Step2Action">
   <result name="success">finish.jsp</result>
</action>


9) 编写简洁而高度重用的Action的另一个方法,就是将页面的渲染,格式转换的逻辑,抽取出来,自定义成Result。
官方的Result
  1. Chain Result --用于Action Chaining
  2. Dispatcher Result  -- 用于JSP整合
  3. FreeMarker Result -- 用于FreeMarker整合
  4. HttpHeader Result - 用于控制特殊的HTTP行为
  5. JasperReports Result - 用于 JasperReports 整合
  6. Redirect Result - 用于直接跳转到例外的URL
  7. Redirect Action Result - 用于直接跳转到另外的action
  8. Stream Result - 用于向浏览器返回一个InputStream (一般用于文件下载)
  9. Velocity Result - 用于 Velocity 整合
  10. XSL Result - 用于 XML/XSLT 整合
  11. PlainText Result - 用于显示某个页面的原始的文本 (例如 jsp, html 等)
  12. Json Result
  13. JFreechart Result
10) 明确Action类不要超长,如不要超过500行代码。
分享到:
评论

相关推荐

    struts2jar包和阿里巴巴开发手册

    例如,在使用Struts2进行开发时,可以按照手册的建议编写清晰的Action和Interceptor,确保异常处理得当,同时利用手册的性能优化技巧,优化Struts2框架的使用,降低系统开销。 在实际项目中,通过阅读《阿里Java...

    struts2 经典案例。运行调试通过,代码规范全解析。

    综上所述,Struts2案例不仅涵盖了框架的基本使用,还强调了代码规范和调试技巧,通过学习和实践,你可以更好地理解和掌握Struts2在实际项目中的应用。在struts2qs这个压缩包文件中,可能包含了相关的源代码、配置...

    Struts2——教程

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和...通过深入学习和实践Struts2教程,你可以更好地掌握web应用程序的开发技巧,提升项目开发效率。

    Struts2.3.4 API帮助文档chm格式

    通过阅读Struts2.3.4 API文档,开发者可以了解到每个类、接口、方法的详细说明,包括参数类型、返回值、异常和注释,这有助于编写出符合Struts2规范的代码。同时,它还提供了实例和最佳实践,帮助开发者避免常见错误...

    Struts2+Hibernate新闻发布后台管理系统源代码

    Struts2+Hibernate新闻发布后台管理系统源代码是一款基于Java EE技术栈的...开发者可以通过分析和学习源代码,掌握Struts2和Hibernate的整合技巧,以及后台管理系统的设计和实现方法,为自己的项目开发积累宝贵经验。

    struts2中文版参考书

    Struts2的核心设计思想是为了简化Java Web应用程序的开发过程,提高开发效率和代码质量。 - **历史背景**:Struts2项目最初由WebWork项目和Struts1项目合并而成。WebWork是一个更灵活、功能更强大的框架,在2005年...

    Struts2+JPA+Spring整合(PPT)

    在企业级Java开发中,Struts2、JPA(Java Persistence API)和Spring框架的整合是常见的技术栈选择,它们各自扮演着不同的角色,共同构建出强大的MVC(Model-View-Controller)架构应用。Struts2作为表现层框架,...

    JAVAEE源代码以及struts2源代码

    JavaEE源代码与Struts2源代码是JavaWeb开发中的重要组成部分,对于深入理解Web应用程序的构建和运行机制至关重要。JavaEE(Java Platform, Enterprise Edition)是Java平台的一个版本,专为开发和部署企业级应用而...

    轻量级Java+EE企业应用实战——Struts+2+Spring+Hibernate整合开发电子书3.pdf

    《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...

    Struts2页面取值总结

    在Web应用开发中,Struts2框架因其强大的功能和灵活的配置受到广大开发者青睐。本文将深度解析Struts2框架中页面取值的多种方式及核心标签的使用技巧,帮助开发者更高效地进行页面与后台交互。 #### 页面取值的四种...

    struts2 +ajax (全)

    Struts2和Ajax是两种在Web开发中广泛使用的技术,它们各自有着独特的功能,并且能够协同工作以提供更优秀的用户体验。Struts2是一款强大的MVC(Model-View-Controller)框架,它使得Java Web应用程序的开发更为规范...

    最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)

    在IT行业中,S2SH框架整合是Web应用开发中一种常见的技术栈,它结合了Spring、Hibernate和Struts2三个强大的开源框架。本资源提供的"最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)",旨在帮助开发者理解和实践...

    Struts2实战in+MyEclipse.ppt

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被...总的来说,Struts2框架结合MyEclipse,使得Java Web开发变得更加高效和规范。通过掌握Struts2的核心概念和实践技巧,开发者可以快速构建功能完善的Web应用。

    struts2-portlet学习手册

    本篇将基于“Struts2-Portlet学习手册”这一资料深入探讨如何使用Struts2进行Portlet开发,并重点介绍Struts2-Portlet的核心概念、架构设计以及实践案例。 #### 二、Struts2-Portlet概述 **Struts2-Portlet**是...

    深入浅出Struts_2

    Struts2不仅提供了一套完整的解决方案来解决常见的Web开发问题,还通过引入许多新特性增强了开发效率和代码质量。 #### 三、Struts2框架的关键特点 1. **MVC模式**:Struts2遵循MVC设计模式,将应用程序逻辑划分为...

    STRUTS原理、开发及项目实施.rar_java struts_struts_实施

    **Struts开发** 1. **创建Action类**:每个Action类对应一个用户操作,处理特定的业务逻辑。 2. **编写ActionForm**:ActionForm类用于接收和验证用户输入。 3. **配置struts-config.xml**:定义Action、...

Global site tag (gtag.js) - Google Analytics