項目結構:
項目首頁:
注冊頁面:
上傳圖片:
效果圖一:
效果圖二:
效果圖三:
=============================================================
下面是代碼部分
=============================================================
需要用到的數據庫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%">密 碼: 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 <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 (源碼)
============================================================================================