代码规则说明

(1): 包名全部小写,根包名公司域名的反写(不要www)如augmentum的域名为www.augmentum.com那么根包名应该为:com.augmentum.oes(项目名) 其它包统一放在com.augmentum.oes下, 如果有公司统一使用的公共类,一般的包名为com.augmentum.common,无须放到com.augmentum.oes下.
(2): 在根包下建议一个Constants.java类,所有定义常量全部大写,两个单词之间使用下划线(),形如
public static final int PAGE_SIZE = 10;
(3): 在Eclipse中,请使用JDK配置"JRE System Library",而不应该使用JRE, 这样你就可以查到jdk的源程序.
(4): jsp请放到/WEB-INF/jsp文件夹下
(5): jsp命名请全部使用小写,多个单词之间请使用下划线(
)分开,形如edit_question.jsp, 也可以是question_edit.jsp,但两种方式不要混用,要统一,如果是大型项目,可以在jsp下再建一个question目录,下面再放
edit.jsp, list.jsp等
(6): 所有静态资源(css/js/image),放到WebContent(web项目的根目录上)的static目录下,并建议如下目录结构
static
css
images
js
对只在css中使用到的image(如背景图片), 应该在css 目录下再建一个images目录,把图片放在些目录下.
(7): 在JDBC操作中(没有使用ORM Tool)时,所有SQLException转为RuntimeException进行抛出(请自行建立一个如DBException的类)
(8): 在jsp + servlet + jdbc(javaBean)的结构中要分成如下4层
dao + service + servlet + jsp
并在根包下建立如下包
dao, service, model, servlet, util
(9): dao 方法中只能使用get/create/update/delete/find开头的方法名,其中get用在只返回一条记录,也就是返回值是一个model对象,find用来返回一个List
(10): dao下要建立接口,接口直接放在dao中,命名形如: QuestionDao.java, 实现类在dao下建立一个impl包,实现类名形如: QuestionDaoImpl.java
(11): service下要建立接口,接口直接放在service中,命名形如: QuestionService.java, 实现类在service下建立一个impl包,实现类名形如: QuestionServiceImpl.java
(12): dao中create方法的返回值为自动生成主键,对delete方法可以返回删除条数或者void, 对update可以返回更新的条数或者void,但是要对所有的delete和update方法返回值统一
(13): 数据合法性验证统一在service中做, 并使用异常形式throw出去.
(14): 数据库(mysql)中命名统一使用小写,多个单词之间使用下划线(_)进行分开,如english_name.
(15): get请求过来,统一使用forward转入到jsp, post请求过来如果操作成功,统一使用redirect跳入到相应的URL,如果操作失败,使用forawrd转入相应的jsp(没有特别需求).
(16): 对insert数据到数据时,如果数据字段有明显的初始值,并且用户在界面上不能进行输入,请使用数据库中的初始值,如is_deleted,而不应该在insert的sql中加入此字段.
(17): JDBC进行数据查询统一使用PreparedStatement, 而不应该使用Statement,以避免sql注入.
(18): 数据库密码不能存储明文,而应该使用md5进行加密码处理.
(19): 数据库中时间,统一使用数据库时间,而不应该使用应用程序时间.
(20): 在jsp中对<,>等符号要进行转义输出,防止跨站脚本攻击.
(21): Spring Controller中对实体的增删改查使用如下方法
create 新增记录入口url, get请求
edit/{id} 修改记录入口url get请求
list 列表页入口url(以?形式带参数) get请求
save 保存数据url post请求
(22): 在jsp中路经,如static/css/style.css,请使用如下形式<%=request.getContextPath()%>/static/css/style.css, js、images同理,但是最好使用{从配置文件中得到的静态文件的URL}/static/css/style.css, 最好使用自定义静态文件服务URL
(23): 修改实体和新增实体的jsp可以使用同一个,如edit_question.jsp,除非存在大量的逻辑不一样的情况可以把他们分开,如create_question.jsp,edit_question.jsp.
(24): Spring 中的controller请继承一个抽像类BaseController, 此类一开始可以没有代码,方便以后把共用代码抽取.
(25): js验证和后台java代码的数据验证都要实现,并且验证规则要保持一致.
(26): 数据验证不能对数据一个一个错误提示用户,而要一次性提示用户他的输入有那些是错的.
如用户输入6个字段,错了三个,应该是提示用户错了三个和原因,而不应该提示一个给他.
(27): 在spring中dao,service中不要使用注解方式,使用xml文件的配置形式,controller请使用注解方式(只对此次培训有效).
(28): 在spring中dao,service中xml的配置中,id请使用小驼峰, 并且使用实现类的接口类的类名并把第一个字母小写.
如:
(29): 实体model可以只有一个无参的构造方法,在使用时请使用setXxx
(30): 系统中文乱码解决, Tomcat 的server.xml 配置 UTF-8, 数据库/字段编码 UTF-8, JDBC 建立数据库链接的时候编码设定UTF-8, JSP页面UTF-8, Filter request 设置编码方式为UTF-8.
(31): 字符串是否相等时,用equals(eg. "zack".equals(userName); ), 不要使用==
(32): 数据库业务数据不要使用物理删除,请使用逻辑删除,删除之请要请用户确认是否真的要删除.
(33): 必须一个SpringUtil,并把此类配置到spring中的xml文件中:

public class SpringUtil implements ApplicationContextAware {

private static ApplicationContext applicationContext = null;

@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
    applicationContext = context;

}

public static ApplicationContext getApplicationContext(){
    return applicationContext;
}

@SuppressWarnings("unchecked")
public static <T> T getBean(String beanId){
    ApplicationContext applicationContext = getApplicationContext();
    return (T)applicationContext.getBean(beanId);
}

}

SpringUtil供在没有被spring容器管理但是需要使用spring容器管理的类中使用.
(34): SQL中对关键字统一使用大写,如SELECT * FROM user WHERE id = 1, 包括数据库中的函数.
(35): spring controller中参数中尽量不要使用HttpServletRequest等容器相关的对象.
(36): spring mvc controller的配置文件不要重复加载.
(37): 方法参数如果超过4个参数,请尽量再思考一下,是否还有其它方式
(38): 增加StringUtil类,实现isEmpty方法,用户判断一个字符串是否为null或者""
(39): 后台的数据验证要通过异常方式返回给调用者.
(40): spring controller中对类的注解请使用实体名,如:
@Controller
@RequestMapping("/user")
public class UserController {
(41): 要实现公用的分页类,名叫Pagination.java,把分页相关的逻辑写入其中
(42): 实现一个Filter,用来实现设置request中编码为utf-8
(43): jsp中 请使用,如果在HTML后面有内容,请移除掉.
(43): form表单提交时,action请使用如下方式:


(44): 在HTML中,请尽量不要出现内联的css.
(45): 列表页默认排序应该是最新修改数据排在最前面,除非业务是有特别的要求.
(46): model不能以bean的形式定义到spring的配置文件(如:applicationContext.xml)中,而应该使用new直接生成
(47): 布局要使用DIV,不能使用table,也不能使用frame页,和object标签进行布局
(48): jsp页面应该使用分块技术实现,可以参考:http://www.zhengmenbb.com/archives/316.htm
(49): 在吃掉异常的地方,一定要使用log4j进行异常信息的输出(输出到log文件中)
(50): session中如果存储user对象,请先清除用户的密码
(51): 单例类中不能出现带有状态的数据, 如在servlet, filter, dao, service, spring中的controller
(52): 对代码中在eclipse中出现的行号那个地方有黄色警告的标示的代码,请仔细检查原因,不要轻易使用@SuppressWarnings标解.
(53): 查询点击后,search的字段要保留在搜索框中.
(54): 同样代码copy 2次以上,需要考虑抽取.
(55): java中的Date,一律使用java.util.Date
(56): js中不要使用如下代码
if (userName == null || userName == "") {
}
而应该使用
if (!username) {
}
(57): JDBC中Dao的实现,sql的执行请使用模板方法
(58): 在Eclipse中,请把行号和空格号显示出来(只对此次培训有效).
(58): java代码中Tab键换成4个空格.
(59):=, ==, +, -, *, /, && 前后有一个空格.
(60): ,号后面有一个空格, 前面没有空格.
(61): if, for, while, else if, try, catch 中代码如果只有一行代码,也必须使用{}.
(62): {与代码处在同一行,前且前面有一个空格.
(63): }与代码处在同一行, 并且后面有一个空格.
(64): 所有外部资源(数据库联接,文件流,Socket联接)都必须在finally中进行关闭.
(65): JUnit测试,每一个分支(如if, 异常等)应该都有独立的方法进行测试,但是对同一类if分支,比如数据验证,可以只使用一个测试方法
(66): 每个JUnit测试应该保持独立(准备数据,测试,删除数据).
(67) 前端页面不准使用iframe/frameset/object内嵌页面(只对此次培训有效).
(68) 不准使用table作为布局容器.
(69): css的引入要放在标签中,js的引入要放在之前.
(70): 打log时,如果知道用户名,请向 log日志中输出用户名
(71): 一个表一个model类,如question, user, user_role表的model类为Question, User, UserRole,里面字段与数据表字段一致,如user_name变成userName.
(72):一个表一个dao, 如如question, user, user_role表的dao类为QuestionDao, UserDao, UserRoleDao.
(73):dao中方法省去掉model名字,如createQuestion应该命名为create,getUserByUserName命名成getByUserName.
(74):service一般指真正实体,如user, question会有service, 应中间表user_role不会出现service.
(75):service方法名尽量使用业务名称,如登陆(login),注册(register), 只有在找不到合适的名称时,才与dao方法名一致
(75):Servlet有两种写法
1:为每一个动作定义一个Servlet, 如SaveQuestionServlet, EditQuestionServlet, ListQuestionServlet,CreateQuestionServlet等
2:以实体为标准定义Servlet, 如QuestionServlet, 然后在get/post方法中根据request中参数(可以命名为action)的值写if/elseif代码段
(76): 如果是长字符联接,请不要使用+, 应该使用StringBuffer, StringBuilder, 方法中的变量使用StringBuilder, 对象中变量使用StringBuffer
(77): 变量命名如果是类或者是接口,只须把类名或者接口名第一个字母大小改为小字就可以了, 如UserService userService, User user. 不要使用userServiceImpl
(78): 可以为每一个主实体建立一个Service类,关联表,如role_user, 不需要.
(79): 验证种分,1:数据合法性验证,2:业务验证, 前面一种无须查数据库,如果要查数据进行的都是第二种
(80): util包下的类里的方法都要使用static, 类定义上最好加上final, 不允许继承
(81): 一个url,最好支持post就是post, get就是get, 无须post,get都要支持
(82): 配置spring中,如果使用 classpath:xxxxx, 不能在xxxxx前面加空格,如 classpath: xxxxx

posted @ 2022-09-16 17:33  邻座的怪同学  阅读(51)  评论(0编辑  收藏  举报