近来整理三年前有关Java SSH(Struts+Spring+Hibernate)的后台开发工作。
【当年也是写Java比C++多的,现在已经转成C++方向了】。
2012年8月本人有幸和五人西瓜子小团队在无锡的全国大学生软件服务外包创新创业大赛获得小奖。
项目名为“逍遥游”自助旅游系统 是一套基于Android用户的景区智能导游、智慧导航、自助旅游系统。搭建景区服务器收集游客位置等信息方便景区管理。
以该项目为例,简单介绍SSH的后台开发。后台开发代码见https://github.com/fanxiang090909/Carefree-Tour-Guide
一。概述
小型Java EE服务器框架一般分为四层。
1 ) 数据库表实体对象层
2 ) 数据访问接口层(Hibernate接口)
3 ) 逻辑业务代码层(完全自定义,为把业务逻辑抽象出来,增加代码复用)
4 ) http响应处理层(servlet或struts2)
当然某些十分简单的处理也可比必要抽象出业务逻辑代码,只需在servlet或struts2中完成全部功能即可。
后台的处理全部是由servlet或struts2的action处理。没有在servlet用到自定义过滤器以及重定向等等东西,也没有在action中用到拦截器(文件上传下载除外)
比如在url为/xxxxx/login.do中调用LoginServlet来处理LoginServlet中需要调用验证用户名密码的业务逻辑类ValidateLogin中的方法,则需要私有属性,这里把它定义为静态,节省空间
/**
* 验证用户登陆服务属性,在service,业务逻辑层定义
*/
private static ValidateLoginvalidateLogin;
/**
* 构造方法
*/
public LoginServlet() {
super();
LoginServlet.validateLogin = newValidateLogin();
}
ValidateLogin逻辑业务类中有如下方法验证用户是否注册,其中tourDao是数据访问接口层。
在业务逻辑层尽量把所有的下层异常处理干净,返回给servlet或action的只是业务处理后的结果,成功或失败
/**
* 验证登陆
*@param username 用户名
*@param passwd 密码
*@return 0 成功, 1没有这个用户名, 2密码错误
*/
public int hasRegistered(String username,String passwd) {
Tourist currentTourist = tourDao.findByTouristId(username);
/* 如果不为空,继续验证密码 */
if (currentTourist != null) {
if(passwd.equals(currentTourist.getPasswd()))
return0;
&n