《Struts应用编码规范》由会员分享,可在线阅读,更多相关《Struts应用编码规范(9页珍藏版)》请在金锄头文库上搜索。
1、Struts应用编码规范北京宽连十方数字技术有限公司研发中心一部目录1.清晰的MVC结构31.1.模型31.2.视图31.3.控制31.4.在FormBean使用模型层的数据对象31.5.MVC举例42.模块化,良好的目录与包结构63.命名规范83.1.JSP文件的命名与存放83.2.Action的命名与存放83.2.1.Action的命名83.2.2.Action的存放83.3.JSP访问路径与Action的访问路径84.公用组件/方法的使用94.1.分页94.2.操作结果提示91. 清晰的MVC结构M模型,V视图,C控制,我们需要使我们的代码结构固定,逻辑清晰。要达到这个目的就必需做到这三
2、个部分分工明确,各司其职。1.1. 模型模型层负责业务逻辑的实现,包括业务逻辑处理类及数据对象类等。在我们这里业务逻辑处理的功能写在DAO类,主要功能是与数据库打交道,处理业务逻辑。例如一个公告管理模块的公告查看页面,需要从数据库中列出所有的公告,这就需要一个DAO类来得到这个列表,我们可以将这个DAO命名为com.cplatform.projectname.board.dao.BoardDAO,该类有一个方法,可以返回公告列表:BoardDAO#getBoardList()1.2. 视图这里视图就是指的JSP文件,负责展示从DAO类中取得的数据,一般来说禁止在JSP页面内实现业务逻辑,禁止在
3、JSP页面上获取数据库连接、Hibernate Session等对象。1.3. 控制控制器是指Action,Action负责处理请求,封装请求的数据,并将这些数据传递给DAO类,再接受DAO的操作结果,最后返回到JSP页面,使用JSP页面将这些数据显示出来。控制器是指Action最好继承自DispatchAction, 将对同一管理对象的相关方法写在一个Action中,减少Action类的数量。1.4. 在FormBean使用模型层的数据对象尽量少写FormBean Java类,而将FormBean以DynaActionForm配置在struts-config文件中。对于FormBean的属性
4、,如果模型层已经有数据对象可用的情况下,使用模型层的数据对象作为FormBean属性,以减少配置及编程的工作量。如开发用户信息管理功能,模型层已有用户信息的数据对象(com.cplatform.coperator.hibernate.po.TSysUser), 则可在struts-config中进行如下配置:而在jsp页面中可通过如下方式存取user属性对象中的属性:1.5. MVC举例例如我们要实现公告列表的功能,我们需要1个JSP文件,1个Action类,1个DAO类,1个公告的Hibernate持久类。/board/boardList.jsp在BoardAction中定义一个方法:pub
5、lic ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) request.setAttribute( Page, new BoardDao () .getList(RequestUtil.getInt(request, curPage, 1) ); return mapping.findForward(list);在BoardDAO内定义方法getList(int curPage),根据当前页码返回公告的列表。p
6、ublic Page getList(int curPage) DetachedCriteria cri = DetachedCriteria.forClass(Board.class); return PageFactory.getPage(cri, curPage);Page对象是对结果集的一个封装,包含了结果集和当前页码的信息。在JSP中我们需要用标签对这个结果集进行显示。 $i $board.name 或者不使用标签库,直接使用Java语言进行显示。%Page page = (Page) request.getAttribute(“Page”);for (int i=0;i 如果逻辑不
7、繁杂建议使用标签库显示,如果逻辑很繁杂就直接使用Java来写,不必用标签库来实现复杂的显示逻辑,这样会适得其反。总之,在DAO内只负责取数据,JSP页面只负责展示数据,Action只负责接受请求,调用DAO实现逻辑处理,再返回到JSP。三个功能相互关联,但各司其职。在编写代码的时候一定要注意不要混淆MVC各自的功能。2. 模块化,良好的目录与包结构一个项目可以根据功能划分为若干模块,比如“陕西平台运营商管理”可以按照功能分成以下几个模块:公告管理、系统管理、组织管理等等。图1.1每个模块都规定了相应的英文名称,要么是功能名称的英文名,要么是汉语拼音。如果您要编写一个功能但并不知道该功能属于哪一
8、个模块,或者知道属于什么模块,但模块的英文名称还没有确定,那么一定要向项目经理或组长确定这个问题,不允许凭个人的主张划分功能模块的归属或擅自为模块起名。配置文件需要按照模块的分类,在WEB-INF下创建各自的目录,同一个模块的配置文件放在同一个目录下,配置文件可能包括一个Action的定义文件和一个输入参数验证的配置文件。不允许将不同模块的Action定义写到同一个配置文件中,也不允许把同一个模块的功能写成两个配置文件。在web.xml中加载Struts配置文件需要使用模块化加载方法,除了共用模块处,不允许把其它的功能模块配置到根模块下,如下面的代码所示。 action org.apache.
9、struts.action.ActionServlet config /WEB-INF/struts-config.xml config/board /WEB-INF/board/struts-config.xml config/sys /WEB-INF/sys/struts-config.xml 2不允许象下面这样配置: action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml, /WEB-INF/struts-config-board.xml, /WEB-INF/struts-config
10、-sys.xml 23. 命名规范3.1. JSP文件的命名与存放假设图1.1中的公告管理的模块名为“board”,数据分析的模块名叫“analysis”。公告管理下有两个子功能,发布公告和查看公告,则需要创建目录board,然后在board目录下创建两个文件boardAdd.jsp与boardView.jsp,分别用来实现发布公告和查看公告。请注意这里的模块名与目录名一致,文件名为“功能名+动作”,第二个单词和以后的单词首字母需要大写。数据分析模块功能比较复杂,需要建立若干子目录,如报表管理(report),营销活动查询(query)等,每功能对应的JSP文件都存放在各自的目录中。3.2. Action的命名与存放对于公告管理这个相对简单的功能需要一个继承DispatchAction或MappingDispatchAction的Action就可以解决,目的就是为了减少Action类的个数,一般来说一个完整功能,包括列表、添加、修改和删除只需要一个Action类,尽量少在编写新的独立并且功能单一的Action类。3.2.1. Action的命名Action的命名分为两个部分,类的命名和路径的命名,类名一般采用“模块名