廖雪峰历时3个月打磨出价值1980的数据分析教程,终终终于免费啦!

文章目录
  1. 1. 我的项目—博客
    1. 1.1. 数据库
    2. 1.2. 持久层+控制层
    3. 1.3. 前台
      1. 1.3.1. DWR
      2. 1.3.2. Bootstrap
    4. 1.4. 项目中遇到的困难

我的项目—博客

数据库

  • 总共建了6个表
  • blog表:存放博客的各种内容
    biduse_uidtextsmaincontentviewedreleasedatecommentcountstitleauthortid
    主键user表的外建博客内容摘要访问量发表日期评论次数标题作者btypes表的外建
  • btypes表:博客的类型表
    tidname
    主键类型名
  • comments表:评论表
    pidbiduidptextpdatereplyreplydate
    主键blog表的外建用户表的外建评论内容评论日期回复回复日期
  • resource表:资源表,存放可以下载的所有资源信息
    ridrnameuploaderuploaddatertid
    主键资源名上传者上传日期resourcetype表的外建
  • resourcetype表:资源类型
    rtidrtname
    主键资源类型名
  • user表:用户表
    uidnamepasswordauthor
    主键用户名密码真实名

持久层+控制层

  • 所用技术:hibernate连接数据库
  1. boke.dao和boke.dao.impl是一类,boke.dao提供操作数据库的借口,boke.dao.impl实现boke.dao中的借口,即具体如何操作数据库。
  2. Boke.dao.service和boke.service.impl是一类,跟boke.dao和boke.dao.impl的关系差不多,Boke.dao.service提供接口,boke.service.impl实现借口,不同的是boke.service.impl中的函数是给前台调用,而boke.dao.impl中的函数是给boke.service.impl调用。
  3. Boke.service.util包中只有一个类ManagerTemplate.java,它里面包含了boke.dao中所有类的声明和提取器,它的作用是service和dao的桥梁,boke.service.impl中的类继承了ManagerTemplate类,boke.service.impl通过ManagerTemplate调用boke.dao.impl为前台提供服务。

前台

DWR

  • DWR介绍:是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
  • DWR使用:
    1. dwr.xml的配置文件
<dwr>
 <allow>
 <create creator="new" javascript="testClass" >
 <include method="testMethod1"/>
 </create>
 </allow>
 </dwr>
<allow>标签中包括可以暴露给javascript访问的东西。
<create>标签中指定javascript中可以访问的java类名,并定义DWR应当如何获得要进行远程的类的实例。
creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,
其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" testClass "属性
指定javascript代码访问对象时使用的名称。
标签指定要公开给javascript的java类名。
<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
注意:include和exclude不能同时存在

2.DWR的前台调用:在web前台页面需要引入engine.js这个类库。然后再引入需要调用的那个java类的js类库,例如:

<script type='text/javascript' src='/Boke/dwr/interface/UserManager.js'></script>

加完之后就可以在该页面对应的js中使用UserManager类提供的函数了。

注:DWR框架会自动生成两个核心JavaScript函数库:1, engine.js文件,这个文件是DWR的核心库,只要需要使用DWR就不能缺少该文件; 2, util.js,这个文件是DWR的工具类库,使用它可以简化客户端DOM元素的操作,可以不引用。

Bootstrap

  • Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。
  • Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范.
  • Bootstrap Less:Less 是一个 CSS 预处理器,让 CSS 具有动态性.

项目中遇到的困难

  1. 数据库结构的设计,由于没有经验,最开始设计的表没有严格按照3大范式,在user表和resource表中都加了author这个字段,后来在敲代码实现的时候才发现了这个严重的弊端,要修改的时候,得同时修改user表和resource表中的author,增加了很多不必要的代码量,也降低了系统的性能。
  2. 博客检索的时候用的是暴力检索,就是取回用户输入的信息直接上blog表里去检索,因为随着用户量的增加,blog内容就越多,直接检索的速度会很慢,用了一段时间之后才想起来,应该为blog表建一个索引表,只存id和标题,检索的时候上索引表中去找,这样可以大大的提升效率。
  3. hibernate的懒加载问题,在hibernate配置文件中,表的一对多,多对多,一对一中,都得让lazy=”false” ,但是将lazy改成false:每次代码执行时,自动将数据库所有数据加载到对象,不管需不需要使用,效率慢。但是如果将lazy=”true”,程序一运行就抛出一个错误,这个问题困扰了我很久,后来在视频学习的过程中,发现可以用spring延迟session的关闭时间的方法解决懒加载问题。实现方法如下:

    通过OpenSessionInView的过滤器来实现,在web.xml中配置,配置时,应该放在第一个Filter的位置上;
     <filter>
         <filter-name>openSession</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>openSession</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
    
  4. 没有考虑到数据结构的优化,博客全部遍历显示的时候,由于应该没有两片完全一样的博客,应该用hashset来存,这样速度更快一些,但我全部都用的是ArrayList。

  5. 输入提示,在检索的时候,用来bootstrap2的输入提示样式,但是好像和bootstrap3有点冲突,有时页面会alert一个错误提示。

科学上网(翻墙)教程!

更多精彩内容,请扫描二维码关注公众号:轮子工厂,公众号内回复:

1.回复【图书】:获取15本新手自学编程,零基础入门经典学习教材;
2.回复【我要造轮子】:获取100多本计算机类经典书籍;
3.回复【开发工具】:获取几大主流编程语言的开发工具~
4.回复【内推】:可帮你内推到大厂工作。
文章目录
  1. 1. 我的项目—博客
    1. 1.1. 数据库
    2. 1.2. 持久层+控制层
    3. 1.3. 前台
      1. 1.3.1. DWR
      2. 1.3.2. Bootstrap
    4. 1.4. 项目中遇到的困难