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="width: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             width: 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包如下圖:

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM