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%">密 码: 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包如下图:
下面是附件:https://files.cnblogs.com/hongten/ajax_0500_jQuery_album.zip (源码)
============================================================================================