spring+hibernate+JQuery开发_电子相册_源码

项目结构:

项目首页:

注册页面:

上传图片:

效果图一:

效果图二:

效果图三:

=============================================================

下面是代码部分

=============================================================

需要用到的数据库SQL:

 1 drop database if exists db_ajax;
 2 
 3 create database db_ajax;
 4 
 5 use db_ajax;
 6 
 7 create table user_table
 8 (
 9  user_id int auto_increment primary key,
10  name varchar(255) unique,
11  pass varchar(255)
12 );
13 
14 create table photo_table
15 (
16  photo_id int auto_increment primary key,
17  title varchar(255),
18  fileName varchar(255),
19  owner_id int,
20  foreign key(owner_id) references user_table(user_id)
21 );

/ajax_0500_jQuery_album/WebRoot/album.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 2     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5     <title> 电子相册系统 </title>
 6     <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
 7     <link rel="stylesheet" href="css/flora.dialog.css" type="text/css" />
 8     <link rel="stylesheet" href="css/flora.resizable.css" type="text/css" />
 9     <link rel="stylesheet" href="css/flora.draggable.css" type="text/css" />
10     <link rel="stylesheet" href="css/flora.css" type="text/css" />
11     <link rel="stylesheet" href="css/album.css" type="text/css" />
12     <script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
13     <script type="text/javascript" src="js/ui.core.js"></script>
14     <script type="text/javascript" src="js/ui.dialog.js"></script>
15     <script type="text/javascript" src="js/ui.resizable.js"></script>
16     <script type="text/javascript" src="js/ui.draggable.js"></script>
17     <script type="text/javascript" src="js/album.js"></script>
18 </head>
19 <body class="flora">
20 <table width="780" border="0" cellspacing="1" align="center">
21 <caption><h3>电子相册系统</h3></caption>
22 <tr>
23 <td height="60" colspan="2">
24 <!-- 没有登录显示下面div元素 -->
25 <div id="noLogin">
26 <!-- 这里是注册/登录的表格 -->
27 <table width="100%" border="0" cellspacing="0">
28 <tr>
29     <td width="38%">用户名:
30         <input id="user" type="text" name="user" /></td>
31     <td width="38%">&nbsp;&nbsp;码:
32         <input id="pass" type="text" name="pass" /></td>
33     <td width="24%">我还没有注册,请让我<a href="javascript:void(0);"
34         onclick="changeRegist();">注册</a></td>
35 </tr>
36 <tr>
37     <td colspan="5">
38     <div id="loginDiv" align="center">
39     <input id="login" type="button" onclick="proLogin();" value="登录" />
40     <input id="resetLogin" type="button" onclick="reset();" value="重设" />
41     </div>
42     <div id="registDiv" align="center" style="display:none">
43     <a href="javascript:void(0)" onclick="validateName();">验证用户名是否可用</a>
44     <input id="regist" type="button" onclick="regist();" value="注册" />
45     <input id="resetRegist" type="button" onclick="reset();" value="重设" />
46     </div>
47     </td>
48 </tr>
49 </table>
50 </div>
51 <!-- 已经登录显示下面div元素 -->
52 <div id="hasLogin" align="center" style="display:none">
53     您已经登录成功,下面是您的相册,您也可以<a href="javascript:void(0);" 
54         onclick="openUpload();">增加相片</a>
55 </div>
56 </td>
57 </tr>
58 <tr>
59     <!-- 显示相片列表的元素 -->
60     <td width="120" height="440" valign="top">
61     <div align="center"><h3>相片列表</h3></div>
62     <div id="list"></div><hr />
63     <div align="center"><a href="javascript:void(0);" onclick="turnPage(-1);">上一页</a>
64         &nbsp;<a href="javascript:void(0);" onclick="turnPage(1);">下一页</a></div>
65     </td>
66     <!-- 显示相片的元素 -->
67     <td width="660" align="center" valign="middle">
68         <div style="640px;height:430px;overflow:auto">
69         <img id="show" alt="当前相片"></img></div></td>
70 </tr>
71 </table>
72 
73 <div id="uploadDiv" style="display:none">
74 <form action="proUpload" method="post"
75     enctype="multipart/form-data">
76 <table width="400" border="0" cellspacing="1" cellpadding="10">
77 <caption>上传图片</caption>
78 <tr>
79     <td height="25">图片标题:</td>
80     <td><input id="title" name="title" type="text" /></td>
81 </tr>
82 <tr>
83     <td height="25">浏览图片:</td>
84     <td><input id="file" name="file" type="file" /></td>
85 </tr>
86 <tr>
87     <td colspan="2" align="center">
88     <input type="submit" value="上传" />
89     <input type="reset" value="重设" />
90     </td>
91 </tr> 
92 </table>
93 </form>
94 </div>
95 <div id="tipDiv" style="display:none">
96 </div>
97 </body>
98 </html>

/ajax_0500_jQuery_album/WebRoot/WEB-INF/web.xml

 1 <?xml version="1.0" encoding="GBK"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 4     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 5     version="2.5">
 6 
 7     <!-- 配置Web应用启动时候加载Spring容器 -->
 8     <listener>
 9         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10     </listener>
11 
12     <servlet>
13         <servlet-name>proLogin</servlet-name>
14         <servlet-class>com.b510.album.web.ProLoginServlet</servlet-class>
15     </servlet>
16     <servlet-mapping>
17         <servlet-name>proLogin</servlet-name>
18         <url-pattern>/proLogin</url-pattern>
19     </servlet-mapping>
20 
21     <servlet>
22         <servlet-name>proRegist</servlet-name>
23         <servlet-class>com.b510.album.web.ProRegistServlet</servlet-class>
24     </servlet>
25     <servlet-mapping>
26         <servlet-name>proRegist</servlet-name>
27         <url-pattern>/proRegist</url-pattern>
28     </servlet-mapping>
29 
30     <servlet>
31         <servlet-name>validateName</servlet-name>
32         <servlet-class>com.b510.album.web.ValidateNameServlet</servlet-class>
33     </servlet>
34     <servlet-mapping>
35         <servlet-name>validateName</servlet-name>
36         <url-pattern>/validateName</url-pattern>
37     </servlet-mapping>
38 
39     <servlet>
40         <servlet-name>getPhoto</servlet-name>
41         <servlet-class>com.b510.album.web.GetPhotoServlet</servlet-class>
42     </servlet>
43     <servlet-mapping>
44         <servlet-name>getPhoto</servlet-name>
45         <url-pattern>/getPhoto</url-pattern>
46     </servlet-mapping>
47 
48     <servlet>
49         <servlet-name>showImg</servlet-name>
50         <servlet-class>com.b510.album.web.ShowImgServlet</servlet-class>
51     </servlet>
52     <servlet-mapping>
53         <servlet-name>showImg</servlet-name>
54         <url-pattern>/showImg</url-pattern>
55     </servlet-mapping>
56 
57     <servlet>
58         <servlet-name>pageLoad</servlet-name>
59         <servlet-class>com.b510.album.web.PageLoadServlet</servlet-class>
60     </servlet>
61     <servlet-mapping>
62         <servlet-name>pageLoad</servlet-name>
63         <url-pattern>/pageLoad</url-pattern>
64     </servlet-mapping>
65 
66     <servlet>
67         <servlet-name>turnPage</servlet-name>
68         <servlet-class>com.b510.album.web.TurnPageServlet</servlet-class>
69     </servlet>
70     <servlet-mapping>
71         <servlet-name>turnPage</servlet-name>
72         <url-pattern>/turnPage</url-pattern>
73     </servlet-mapping>
74 
75     <servlet>
76         <servlet-name>proUpload</servlet-name>
77         <servlet-class>com.b510.album.web.ProUploadServlet</servlet-class>
78     </servlet>
79     <servlet-mapping>
80         <servlet-name>proUpload</servlet-name>
81         <url-pattern>/proUpload</url-pattern>
82     </servlet-mapping>
83 
84     <welcome-file-list>
85         <welcome-file>album.html</welcome-file>
86     </welcome-file-list>
87 
88 </web-app>

/ajax_0500_jQuery_album/WebRoot/WEB-INF/applicationContext.xml

  1 <?xml version="1.0" encoding="GBK"?>
  2 <!-- 指定Spring配置文件的Schema信息 -->
  3 <beans xmlns="http://www.springframework.org/schema/beans"
  4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5     xmlns:aop="http://www.springframework.org/schema/aop"
  6     xmlns:tx="http://www.springframework.org/schema/tx"
  7     xsi:schemaLocation="http://www.springframework.org/schema/beans 
  8     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9     http://www.springframework.org/schema/tx 
 10     http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
 11     http://www.springframework.org/schema/aop 
 12     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
 13 
 14     <!-- 定义数据源Bean,使用C3P0数据源实现 -->
 15     <bean id="dataSource" destroy-method="close"
 16         class="com.mchange.v2.c3p0.ComboPooledDataSource">
 17         <!-- 指定连接数据库的驱动 -->
 18         <property name="driverClass" value="com.mysql.jdbc.Driver"/>
 19         <!-- 指定连接数据库的URL -->
 20         <property name="jdbcUrl"
 21             value="jdbc:mysql://localhost:3308/db_ajax"/>
 22         <!-- 指定连接数据库的用户名 -->
 23         <property name="user" value="root"/>
 24         <!-- 指定连接数据库的密码 -->
 25         <property name="password" value="root"/>
 26         <!-- 指定连接数据库连接池的最大连接数 -->
 27         <property name="maxPoolSize" value="40"/>
 28         <!-- 指定连接数据库连接池的最小连接数 -->
 29         <property name="minPoolSize" value="1"/>
 30         <!-- 指定连接数据库连接池的初始化连接数 -->
 31         <property name="initialPoolSize" value="1"/>
 32         <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
 33         <property name="maxIdleTime" value="20"/>
 34     </bean>
 35 
 36     <!-- 定义Hibernate的SessionFactory -->
 37     <bean id="sessionFactory"
 38         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 39         <!-- 依赖注入数据源,注入上面定义的dataSource -->
 40         <property name="dataSource" ref="dataSource"/>
 41         <!-- mappingResouces属性用来列出全部映射文件 -->
 42         <property name="mappingResources">
 43             <list>
 44                 <!-- 以下用来列出Hibernate映射文件 -->
 45                 <value>com/b510/album/model/User.hbm.xml</value>
 46                 <value>com/b510/album/model/Photo.hbm.xml</value>
 47             </list>
 48         </property>
 49         <!-- 定义Hibernate的SessionFactory的属性 -->
 50         <property name="hibernateProperties">
 51             <props>
 52                 <!-- 指定数据库方言 -->
 53                 <prop key="hibernate.dialect">
 54                     org.hibernate.dialect.MySQLInnoDBDialect</prop>
 55                 <!-- 是否根据需要每次自动创建数据库 -->
 56                 <prop key="hibernate.hbm2ddl.auto">update</prop>
 57                 <!-- 显示Hibernate持久化操作所生成的SQL -->
 58                 <prop key="hibernate.show_sql">true</prop>
 59                 <!-- 将SQL脚本进行格式化后再输出 -->
 60                 <prop key="hibernate.format_sql">true</prop>
 61             </props>
 62         </property>
 63     </bean>
 64     <!-- 配置UserDao组件 -->
 65     <bean id="userDao"
 66         class="com.b510.album.dao.impl.UserDaoHibernate">
 67         <!-- 注入SessionFactory引用 -->
 68         <property name="sessionFactory" ref="sessionFactory"/>
 69     </bean>
 70     <!-- 配置PhotoDao组件 -->
 71     <bean id="photoDao"
 72         class="com.b510.album.dao.impl.PhotoDaoHibernate">
 73         <property name="sessionFactory" ref="sessionFactory"/>
 74     </bean>
 75     <!-- 配置albumService业务逻辑组件 -->
 76     <bean id="albumService"
 77         class="com.b510.album.service.impl.AlbumServiceImpl">
 78         <!-- 为业务逻辑组件注入2个DAO组件 -->
 79         <property name="userDao" ref="userDao"/>
 80         <property name="photoDao" ref="photoDao"/>
 81     </bean>
 82 
 83     <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
 84     <!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
 85     <bean id="transactionManager" 
 86         class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 87         <!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
 88         <property name="sessionFactory" ref="sessionFactory"/>
 89     </bean>
 90 
 91     <!-- 配置事务切面Bean,指定事务管理器 -->
 92     <tx:advice id="txAdvice" transaction-manager="transactionManager">
 93         <!-- 用于配置详细的事务语义 -->
 94         <tx:attributes>
 95             <!-- 所有以'get'开头的方法是read-only的 -->
 96             <tx:method name="get*" read-only="true"/>
 97             <!-- 其他方法使用默认的事务设置 -->
 98             <tx:method name="*"/>
 99         </tx:attributes>
100     </tx:advice>
101     <aop:config>
102         <!-- 配置一个切入点,匹配lee包下所有以Impl结尾的类执行的所有方法 -->
103         <aop:pointcut id="leeService"
104             expression="execution(* com.b510.album.service.impl.*Impl.*(..))"/>
105         <!-- 指定在leeService切入点应用txAdvice事务切面 -->
106         <aop:advisor advice-ref="txAdvice" 
107             pointcut-ref="leeService"/>
108     </aop:config>
109 </beans>

/ajax_0500_jQuery_album/WebRoot/js/album.js

  1 $(document).ready(function(){
  2     $.getScript("pageLoad");
  3     //处理地址栏的resultCode参数
  4     var locationStr = document.location.toString();
  5     var resultIndex = locationStr.indexOf("resultCode");
  6     var resultCode = -1;
  7     if (resultIndex > 1)
  8     {
  9         resultCode = locationStr.substring(resultIndex + 11 
 10             , resultIndex + 12);
 11         //根据不同的resultCode,系统进行不同处理
 12         switch(resultCode)
 13         {
 14             case "0" :
 15                 alert('恭喜你,上传文件成功!');
 16                 $('#uploadDiv').dialog('close');
 17                 break;
 18             case "1" :
 19                 alert('本系统只允许上传JPG、GIF、PNG图片文件,请重试!');
 20                 $('#title,#file').val('');
 21                 break;
 22             case "2" :
 23                 alert('处理上传文件出现错误,请重试!');
 24                 $('#title,#file').val('');
 25                 break;
 26         }
 27     }
 28 });
 29 
 30 function reset()
 31 {
 32     //清空user、pass两个单行文本框
 33     $("#user").val("");
 34     $("#pass").val("");
 35 }
 36 
 37 //切换到注册对话框
 38 function changeRegist()
 39 {
 40     //隐藏登录用的两个按钮
 41     $("#loginDiv").hide("500");
 42     //显示注册用的两个按钮
 43     $("#registDiv").show("500");
 44 }
 45 
 46 //处理用户登录的函数
 47 function proLogin()
 48 {
 49     //获取user、pass两个文本框的值
 50     var user = $.trim($("#user").val());
 51     var pass = $.trim($("#pass").val());
 52     if (user == null || user == "" 
 53         || pass == null|| pass =="")
 54     {
 55         alert("必须先输入用户名和密码才能登录");
 56         return false;
 57     }
 58     else
 59     {
 60         //向proLogin发送异步、POST请求
 61         $.post("proLogin", $('#user,#pass').serializeArray()
 62             , null , "script");
 63     }
 64 }
 65 
 66 //处理用户注册的函数
 67 function regist()
 68 {
 69     //获取user、pass两个文本框的值
 70     var user = $.trim($("#user").val());
 71     var pass = $.trim($("#pass").val());
 72     if (user == null || user == "" || pass == null || pass =="")
 73     {
 74         alert("必须先输入用户名和密码才能注册");
 75         return false;
 76     }
 77     else
 78     {
 79         //向proRegist发送异步、POST请求
 80         $.post("proRegist", $('#user,#pass').serializeArray()
 81             , null , "script");
 82     }
 83 }
 84 
 85 //验证用户名是否可用
 86 function validateName()
 87 {
 88     //获取user文本框的值
 89     var user = $.trim($("#user").val());
 90     if (user == null || user == "")
 91     {
 92         alert("您还没有输入用户名!");
 93         return false;
 94     }
 95     else
 96     {
 97         //向validateName发送异步、POST请求
 98         $.post("validateName", $('#user').serializeArray()
 99             , null , "script");
100     }
101 }
102 
103 //周期性地获取当前用户、当前页的相片
104 function onLoadHandler()
105 {
106     //向getPhoto发送异步、GET请求
107     $.getScript("getPhoto");
108     //指定1秒之后再次执行此方法
109     setTimeout("onLoadHandler()", 1000);
110 }
111 
112 //显示照片
113 function showImg(fileName)
114 {
115     $.getScript("showImg?img=" + fileName);
116 //    document.getElementById("show").src="uploadfiles/" + fileName + "?now=" + new Date();
117 //    $("#show").attr("src" , "uploadfiles/" + fileName);
118 }
119 
120 //处理翻页的函数
121 function turnPage(flag)
122 {
123     $.getScript("turnPage?turn=" + flag);
124 }
125 
126 //打开上传窗口
127 function openUpload()
128 {
129 
130     $("#uploadDiv").show()
131         .dialog(
132         {
133             modal: true,
134             resizable: false,
135              428,
136             height: 220,
137             overlay: {opacity: 0.5 , background: "black"}
138         });
139 }

/ajax_0500_jQuery_album/src/com/b510/album/web/base/BaseServlet.java

 1 package com.b510.album.web.base;
 2 
 3 import javax.servlet.ServletConfig;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.web.context.support.WebApplicationContextUtils;
 9 
10 import com.b510.album.service.AlbumService;
11 /**
12  * 
13  * @author Hongten
14  *
15  */
16 public class BaseServlet extends HttpServlet {
17 
18     private static final long serialVersionUID = -2041755371540813745L;
19 
20     protected AlbumService as;
21 
22     // 定义构造器,获得Spring容器的引用
23     public void init(ServletConfig config) throws ServletException {
24         super.init(config);
25         ApplicationContext ctx = WebApplicationContextUtils
26                 .getWebApplicationContext(getServletContext());
27         as = (AlbumService) ctx.getBean("albumService");
28     }
29 }

/ajax_0500_jQuery_album/src/com/b510/album/web/ValidateNameServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 import com.b510.album.exception.AlbumException;
11 import com.b510.album.web.base.BaseServlet;
12 /**
13  * 
14  * @author Hongten
15  *
16  */
17 public class ValidateNameServlet extends BaseServlet {
18 
19     private static final long serialVersionUID = 9038839276327742641L;
20 
21     public void service(HttpServletRequest request, HttpServletResponse response)
22             throws IOException, ServletException {
23         String name = request.getParameter("user");
24         response.setContentType("text/javascript;charset=GBK");
25         // 获取输出流
26         PrintWriter out = response.getWriter();
27         try {
28             if (name != null) {
29                 if (as.validateName(name)) {
30                     out.println("alert('恭喜您,该用户名还未使用,你可使用该用户名!');");
31                 } else {
32                     out.println("alert('对不起,该用户名已被他人占用!');");
33                     out.println("$('#user').val('');");
34                 }
35             } else {
36                 out.println("alert('验证用户名出现异常,请更换用户名重试!');");
37             }
38         } catch (AlbumException ex) {
39             out.println("alert('" + ex.getMessage() + "请更换用户名重试!');");
40         }
41     }
42 }

/ajax_0500_jQuery_album/src/com/b510/album/web/TurnPageServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.List;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 import com.b510.album.exception.AlbumException;
13 import com.b510.album.vo.PhotoHolder;
14 import com.b510.album.web.base.BaseServlet;
15 /**
16  * 
17  * @author Hongten
18  *
19  */
20 public class TurnPageServlet extends BaseServlet {
21 
22     private static final long serialVersionUID = -5097286750384714951L;
23 
24     public void service(HttpServletRequest request, HttpServletResponse response)
25             throws IOException, ServletException {
26         String turn = request.getParameter("turn");
27         HttpSession session = request.getSession(true);
28         String name = (String) session.getAttribute("curUser");
29         Object pageObj = session.getAttribute("curPage");
30         // 如果HttpSession中的curPage为null,则设置当前页为第一页
31         int curPage = pageObj == null ? 1 : (Integer) pageObj;
32         response.setContentType("text/javascript;charset=GBK");
33         PrintWriter out = response.getWriter();
34         if (curPage == 1 && turn.equals("-1")) {
35             out.println("alert('现在已经是第一页,无法向前翻页!')");
36         } else {
37             // 执行翻页,修改curPage的值。
38             curPage += Integer.parseInt(turn);
39             try {
40                 List<PhotoHolder> photos = as.getPhotoByUser(name, curPage);
41                 // 翻页后没有记录
42                 if (photos.size() == 0) {
43                     out.println("alert('翻页后找不到任何相片记录,系统将自动返回上一页')");
44                     // 重新返回上一页
45                     curPage -= Integer.parseInt(turn);
46                 } else {
47                     // 把用户正在浏览的页码放入HttpSession中
48                     session.setAttribute("curPage", curPage);
49                 }
50             } catch (AlbumException ex) {
51                 out.println("alert('" + ex.getMessage() + "请重试!')");
52             }
53         }
54     }
55 }

/ajax_0500_jQuery_album/src/com/b510/album/web/ShowImgServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 
11 import com.b510.album.web.base.BaseServlet;
12 /**
13  * 
14  * @author Hongten
15  *
16  */
17 public class ShowImgServlet extends BaseServlet {
18 
19     private static final long serialVersionUID = 1460203270448078666L;
20 
21     public void service(HttpServletRequest request, HttpServletResponse response)
22             throws IOException, ServletException {
23         String img = request.getParameter("img");
24         HttpSession session = request.getSession(true);
25         // 将用户正在浏览的图片放入HttpSession中。
26         session.setAttribute("curImg", img);
27         response.setContentType("text/javascript;charset=GBK");
28         // 获取输出流
29         PrintWriter out = response.getWriter();
30         out.println("$('#show').attr('src' , 'uploadfiles/" + img + "');");
31     }
32 }

/ajax_0500_jQuery_album/src/com/b510/album/web/ProUploadServlet.java

  1 package com.b510.album.web;
  2 
  3 import java.io.FileOutputStream;
  4 import java.io.IOException;
  5 import java.io.InputStream;
  6 import java.io.PrintWriter;
  7 import java.util.Iterator;
  8 import java.util.List;
  9 
 10 import javax.servlet.ServletException;
 11 import javax.servlet.http.HttpServletRequest;
 12 import javax.servlet.http.HttpServletResponse;
 13 
 14 import org.apache.commons.fileupload.FileItem;
 15 import org.apache.commons.fileupload.FileItemFactory;
 16 import org.apache.commons.fileupload.FileUploadException;
 17 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 18 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 19 
 20 import com.b510.album.exception.AlbumException;
 21 import com.b510.album.web.base.BaseServlet;
 22 /**
 23  * 
 24  * @author Hongten
 25  *
 26  */
 27 @SuppressWarnings("unchecked")
 28 public class ProUploadServlet extends BaseServlet {
 29 
 30     private static final long serialVersionUID = 642229801989188793L;
 31 
 32     public void service(HttpServletRequest request, HttpServletResponse response)
 33             throws IOException, ServletException {
 34         Iterator iter = null;
 35         String title = null;
 36         response.setContentType("text/html;charset=GBK");
 37         // 获取输出流
 38         PrintWriter out = response.getWriter();
 39         out.println("<script type='text/javascript>'");
 40         try {
 41             // 使用Uploader处理上传
 42             FileItemFactory factory = new DiskFileItemFactory();
 43             ServletFileUpload upload = new ServletFileUpload(factory);
 44             List items = upload.parseRequest(request);
 45             iter = items.iterator();
 46             // 遍历每个表单控件对应的内容
 47             while (iter.hasNext()) {
 48                 FileItem item = (FileItem) iter.next();
 49                 // 如果该项是普通表单域
 50                 if (item.isFormField()) {
 51                     String name = item.getFieldName();
 52                     if (name.equals("title")) {
 53                         title = item.getString("GBK");
 54                     }
 55                 }
 56                 // 如果是需要上传的文件
 57                 else {
 58                     String user = (String) request.getSession().getAttribute(
 59                             "curUser");
 60                     String serverFileName = null;
 61                     // 返回文件名
 62                     String fileName = item.getName();
 63                     // 取得文件后缀
 64                     String appden = fileName.substring(fileName
 65                             .lastIndexOf("."));
 66                     // 返回文件类型
 67                     String contentType = item.getContentType();
 68                     // 只允许上传jpg、gif、png图片
 69                     if (contentType.equals("image/pjpeg")
 70                             || contentType.equals("image/gif")
 71                             || contentType.equals("image/jpeg")
 72                             || contentType.equals("image/png")) {
 73                         InputStream input = item.getInputStream();
 74                         serverFileName = String.valueOf(System
 75                                 .currentTimeMillis());
 76                         FileOutputStream output = new FileOutputStream(
 77                                 getServletContext().getRealPath("/")
 78                                         + "uploadfiles\\" + serverFileName
 79                                         + appden);
 80                         byte[] buffer = new byte[1024];
 81                         int len = 0;
 82                         while ((len = input.read(buffer)) > 0) {
 83                             output.write(buffer, 0, len);
 84                         }
 85                         input.close();
 86                         output.close();
 87                         as.addPhoto(user, title, serverFileName + appden);
 88                         response.sendRedirect("album.html?resultCode=0");
 89                     } else {
 90                         response.sendRedirect("album.html?resultCode=1");
 91                     }
 92                 }
 93             }
 94         } catch (FileUploadException fue) {
 95             fue.printStackTrace();
 96             response.sendRedirect("album.html?resultCode=2");
 97         } catch (AlbumException ex) {
 98             ex.printStackTrace();
 99         }
100     }
101 }

 /ajax_0500_jQuery_album/src/com/b510/album/web/ProRegistServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 
11 import com.b510.album.exception.AlbumException;
12 import com.b510.album.web.base.BaseServlet;
13 /**
14  * 
15  * @author Hongten
16  *
17  */
18 public class ProRegistServlet extends BaseServlet {
19 
20     private static final long serialVersionUID = -3174994243043815566L;
21 
22     public void service(HttpServletRequest request, HttpServletResponse response)
23             throws IOException, ServletException {
24         String name = request.getParameter("user");
25         String pass = request.getParameter("pass");
26         response.setContentType("text/javascript;charset=GBK");
27         // 获取输出流
28         PrintWriter out = response.getWriter();
29         try {
30             out.println("$('#user,#pass').val('');");
31             if (name != null && pass != null && as.registUser(name, pass) > 0) {
32                 HttpSession session = request.getSession(true);
33                 session.setAttribute("curUser", name);
34                 out.println("alert('恭喜您,您已经注册成功!');");
35                 out.println("$('#noLogin').hide(500);");
36                 out.println("$('#hasLogin').show(500);");
37                 // 调用获取相片列表的方法
38                 out.println("onLoadHandler();");
39             } else {
40                 out.println("alert('您注册出现失败,请选择合适的用户名重试!');");
41             }
42         } catch (AlbumException ex) {
43             out.println("alert('" + ex.getMessage() + "请更换用户名重试!');");
44         }
45     }
46 }

/ajax_0500_jQuery_album/src/com/b510/album/web/ProLoginServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 
11 import com.b510.album.exception.AlbumException;
12 import com.b510.album.web.base.BaseServlet;
13 /**
14  * 
15  * @author Hongten
16  *
17  */
18 public class ProLoginServlet extends BaseServlet {
19 
20     private static final long serialVersionUID = -1253530202224049958L;
21 
22     public void service(HttpServletRequest request, HttpServletResponse response)
23             throws IOException, ServletException {
24         String name = request.getParameter("user");
25         String pass = request.getParameter("pass");
26         response.setContentType("text/javascript;charset=GBK");
27         // 获取输出流
28         PrintWriter out = response.getWriter();
29         try {
30             // 清空id为user、pass输入框的内容
31             out.println("$('#user,#pass').val('');");
32             if (name != null && pass != null && as.userLogin(name, pass)) {
33                 HttpSession session = request.getSession(true);
34                 session.setAttribute("curUser", name);
35                 out.println("alert('您已经登录成功!')");
36                 out.println("$('#noLogin').hide(500)");
37                 out.println("$('#hasLogin').show(500)");
38                 // 调用获取相片列表的方法
39                 out.println("onLoadHandler();");
40             } else {
41                 out.println("alert('您输入的用户名、密码不符,请重试!')");
42             }
43         } catch (AlbumException ex) {
44             out.println("alert('" + ex.getMessage() + "请更换用户名、密码重试!')");
45         }
46     }
47 }

/ajax_0500_jQuery_album/src/com/b510/album/web/PageLoadServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import javax.servlet.http.HttpSession;
10 
11 import com.b510.album.web.base.BaseServlet;
12 
13 /**
14  * 
15  * @author Hongten
16  * 
17  */
18 public class PageLoadServlet extends BaseServlet {
19 
20     private static final long serialVersionUID = 7512001492425261841L;
21 
22     public void service(HttpServletRequest request, HttpServletResponse response)
23             throws IOException, ServletException {
24         response.setContentType("text/javascript;charset=GBK");
25         // 获取输出流
26         PrintWriter out = response.getWriter();
27         HttpSession session = request.getSession(true);
28         String name = (String) session.getAttribute("curUser");
29         // 如果name不为null,表明用户已经登录
30         if (name != null) {
31             // 隐藏id为noLogin的元素(用户登录面板)
32             out.println("$('#noLogin').hide()");
33             // 隐藏id为hasLogin的元素(用户控制面板)
34             out.println("$('#hasLogin').show()");
35             // 调用获取相片列表的方法
36             out.println("onLoadHandler();");
37             // 取出HttpSession中的curImg属性
38             String curImg = (String) session.getAttribute("curImg");
39             // 重新显示用户正在浏览的相片
40             if (curImg != null) {
41                 out.println("$('#show').attr('src' , 'uploadfiles/" + curImg
42                         + "');");
43             }
44         }
45     }
46 }

/ajax_0500_jQuery_album/src/com/b510/album/web/GetPhotoServlet.java

 1 package com.b510.album.web;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.List;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 import com.b510.album.exception.AlbumException;
13 import com.b510.album.vo.PhotoHolder;
14 import com.b510.album.web.base.BaseServlet;
15 
16 /**
17  * 
18  * @author Hongten
19  * 
20  */
21 public class GetPhotoServlet extends BaseServlet {
22 
23     private static final long serialVersionUID = -8380695760546582385L;
24 
25     public void service(HttpServletRequest request, HttpServletResponse response)
26             throws IOException, ServletException {
27         HttpSession session = request.getSession(true);
28         // 从HttpSession中获取系统当前用户、相片列表的当前页码
29         String name = (String) session.getAttribute("curUser");
30         Object pageObj = session.getAttribute("curPage");
31         // 如果HttpSession中的curPage为null,则设置当前页为第一页
32         int curPage = pageObj == null ? 1 : (Integer) pageObj;
33         response.setContentType("text/javascript;charset=GBK");
34         // 获取输出流
35         PrintWriter out = response.getWriter();
36         try {
37             List<PhotoHolder> photos = as.getPhotoByUser(name, curPage);
38             // 清空id为list的元素
39             out.println("var list = $('#list').empty();");
40             for (PhotoHolder ph : photos) {
41                 // 将每个相片动态添加到id为list的元素中
42                 out.println("list.append(\"<div align='center'>"
43                         + "<a href='javascript:void(0)' onclick=\\\"showImg('"
44                         + ph.getFileName() + "');\\\">" + ph.getTitle()
45                         + "</a></div>\");");
46             }
47         } catch (AlbumException ex) {
48             out.println("alert('" + ex.getMessage() + "请重试!')");
49         }
50     }
51 }

/ajax_0500_jQuery_album/src/com/b510/album/vo/PhotoHolder.java

 1 package com.b510.album.vo;
 2 
 3 /**
 4  * 
 5  * @author Hongten
 6  * 
 7  */
 8 public class PhotoHolder {
 9     // 相片的名称
10     private String title;
11     // 相片在服务器上的文件名
12     private String fileName;
13 
14     // 无参数的构造器
15     public PhotoHolder() {
16     }
17 
18     // 初始化全部属性的构造器
19     public PhotoHolder(String title, String fileName) {
20         this.title = title;
21         this.fileName = fileName;
22     }
23 
24     // title属性的setter和getter方法
25     public void setTitle(String title) {
26         this.title = title;
27     }
28 
29     public String getTitle() {
30         return this.title;
31     }
32 
33     // fileName属性的setter和getter方法
34     public void setFileName(String fileName) {
35         this.fileName = fileName;
36     }
37 
38     public String getFileName() {
39         return this.fileName;
40     }
41 }

/ajax_0500_jQuery_album/src/com/b510/album/service/impl/AlbumServiceImpl.java

  1 package com.b510.album.service.impl;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import com.b510.album.dao.PhotoDao;
  7 import com.b510.album.dao.UserDao;
  8 import com.b510.album.exception.AlbumException;
  9 import com.b510.album.model.Photo;
 10 import com.b510.album.model.User;
 11 import com.b510.album.service.AlbumService;
 12 import com.b510.album.vo.PhotoHolder;
 13 
 14 /**
 15  * 
 16  * @author Hongten
 17  * 
 18  */
 19 public class AlbumServiceImpl implements AlbumService {
 20     // 业务逻辑组件所依赖的2个DAO组件
 21     private UserDao ud = null;
 22     private PhotoDao pd = null;
 23 
 24     // 依赖注入2个DAO组件所需的setter方法
 25     public void setUserDao(UserDao ud) {
 26         this.ud = ud;
 27     }
 28 
 29     public void setPhotoDao(PhotoDao pd) {
 30         this.pd = pd;
 31     }
 32 
 33     /**
 34      * 验证用户登录是否成功。
 35      * 
 36      * @param name
 37      *            登录的用户名
 38      * @param pass
 39      *            登录的密码
 40      * @return 用户登录的结果,成功返回true,否则返回false
 41      */
 42     public boolean userLogin(String name, String pass) {
 43         try {
 44             // 使用UserDao根据用户名查询用户
 45             User u = ud.findByName(name);
 46             if (u != null && u.getPass().equals(pass)) {
 47                 return true;
 48             }
 49             return false;
 50         } catch (Exception ex) {
 51             ex.printStackTrace();
 52             throw new AlbumException("处理用户登录出现异常!");
 53         }
 54     }
 55 
 56     /**
 57      * 注册新用户
 58      * 
 59      * @param name
 60      *            新注册用户的用户名
 61      * @param pass
 62      *            新注册用户的密码
 63      * @return 新注册用户的主键
 64      */
 65     public int registUser(String name, String pass) {
 66         try {
 67             // 创建一个新的User实例
 68             User u = new User();
 69             u.setName(name);
 70             u.setPass(pass);
 71             // 持久化User对象
 72             ud.save(u);
 73             return u.getId();
 74         } catch (Exception ex) {
 75             ex.printStackTrace();
 76             throw new AlbumException("新用户注册出现异常!");
 77         }
 78     }
 79 
 80     /**
 81      * 添加照片
 82      * 
 83      * @param user
 84      *            添加相片的用户
 85      * @param title
 86      *            添加相片的标题
 87      * @param fileName
 88      *            新增相片在服务器上的文件名
 89      * @return 新添加相片的主键
 90      */
 91     public int addPhoto(String user, String title, String fileName) {
 92         try {
 93             // 创建一个新的Photo实例
 94             Photo p = new Photo();
 95             p.setTitle(title);
 96             p.setFileName(fileName);
 97             p.setUser(ud.findByName(user));
 98             // 持久化Photo实例
 99             pd.save(p);
100             return p.getId();
101         } catch (Exception ex) {
102             ex.printStackTrace();
103             throw new AlbumException("添加相片过程中出现异常!");
104         }
105     }
106 
107     /**
108      * 根据用户获得该用户的所有相片
109      * 
110      * @param user
111      *            当前用户
112      * @param pageNo
113      *            页码
114      * @return 返回属于该用户、指定页的相片
115      */
116     public List<PhotoHolder> getPhotoByUser(String user, int pageNo) {
117         try {
118             List<Photo> pl = pd.findByUser(ud.findByName(user), pageNo);
119             List<PhotoHolder> result = new ArrayList<PhotoHolder>();
120             for (Photo p : pl) {
121                 result.add(new PhotoHolder(p.getTitle(), p.getFileName()));
122             }
123             return result;
124         } catch (Exception ex) {
125             ex.printStackTrace();
126             throw new AlbumException("查询相片列表的过程中出现异常!");
127         }
128     }
129 
130     /**
131      * 验证用户名是否可用,即数据库里是否已经存在该用户名
132      * 
133      * @param name
134      *            需要校验的用户名
135      * @return 如果该用户名可用,返回true,否则返回false。
136      */
137     public boolean validateName(String name) {
138         try {
139             // 根据用户名查询对应的User实例
140             User u = ud.findByName(name);
141             if (u != null) {
142                 return false;
143             }
144             return true;
145         } catch (Exception ex) {
146             ex.printStackTrace();
147             throw new AlbumException("验证用户名是否存在的过程中出现异常!");
148         }
149     }
150 }

/ajax_0500_jQuery_album/src/com/b510/album/service/AlbumService.java

 1 package com.b510.album.service;
 2 
 3 import java.util.List;
 4 
 5 import com.b510.album.vo.PhotoHolder;
 6 
 7 /**
 8  * 
 9  * @author Hongten
10  * 
11  */
12 public interface AlbumService {
13     /**
14      * 验证用户登录是否成功。
15      * 
16      * @param name
17      *            登录的用户名
18      * @param pass
19      *            登录的密码
20      * @return 用户登录的结果,成功返回true,否则返回false
21      */
22     boolean userLogin(String name, String pass);
23 
24     /**
25      * 注册新用户
26      * 
27      * @param name
28      *            新注册用户的用户名
29      * @param pass
30      *            新注册用户的密码
31      * @return 新注册用户的主键
32      */
33     int registUser(String name, String pass);
34 
35     /**
36      * 添加照片
37      * 
38      * @param user
39      *            添加相片的用户
40      * @param title
41      *            添加相片的标题
42      * @param fileName
43      *            新增相片在服务器上的文件名
44      * @return 新添加相片的主键
45      */
46     int addPhoto(String user, String title, String fileName);
47 
48     /**
49      * 根据用户获得该用户的所有相片
50      * 
51      * @param user
52      *            当前用户
53      * @param pageNo
54      *            页码
55      * @return 返回属于该用户、指定页的相片
56      */
57     List<PhotoHolder> getPhotoByUser(String user, int pageNo);
58 
59     /**
60      * 验证用户名是否可用,即数据库里是否已经存在该用户名
61      * 
62      * @param name
63      *            需要校验的用户名
64      * @return 如果该用户名可用,返回true,否则返回false。
65      */
66     boolean validateName(String name);
67 }

/ajax_0500_jQuery_album/src/com/b510/album/model/Photo.java

 1 package com.b510.album.model;
 2 
 3 /**
 4  * Photo实体类
 5  * 
 6  * @author Hongten
 7  * 
 8  */
 9 public class Photo {
10     // 标识属性
11     private Integer id;
12     // 该相片的名称
13     private String title;
14     // 相片在服务器上的文件名
15     private String fileName;
16     // 保存该相片所属的用户
17     private User user;
18 
19     // 无参数的构造器
20     public Photo() {
21     }
22 
23     // 初始化全部属性的构造器
24     public Photo(Integer id, String title, String fileName, User user) {
25         this.id = id;
26         this.title = title;
27         this.fileName = fileName;
28         this.user = user;
29     }
30 
31     // id属性的setter和getter方法
32     public void setId(Integer id) {
33         this.id = id;
34     }
35 
36     public Integer getId() {
37         return this.id;
38     }
39 
40     // title属性的setter和getter方法
41     public void setTitle(String title) {
42         this.title = title;
43     }
44 
45     public String getTitle() {
46         return this.title;
47     }
48 
49     // fileName属性的setter和getter方法
50     public void setFileName(String fileName) {
51         this.fileName = fileName;
52     }
53 
54     public String getFileName() {
55         return this.fileName;
56     }
57 
58     // user属性的setter和getter方法
59     public void setUser(User user) {
60         this.user = user;
61     }
62 
63     public User getUser() {
64         return this.user;
65     }
66 }

/ajax_0500_jQuery_album/src/com/b510/album/model/User.java

 1 package com.b510.album.model;
 2 
 3 import java.util.Set;
 4 import java.util.HashSet;
 5 
 6 /**
 7  * User实体类
 8  * 
 9  * @author Hongten
10  * 
11  */
12 public class User {
13     // 标识属性
14     private Integer id;
15     // 该用户的用户名
16     private String name;
17     // 该用户的密码
18     private String pass;
19     // 使用Set保存该用户关联的相片
20     private Set<Photo> photos = new HashSet<Photo>();
21 
22     // 无参数的构造器
23     public User() {
24     }
25 
26     // 初始化全部属性的构造器
27     public User(Integer id, String name, String pass) {
28         this.id = id;
29         this.name = name;
30         this.pass = pass;
31     }
32 
33     // id属性的setter和getter方法
34     public void setId(Integer id) {
35         this.id = id;
36     }
37 
38     public Integer getId() {
39         return this.id;
40     }
41 
42     // name属性的setter和getter方法
43     public void setName(String name) {
44         this.name = name;
45     }
46 
47     public String getName() {
48         return this.name;
49     }
50 
51     // pass属性的setter和getter方法
52     public void setPass(String pass) {
53         this.pass = pass;
54     }
55 
56     public String getPass() {
57         return this.pass;
58     }
59 
60     // photos属性的setter和getter方法
61     public void setPhotos(Set<Photo> photos) {
62         this.photos = photos;
63     }
64 
65     public Set<Photo> getPhotos() {
66         return this.photos;
67     }
68 
69 }

/ajax_0500_jQuery_album/src/com/b510/album/model/Photo.hbm.xml

 1 <?xml version="1.0" encoding="GBK"?>
 2 <!DOCTYPE hibernate-mapping
 3     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <!-- Hibernate映射文件的根元素 -->
 6 <hibernate-mapping package="com.b510.album.model">
 7     <!-- 每个class元素映射一个持久化类 -->
 8     <class name="Photo" table="photo_table">
 9         <id name="id" type="int" column="photo_id">
10             <!-- 指定主键生成器策略 -->
11             <generator class="identity"/>
12         </id>
13         <!-- 映射普通属性 -->
14         <property name="title" type="string"/>
15         <property name="fileName" type="string"/>
16         <!-- 映射和User实体的N:1关联 -->
17         <many-to-one name="user" column="owner_id"
18             class="User" not-null="true"/>
19     </class>
20 </hibernate-mapping>

/ajax_0500_jQuery_album/src/com/b510/album/model/User.hbm.xml

 1 <?xml version="1.0" encoding="GBK"?>
 2 <!DOCTYPE hibernate-mapping
 3     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <!-- Hibernate映射文件的根元素 -->
 6 <hibernate-mapping package="com.b510.album.model">
 7     <!-- 每个class元素映射一个持久化类 -->
 8     <class name="User" table="user_table">
 9         <!-- 映射标识属性 -->
10         <id name="id" type="int" column="user_id">
11             <!-- 指定主键生成器策略 -->
12             <generator class="identity"/>
13         </id>
14         <!-- 映射普通属性 -->
15         <property name="name" type="string" unique="true"/>
16         <property name="pass" type="string"/>
17         <!-- 映射和Photo实体的1:N关联 -->
18         <set name="photos" inverse="true">
19             <key column="owner_id"/>
20             <one-to-many class="Photo"/>
21         </set>
22     </class>
23 </hibernate-mapping>

/ajax_0500_jQuery_album/src/com/b510/album/exception/AlbumException.java

 1 package com.b510.album.exception;
 2 
 3 /**
 4  * 自定义的Exception
 5  * 
 6  * @author Hongten
 7  * 
 8  */
 9 public class AlbumException extends RuntimeException {
10 
11     private static final long serialVersionUID = 8050756054850450421L;
12 
13     // 提供一个无参数的构造器
14     public AlbumException() {
15     }
16 
17     // 提供一个带字符串参数的构造器
18     public AlbumException(String msg) {
19         super(msg);
20     }
21 }

/ajax_0500_jQuery_album/src/com/b510/album/enhance/HongtenHibernateDaoSupport.java

 1 package com.b510.album.enhance;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 
 6 import org.hibernate.HibernateException;
 7 import org.hibernate.Query;
 8 import org.hibernate.Session;
 9 import org.springframework.orm.hibernate3.HibernateCallback;
10 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
11 
12 /**
13  * 
14  * @author Hongten
15  * 
16  */
17 @SuppressWarnings("unchecked")
18 public class HongtenHibernateDaoSupport extends HibernateDaoSupport {
19     /**
20      * 使用hql 语句进行分页查询操作
21      * 
22      * @param hql
23      *            需要查询的hql语句
24      * @param offset
25      *            第一条记录索引
26      * @param pageSize
27      *            每页需要显示的记录数
28      * @return 当前页的所有记录
29      */
30     public List findByPage(final String hql, final int offset,
31             final int pageSize) {
32         List list = getHibernateTemplate().executeFind(new HibernateCallback() {
33             public Object doInHibernate(Session session)
34                     throws HibernateException, SQLException {
35                 List result = session.createQuery(hql).setFirstResult(offset)
36                         .setMaxResults(pageSize).list();
37                 return result;
38             }
39         });
40         return list;
41     }
42 
43     /**
44      * 使用hql 语句进行分页查询操作
45      * 
46      * @param hql
47      *            需要查询的hql语句
48      * @param value
49      *            如果hql有一个参数需要传入,value就是传入的参数
50      * @param offset
51      *            第一条记录索引
52      * @param pageSize
53      *            每页需要显示的记录数
54      * @return 当前页的所有记录
55      */
56     public List findByPage(final String hql, final Object value,
57             final int offset, final int pageSize) {
58         List list = getHibernateTemplate().executeFind(new HibernateCallback() {
59             public Object doInHibernate(Session session)
60                     throws HibernateException, SQLException {
61                 List result = session.createQuery(hql).setParameter(0, value)
62                         .setFirstResult(offset).setMaxResults(pageSize).list();
63                 return result;
64             }
65         });
66         return list;
67     }
68 
69     /**
70      * 使用hql 语句进行分页查询操作
71      * 
72      * @param hql
73      *            需要查询的hql语句
74      * @param values
75      *            如果hql有多个个参数需要传入,values就是传入的参数数组
76      * @param offset
77      *            第一条记录索引
78      * @param pageSize
79      *            每页需要显示的记录数
80      * @return 当前页的所有记录
81      */
82     public List findByPage(final String hql, final Object[] values,
83             final int offset, final int pageSize) {
84         List list = getHibernateTemplate().executeFind(new HibernateCallback() {
85             public Object doInHibernate(Session session)
86                     throws HibernateException, SQLException {
87                 Query query = session.createQuery(hql);
88                 for (int i = 0; i < values.length; i++) {
89                     query.setParameter(i, values[i]);
90                 }
91                 List result = query.setFirstResult(offset).setMaxResults(
92                         pageSize).list();
93                 return result;
94             }
95         });
96         return list;
97     }
98 }

/ajax_0500_jQuery_album/src/com/b510/album/dao/impl/PhotoDaoHibernate.java

 1 package com.b510.album.dao.impl;
 2 
 3 import java.util.List;
 4 
 5 import com.b510.album.dao.PhotoDao;
 6 import com.b510.album.enhance.HongtenHibernateDaoSupport;
 7 import com.b510.album.model.Photo;
 8 import com.b510.album.model.User;
 9 /**
10  * 
11  * @author Hongten
12  *
13  */
14 @SuppressWarnings("unchecked")
15 public class PhotoDaoHibernate extends HongtenHibernateDaoSupport implements
16         PhotoDao {
17     /**
18      * 根据标识属性来加载Photo实例
19      * 
20      * @param id
21      *            需要加载的Photo实例的标识属性值
22      * @return 指定标识属性对应的Photo实例
23      */
24     public Photo get(Integer id) {
25         return (Photo) getHibernateTemplate().get(Photo.class, id);
26     }
27 
28     /**
29      * 持久化指定的Photo实例
30      * 
31      * @param photo
32      *            需要被持久化的Photo实例
33      * @return Photo实例被持久化后的标识属性值
34      */
35     public Integer save(Photo photo) {
36         return (Integer) getHibernateTemplate().save(photo);
37     }
38 
39     /**
40      * 修改指定的Photo实例
41      * 
42      * @param photo
43      *            需要被修改的Photo实例
44      */
45     public void update(Photo photo) {
46         getHibernateTemplate().update(photo);
47     }
48 
49     /**
50      * 删除指定的Photo实例
51      * 
52      * @param photo
53      *            需要被删除的Photo实例
54      */
55     public void delete(Photo photo) {
56         getHibernateTemplate().delete(photo);
57     }
58 
59     /**
60      * 根据标识属性删除Photo实例
61      * 
62      * @param id
63      *            需要被删除的Photo实例的标识属性值
64      */
65     public void delete(Integer id) {
66         getHibernateTemplate().delete(get(id));
67     }
68 
69     /**
70      * 查询全部的Photo实例
71      * 
72      * @return 数据库中全部的Photo实例
73      */
74     public List<Photo> findAll() {
75         return (List<Photo>) getHibernateTemplate().find("from Photo");
76     }
77 
78     /**
79      * 查询属于指定用户的相片,且进行分页控制
80      * 
81      * @param user
82      *            查询相片所属的用户
83      * @param pageNo
84      *            需要查询的指定页
85      * @return 查询到的相片
86      */
87     public List<Photo> findByUser(User user, int pageNo) {
88         int offset = (pageNo - 1) * PAGE_SIZE;
89         // 返回分页查询的结果
90         return (List<Photo>) findByPage("from Photo b where b.user = ?", user,
91                 offset, PAGE_SIZE);
92     }
93 }

/ajax_0500_jQuery_album/src/com/b510/album/dao/impl/UserDaoHibernate.java

 1 package com.b510.album.dao.impl;
 2 
 3 import java.util.List;
 4 
 5 import com.b510.album.dao.UserDao;
 6 import com.b510.album.enhance.HongtenHibernateDaoSupport;
 7 import com.b510.album.model.User;
 8 
 9 /**
10  * 
11  * @author Hongten
12  *
13  */
14 @SuppressWarnings("unchecked")
15 public class UserDaoHibernate extends HongtenHibernateDaoSupport implements
16         UserDao {
17     /**
18      * 根据标识属性来加载User实例
19      * 
20      * @param id
21      *            需要加载的User实例的标识属性值
22      * @return 指定标识属性对应的User实例
23      */
24     public User get(Integer id) {
25         return (User) getHibernateTemplate().get(User.class, id);
26     }
27 
28     /**
29      * 持久化指定的User实例
30      * 
31      * @param user
32      *            需要被持久化的User实例
33      * @return User实例被持久化后的标识属性值
34      */
35     public Integer save(User user) {
36         return (Integer) getHibernateTemplate().save(user);
37     }
38 
39     /**
40      * 修改指定的User实例
41      * 
42      * @param user
43      *            需要被修改的User实例
44      */
45     public void update(User user) {
46         getHibernateTemplate().update(user);
47     }
48 
49     /**
50      * 删除指定的User实例
51      * 
52      * @param user
53      *            需要被删除的User实例
54      */
55     public void delete(User user) {
56         getHibernateTemplate().delete(user);
57     }
58 
59     /**
60      * 根据标识属性删除User实例
61      * 
62      * @param id
63      *            需要被删除的User实例的标识属性值
64      */
65     public void delete(Integer id) {
66         getHibernateTemplate().delete(get(id));
67     }
68 
69     /**
70      * 查询全部的User实例
71      * 
72      * @return 数据库中全部的User实例
73      */
74     public List<User> findAll() {
75         return (List<User>) getHibernateTemplate().find("from User");
76     }
77 
78     /**
79      * 根据用户名查找用户
80      * 
81      * @param name
82      *            需要查找的用户的用户名
83      * @return 查找到的用户
84      */
85     public User findByName(String name) {
86         List<User> users = (List<User>) getHibernateTemplate().find(
87                 "from User u where u.name = ?", name);
88         if (users != null && users.size() == 1) {
89             return users.get(0);
90         }
91         return null;
92     }
93 }

/ajax_0500_jQuery_album/src/com/b510/album/dao/PhotoDao.java

 1 package com.b510.album.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.b510.album.model.Photo;
 6 import com.b510.album.model.User;
 7 
 8 
 9 /**
10  * PhotoDao接口
11  * 
12  * @author Hongten
13  * 
14  */
15 public interface PhotoDao {
16     // 以常量控制每页显示的相片数
17     final int PAGE_SIZE = 8;
18 
19     /**
20      * 根据标识属性来加载Photo实例
21      * 
22      * @param id
23      *            需要加载的Photo实例的标识属性值
24      * @return 指定标识属性对应的Photo实例
25      */
26     Photo get(Integer id);
27 
28     /**
29      * 持久化指定的Photo实例
30      * 
31      * @param photo
32      *            需要被持久化的Photo实例
33      * @return Photo实例被持久化后的标识属性值
34      */
35     Integer save(Photo photo);
36 
37     /**
38      * 修改指定的Photo实例
39      * 
40      * @param photo
41      *            需要被修改的Photo实例
42      */
43     void update(Photo photo);
44 
45     /**
46      * 删除指定的Photo实例
47      * 
48      * @param photo
49      *            需要被删除的Photo实例
50      */
51     void delete(Photo photo);
52 
53     /**
54      * 根据标识属性删除Photo实例
55      * 
56      * @param id
57      *            需要被删除的Photo实例的标识属性值
58      */
59     void delete(Integer id);
60 
61     /**
62      * 查询全部的Photo实例
63      * 
64      * @return 数据库中全部的Photo实例
65      */
66     List<Photo> findAll();
67 
68     /**
69      * 查询属于指定用户的相片,且进行分页控制
70      * 
71      * @param user
72      *            查询相片所属的用户
73      * @param pageNo
74      *            需要查询的指定页
75      * @return 查询到的相片
76      */
77     List<Photo> findByUser(User user, int pageNo);
78 }

/ajax_0500_jQuery_album/src/com/b510/album/dao/UserDao.java

 1 package com.b510.album.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.b510.album.model.User;
 6 
 7 
 8 /**
 9  * UserDao接口
10  * 
11  * @author Hongten
12  * 
13  */
14 public interface UserDao {
15     /**
16      * 根据标识属性来加载User实例
17      * 
18      * @param id
19      *            需要加载的User实例的标识属性值
20      * @return 指定标识属性对应的User实例
21      */
22     User get(Integer id);
23 
24     /**
25      * 持久化指定的User实例
26      * 
27      * @param user
28      *            需要被持久化的User实例
29      * @return User实例被持久化后的标识属性值
30      */
31     Integer save(User user);
32 
33     /**
34      * 修改指定的User实例
35      * 
36      * @param user
37      *            需要被修改的User实例
38      */
39     void update(User user);
40 
41     /**
42      * 删除指定的User实例
43      * 
44      * @param user
45      *            需要被删除的User实例
46      */
47     void delete(User user);
48 
49     /**
50      * 根据标识属性删除User实例
51      * 
52      * @param id
53      *            需要被删除的User实例的标识属性值
54      */
55     void delete(Integer id);
56 
57     /**
58      * 查询全部的User实例
59      * 
60      * @return 数据库中全部的User实例
61      */
62     List<User> findAll();
63 
64     /**
65      * 根据用户名查找用户
66      * 
67      * @param name
68      *            需要查找的用户的用户名
69      * @return 查找到的用户
70      */
71     User findByName(String name);
72 }

============================================================================================

由于放入jar包后,项目看起来比较大,所以这里就把jar包取消了,所需的jar包如下图:

下面是附件https://files.cnblogs.com/hongten/ajax_0500_jQuery_album.zip  (源码)

============================================================================================

原文地址:https://www.cnblogs.com/hongten/p/java_spring_hibernate_jquery.html