代码规则说明
(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请使用如下方式: