我的第一个完整的JavaWeb项目——情侣日志网站。现已部署上线,请移步 www.ygj0930.com 体验。 这个情侣日志网站的灵感主要是“一张照片一个故事”这个主题,网站提供了情侣们分享ta们的情感事件的功能,每篇日志可以搭配图片进行叙事。
CoupleSpace1.0: 项目使用了三层架构——视图层、控制层、业务层,使用了vo、dto封装类实现各层架构之间数据传递。 登录与注册时的验证码使用了自己写的算术验证码图片生成类。 日志部分用了Ueditor插件实现内容输入,图片上传用了自己写的文件上传处理类。 日志列表部分用了数据库分页查询来实现列表的分页显示. 分页查询部分用了一个中间表来记录日志总数,优化了分页查询,原理见我的博文http://www.cnblogs.com/ygj0930/p/6138288.html
CoupleSpace2.0: 增加了监听器和过滤器: 用监听器实现了在线人数统计,监听session的建立和销毁来统计在线人数。原理见我的博文:http://www.cnblogs.com/ygj0930/p/6374384.html 用过滤器实现统一编码格式设置以及登录权限限制,通过检测session中的userid属性判断用户是否登录,没有登录的用户不能访问日志列表等资源,自动跳转到登录页面。原理见我的博文:http://www.cnblogs.com/ygj0930/p/6374212.html
CoupleSpace3.0: 2.0中设置了两种数据封装类vo、dto,但其实这两种都是用作数据封装的类对象,没必要分得太细,所以在3.0中我把他们整合到了一起,统一叫做BO。 然后,把项目中需要随着项目部署而作出改变的一些信息(比如数据库驱动、数据库url、数据库用户名、密码、编码格式、上传文件的保存目录和缓存目录等等)提取了出来放到配置文件中来管理,简化了项目代码并且方便改动,“牵一发而动全身”。 应用了log4j插件对异常进行管理,把项目运行过程中的异常写到日志文件中方便维护。 继承RuntimeException实现了自定义的异常类,把项目的运行时异常抛出到control层处理,在control层定义了一个过滤器对项目的所有异常进行捕捉处理,进行友好的用户提示并且控制跳转到正常的页面, 从而维持项目的正常运行(跳过了异常操作)。
CoupleSpace4.0: 对项目的数据库操作部分进行了优化: 应用了C3P0连接池插件优化了数据库连接,使得项目更加适应高并发访问的情况,同时也进一步简化了代码。 使用了PreparedStatement预处理语句进行数据库操作,有效防止sql注入式攻击。
CoupleSpace5.0: 在4.0的项目中虽然用配置文件和连接池等减少了很多重复代码,但是在通过对象调用Service层和DAO层的方法的时候还是重复创建了很多匿名对象,并且这些对象只用了一次。 对于这种重复使用并且仅仅提供方法调用入口的对象,我选择了用单例模式去优化。 在做的时候我也归纳了几种关于单例模式的实现方式,见博文:http://www.cnblogs.com/ygj0930/p/6413270.html
CoupleSpace6.0: 5.0以前的都是使用传统的JavaWeb开发知识逐步搭建的。从6.0开始,就要进入企业级开发框架的使用阶段进行开发。 6.0使用Maven管理依赖包,并整合了Spring与Hibernate。在持久层使用Hibernate取代了繁琐的SQL语句以及事务管理语句。 并且把DAO、Service层的对象交给Spring管理,优化了重复创建对象的问题,并且使用了基于AspectJ的声明式事务管理。 在本次整合过程中,碰到了许多问题: 首先就是Spring与Hibernate的jar包冲突问题,一般是由于这俩个框架中使用到某个类时版本不匹配造成。 然后就是,Maven项目会修改项目编译时的输出路径到target文件夹,但是我们用Myelipse一键部署项目时是从WebRoot/WEB-INF/classes目录下提取编译后文件的。 此时就会造成Myeclipse中修改的代码没有同步到Tomcat的问题, 解决办法是:右键项目——properties——Java Build path选项卡下面的Default output folder——修改为 项目名/WebRoot/WEB-INF/classes。