项目结构:
项目首页:
注册页面:
上传图片:
效果图一:
效果图二:
效果图三:
=============================================================
下面是代码部分
=============================================================
需要用到的数据库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 (源码)
============================================================================================