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


    项目结构:

    项目首页:

    注册页面:

    上传图片:

    效果图一:

    效果图二:

    效果图三:

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

    下面是代码部分

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

    需要用到的数据库SQL:

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

    /ajax_0500_jQuery_album/WebRoot/album.html

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

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

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

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

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

    /ajax_0500_jQuery_album/WebRoot/js/album.js

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    BZOJ2002 [HNOI2010] 弹飞绵羊
    BZOJ1030 [JSOI2007] 文本生成器
    BZOJ3233 [AHOI2013] 找硬币
    BZOJ4269 再见xor
    BZOJ5297 CQOI2018 社交网络
    LOJ149 0/1分数规划
    BZOJ2132 圈地计划
    UOJ131 [NOI2015] 品酒大会
    composer速度慢(composer更换国内镜像)
    thinkphp6安装报错,composer install tp6 报错 Parse error: syntax error
  • 原文地址:https://www.cnblogs.com/hongten/p/java_spring_hibernate_jquery.html
Copyright © 2020-2023  润新知