Структура проекта:
Домашняя страница проекта:
Страница регистрации:
Загрузить изображение:
Эффект на картинке один:
Эффект на картинке два:
Эффект третьего изображения:
=============================================== ===========
Ниже приведена часть кода
=============================================== ===========
Требуется SQL базы данных:
создать базу данных db_ajax;
используйте db_ajax;
создать таблицу user_table
(
user_id int auto_increment первичный ключ,
имя varchar(255) уникальное,
передать варчар(255)
);
создать таблицу photo_table
(
photo_id int auto_increment первичный ключ,
заголовок varchar(255),
имя_файла varchar(255),
Owner_id целое число,
внешний ключ (owner_id) ссылается на user_table (user_id)
);
<div id="uploadDiv" style="display:none">
<form action="proUpload" метод="post"
enctype="multipart/form-data">
<table cellpacing="1" cellpadding="10">
<caption>Загрузить изображения</caption>
<тр>
<td>Название изображения:</td>
<td><input id="title" name="title" type="text" /></td>
</tr>
<тр>
<td>Просмотр изображений:</td>
<td><input id="file" name="file" type="file" /></td>
</tr>
<тр>
<td colspan="2" align="center">
<input type="submit" value="Загрузить" />
<input type="reset" value="Reset" />
</td>
</tr>
</таблица>
</форма>
</div>
<div id="tipDiv" style="display:none">
</div>
</тело>
</html>
<!-- Настройте контейнер Spring для загрузки при запуске веб-приложения -->
<слушатель>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</слушатель>
<сервлет>
<servlet-name>proLogin</servlet-name>
<servlet-class>com.b510.album.web.ProLoginServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>proLogin</servlet-name>
<url-pattern>/proLogin</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>proRegist</servlet-name>
<servlet-class>com.b510.album.web.ProRegistServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>proRegist</servlet-name>
<url-pattern>/proRegist</url-pattern>
</сервлет-сопоставление>
<сервлет>
<имя-сервлета>validateName</имя-сервлета>
<servlet-class>com.b510.album.web.ValidateNameServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<имя-сервлета>validateName</имя-сервлета>
<url-pattern>/validateName</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>getPhoto</servlet-name>
<servlet-class>com.b510.album.web.GetPhotoServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>getPhoto</servlet-name>
<url-pattern>/getPhoto</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>showImg</servlet-name>
<servlet-class>com.b510.album.web.ShowImgServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>showImg</servlet-name>
<url-pattern>/showImg</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>pageLoad</servlet-name>
<servlet-class>com.b510.album.web.PageLoadServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>pageLoad</servlet-name>
<url-pattern>/pageLoad</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>turnPage</servlet-name>
<servlet-class>com.b510.album.web.TurnPageServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>turnPage</servlet-name>
<url-pattern>/turnPage</url-pattern>
</сервлет-сопоставление>
<сервлет>
<servlet-name>proUpload</servlet-name>
<servlet-class>com.b510.album.web.ProUploadServlet</servlet-class>
</сервлет>
<сопоставление сервлетов>
<servlet-name>proUpload</servlet-name>
<url-pattern>/proUpload</url-pattern>
</сервлет-сопоставление>
<список-приветственных-файлов>
<welcome-file>album.html</welcome-file>
</приветственный-список-файлов>
</веб-приложение>
<!-- Определить источник данных Bean, реализованный с использованием источника данных C3P0 -->
<bean id="dataSource" уничтожить-метод="закрыть"
>
<!-- Укажите драйвер для подключения к базе данных -->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!-- Укажите URL для подключения к базе данных -->
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3308/db_ajax"/>
<!-- Укажите имя пользователя для подключения к базе данных -->
<property name="user" value="root"/>
<!-- Укажите пароль для подключения к базе данных -->
<имя свойства="пароль" значение="корень"/>
<!--Укажите максимальное количество подключений к пулу подключений к базе данных-->
<property name="maxPoolSize" value="40"/>
<!-- Укажите минимальное количество подключений к пулу подключений к базе данных -->
<property name="minPoolSize" value="1"/>
<!-- Укажите количество первоначальных подключений к пулу подключений к базе данных -->
<property name="initialPoolSize" value="1"/>
<!-- Укажите максимальное время простоя для подключений к пулу подключений к базе данных -->
<property name="maxIdleTime" value="20"/>
</боб>
<!-- Определить SessionFactory Hibernate -->
<bean id="sessionFactory"
>
<!-- Источник данных внедрения зависимостей, внедрите источник данных, определенный выше -->
<property name="dataSource" ref="dataSource"/>
<!-- Атрибут MappingResouces используется для вывода списка всех файлов сопоставления -->
<property name="mappingResources">
<список>
<!-- Ниже приведен список файлов сопоставления Hibernate -->
<value>com/b510/album/model/User.hbm.xml</value>
<value>com/b510/album/model/Photo.hbm.xml</value>
</список>
</свойство>
<!-- Определите свойства SessionFactory Hibernate -->
<property name="hibernateProperties">
<реквизит>
<!--Укажите диалект базы данных-->
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect</prop>
<!-- Создавать ли базу данных автоматически каждый раз по мере необходимости -->
<prop key="hibernate.hbm2ddl.auto">обновление</prop>
<!-- Отобразить SQL, сгенерированный операцией сохранения Hibernate -->
<prop key="hibernate.show_sql">истина</prop>
<!-- Отформатируйте сценарий SQL и затем выведите его -->
<prop key="hibernate.format_sql">истина</prop>
</реквизит>
</свойство>
</боб>
<!-- Настройка компонента UserDao -->
<bean id="userDao"
>
<!--Внедрить ссылку SessionFactory-->
<property name="sessionFactory" ref="sessionFactory"/>
</боб>
<!-- Настройка компонента PhotoDao -->
<bean id="photoDao"
>
<property name="sessionFactory" ref="sessionFactory"/>
</боб>
<!-- Настройка компонента бизнес-логики albumService -->
<bean id="albumService"
>
<!-- Внедрить 2 компонента DAO в компонент бизнес-логики -->
<property name="userDao" ref="userDao"/>
<property name="photoDao" ref="photoDao"/>
</боб>
<!-- Настройте локальный менеджер транзакций Hibernate, используйте класс HibernateTransactionManager -->
<!-- Этот класс реализует интерфейс PlatformTransactionManager, который является специальной реализацией Hibernate -->
<bean id="transactionManager"
>
<!-- При настройке HibernateTransactionManager вам необходимо добавить ссылку на SessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</боб>
<!-- Настройте аспект транзакции Bean и укажите менеджер транзакций -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- Используется для настройки подробной семантики транзакции-->
<TX:атрибуты>
<!-- Все методы, начинающиеся с 'get', доступны только для чтения -->
<tx:имя метода="get*" только для чтения="true"/>
<!-- Другие методы используют настройки транзакции по умолчанию -->
<tx:имя метода="*"/>
</tx:атрибуты>
</tx:совет>
<аоп:конфигурация>
<!-- Настройте pointcut для соответствия всем методам, выполняемым всеми классами, заканчивающимися на Impl в пакете lee -->
<aop:pointcut id="leeService"
выражение="выполнение(* com.b510.album.service.impl.*Impl.*(..))"/>
<!-- Укажите, чтобы применить аспект транзакции txAdvice в точке входа leeService -->
<aop:advisor Advisor-ref="txAdvice"
pointcut-ref="leeService"/>
</aop:config>
</фасоль>
сброс функции()
{
//Очищаем два однострочных текстовых поля пользователя и передаем
$("#user").val("");
$("#pass").val("");
}
//Переходим в диалоговое окно регистрации
функция измененияРегиста()
{
//Скрываем две кнопки для входа
$("#loginDiv").hide("500");
//Отображение двух кнопок для регистрации
$("#registDiv").show("500");
}
//Функция для обработки входа пользователя
функция проЛогин()
{
//Получаем значения двух текстовых полей пользователя и передаем
var user = $.trim($("#user").val());
var pass = $.trim($("#pass").val());
если (пользователь == ноль || пользователь == ""
|| пройти == ноль|| пройти == "")
{
alert("Прежде чем войти в систему, необходимо ввести имя пользователя и пароль");
вернуть ложь;
}
еще
{
//Отправляем асинхронный POST-запрос в proLogin
$.post("proLogin", $('#user,#pass').serializeArray()
, ноль, «скрипт»);
}
}
//Функция, обрабатывающая регистрацию пользователя
функцияregist()
{
//Получаем значения двух текстовых полей пользователя и передаем
var user = $.trim($("#user").val());
var pass = $.trim($("#pass").val());
if (user == null || user == "" || pass == null || pass =="")
{
alert("Перед регистрацией необходимо ввести имя пользователя и пароль");
вернуть ложь;
}
еще
{
//Отправляем асинхронный POST-запрос в proRegist
$.post("proRegist", $('#user,#pass').serializeArray()
, ноль, «скрипт»);
}
}
//Проверяем, доступно ли имя пользователя
функция проверкиИмя()
{
//Получаем значение пользовательского текстового поля
var user = $.trim($("#user").val());
если (пользователь == ноль || пользователь == "")
{
alert("Вы еще не ввели свое имя пользователя!");
вернуть ложь;
}
еще
{
//Отправляем асинхронный запрос POST на validateName
$.post("validateName", $('#user').serializeArray()
, ноль, «скрипт»);
}
}
// Периодически получаем фотографии текущего пользователя и текущей страницы
функция onLoadHandler()
{
//Отправляем асинхронный запрос GET на getPhoto
$.getScript("getPhoto");
//Выполним этот метод еще раз после указания 1 секунды
setTimeout("onLoadHandler()", 1000);
}
//показываем фотографии
функция showImg(имя_файла)
{
$.getScript("showImg?img=" + имя_файла);
// document.getElementById("show").src="uploadfiles/" + fileName + "?now=" + new Date();
// $("#show").attr("src" , "uploadfiles/" + fileName);
}
//Функция для обработки перелистывания страниц
функция TurnPage (флаг)
{
$.getScript("turnPage?turn=" + флаг);
}
//Открываем окно загрузки
функция openUpload()
{
$("#uploadDiv").show()
.диалог(
{
модальное: правда,
изменяемый размер: ложь,
ширина: 428,
высота: 220,
наложение: {непрозрачность: 0,5, фон: «черный»}
});
}
импортировать javax.servlet.ServletConfig;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServlet;
импортировать org.springframework.context.ApplicationContext;
импортировать org.springframework.web.context.support.WebApplicationContextUtils;
импортировать com.b510.album.service.AlbumService;
/**
*
* @author Хонгтен
*
*/
публичный класс BaseServlet расширяет HttpServlet {
частный статический окончательный длинный сериалVersionUID = -2041755371540813745L;
защищенный AlbumService как;
//Определяем конструктор и получаем ссылку на контейнер Spring
public void init (конфигурация ServletConfig) выдает ServletException {
super.init(конфигурация);
ApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
as = (AlbumService) ctx.getBean("albumService");
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
общественный класс ValidateNameServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = 9038839276327742641L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Имя строки = request.getParameter("пользователь");
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
пытаться {
если (имя!= ноль) {
если (as.validateName(имя)) {
out.println("alert('Поздравляем, это имя пользователя еще не использовалось, вы можете использовать это имя пользователя!');");
} еще {
out.println("alert('К сожалению, это имя пользователя уже занято кем-то другим!');");
out.println("$('#user').val('');");
}
} еще {
out.println("alert('При проверке имени пользователя произошло исключение, измените имя пользователя и повторите попытку!');");
}
} catch (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "Пожалуйста, измените свое имя пользователя и повторите попытку!');");
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать java.util.List;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.vo.PhotoHolder;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
публичный класс TurnPageServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = -5097286750384714951L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Строка поворот = request.getParameter("поворот");
Сеанс HttpSession = request.getSession(true);
Имя строки = (String) session.getAttribute("curUser");
Объект pageObj = session.getAttribute("curPage");
// Если curPage в HttpSession имеет значение null, установите текущую страницу на первую.
int curPage = pageObj == null 1: (Целое число) pageObj;
response.setContentType("text/javascript;charset=GBK");
PrintWriter out = response.getWriter();
if (curPage == 1 && Turn.equals("-1")) {
out.println("alert('Сейчас первая страница, перемотка вперед невозможна!')");
} еще {
// Выполняем перелистывание страниц и изменяем значение curPage.
curPage += Integer.parseInt(поворот);
пытаться {
List<PhotoHolder> photos = as.getPhotoByUser(name, curPage);
// После перелистывания страницы нет записи
если (photos.size() == 0) {
out.println("alert('После перелистывания страницы фото не найдено, система автоматически вернется на предыдущую страницу')");
//Вернемся на предыдущую страницу
curPage -= Integer.parseInt(поворот);
} еще {
//Помещаем номер страницы, которую просматривает пользователь, в HttpSession
session.setAttribute("curPage", curPage);
}
} catch (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "Пожалуйста, попробуйте еще раз!')");
}
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
публичный класс ShowImgServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = 1460203270448078666L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Строка img = request.getParameter("img");
Сеанс HttpSession = request.getSession(true);
//Помещаем изображение, которое просматривает пользователь, в HttpSession.
session.setAttribute("curImg", img);
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
out.println("$('#show').attr('src', 'uploadfiles/" + img + "');");
}
}
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать java.io.InputStream;
импортировать java.io.PrintWriter;
импортировать java.util.Iterator;
импортировать java.util.List;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать org.apache.commons.fileupload.FileItem;
импортировать org.apache.commons.fileupload.FileItemFactory;
импортировать org.apache.commons.fileupload.FileUploadException;
импортировать org.apache.commons.fileupload.disk.DiskFileItemFactory;
импортировать org.apache.commons.fileupload.servlet.ServletFileUpload;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
@SuppressWarnings («не отмечено»)
публичный класс ProUploadServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = 642229801989188793L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Итератор iter = null;
Название строки = ноль;
response.setContentType("text/html;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
out.println("<тип сценария='text/javascript>'");
пытаться {
//Используем Uploader для обработки загрузок
Фабрика FileItemFactory = новый DiskFileItemFactory ();
Загрузка ServletFileUpload = новый ServletFileUpload (фабрика);
Элементы списка = upload.parseRequest(запрос);
итер = items.iterator();
// Обход содержимого, соответствующего каждому элементу управления формой
в то время как (iter.hasNext()) {
Элемент FileItem = (FileItem) iter.next();
// Если элемент является полем обычной формы
если (item.isFormField()) {
Имя строки = item.getFieldName();
if (name.equals("title")) {
title = item.getString("GBK");
}
}
// Если это файл, который необходимо загрузить
еще {
Строка пользователя = (String) request.getSession().getAttribute(
«curUser»);
Строка имя_сервера = ноль;
//возвращаем имя файла
Строка fileName = item.getName();
// Получаем суффикс файла
Строка appden = имя_файла.подстрока(имя_файла
.lastIndexOf("."));
//возвращаем тип файла
Строка contentType = item.getContentType();
// Разрешено загружать только изображения в формате jpg, gif и png
если (contentType.equals("изображение/pjpeg")
|| contentType.equals("изображение/гиф")
|| contentType.equals("изображение/jpeg")
|| contentType.equals("изображение/ПНГ")) {
Входной поток ввода = item.getInputStream();
имя_сервера = String.valueOf(Система
.currentTimeMillis());
Выход FileOutputStream = новый FileOutputStream(
getServletContext().getRealPath("/")
+ "uploadfiles//" + имя_сервера
+ приложение);
буфер байт[] = новый байт[1024];
интервал лен = 0;
while ((len = input.read(buffer)) > 0) {
output.write(буфер, 0, длина);
}
ввод.закрыть();
вывод.закрыть();
as.addPhoto(пользователь, заголовок, имя_сервера + приложение);
response.sendRedirect("album.html?resultCode=0");
} еще {
response.sendRedirect("album.html?resultCode=1");
}
}
}
} catch (FileUploadException fue) {
fue.printStackTrace();
response.sendRedirect("album.html?resultCode=2");
} catch (AlbumException ex) {
ex.printStackTrace();
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
общественный класс ProRegistServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = -3174994243043815566L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Имя строки = request.getParameter("пользователь");
Строка pass = request.getParameter("pass");
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
пытаться {
out.println("$('#user,#pass').val('');");
if (name != null && pass != null && as.registUser(name, pass) > 0) {
Сеанс HttpSession = request.getSession(true);
session.setAttribute("curUser", name);
out.println("alert('Поздравляем, вы успешно зарегистрировались!');");
out.println("$('#noLogin').hide(500);");
out.println("$('#hasLogin').show(500);");
//Вызов метода для получения списка фотографий
out.println("onLoadHandler();");
} еще {
out.println("alert('Ваша регистрация не удалась, выберите подходящее имя пользователя и повторите попытку!');");
}
} catch (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "Пожалуйста, измените свое имя пользователя и повторите попытку!');");
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
публичный класс ProLoginServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = -1253530202224049958L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Имя строки = request.getParameter("пользователь");
Строка pass = request.getParameter("pass");
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
пытаться {
// Очищаем содержимое полей ввода с идентификаторами пользователя и передаем
out.println("$('#user,#pass').val('');");
if (name != null && pass != null && as.userLogin(name, pass)) {
Сеанс HttpSession = request.getSession(true);
session.setAttribute("curUser", name);
out.println("alert('Вы успешно вошли в систему!')");
out.println("$('#noLogin').hide(500)");
out.println("$('#hasLogin').show(500)");
//Вызов метода для получения списка фотографий
out.println("onLoadHandler();");
} еще {
out.println("alert('Введенные вами имя пользователя и пароль не совпадают, попробуйте еще раз!')");
}
} catch (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "Пожалуйста, измените имя пользователя и пароль и повторите попытку!')");
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
общественный класс PageLoadServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = 7512001492425261841L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
Сеанс HttpSession = request.getSession(true);
Имя строки = (String) session.getAttribute("curUser");
// Если имя не равно нулю, это означает, что пользователь вошел в систему
если (имя!= ноль) {
//Скрываем элемент с id noLogin (панель входа пользователя)
out.println("$('#noLogin').hide()");
//Скрываем элемент с идентификатором hasLogin (Панель управления пользователем)
out.println("$('#hasLogin').show()");
//Вызов метода для получения списка фотографий
out.println("onLoadHandler();");
// Удаляем атрибут curImg в HttpSession
String curImg = (String) session.getAttribute("curImg");
//Повторно отображаем фотографию, которую просматривает пользователь
если (curImg != ноль) {
out.println("$('#show').attr('src', 'uploadfiles/" + curImg
+ "');");
}
}
}
}
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать java.util.List;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать javax.servlet.http.HttpSession;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.vo.PhotoHolder;
импортировать com.b510.album.web.base.BaseServlet;
/**
*
* @author Хонгтен
*
*/
публичный класс GetPhotoServlet расширяет BaseServlet {
частный статический окончательный длинный сериалVersionUID = -8380695760546582385L;
общедоступная служба void (запрос HttpServletRequest, ответ HttpServletResponse)
выдает IOException, ServletException {
Сеанс HttpSession = request.getSession(true);
// Получаем текущий номер страницы текущего пользователя и список фотографий системы из HttpSession
Имя строки = (String) session.getAttribute("curUser");
Объект pageObj = session.getAttribute("curPage");
// Если curPage в HttpSession имеет значение null, установите текущую страницу на первую.
int curPage = pageObj == null 1: (Целое число) pageObj;
response.setContentType("text/javascript;charset=GBK");
// Получаем выходной поток
PrintWriter out = response.getWriter();
пытаться {
List<PhotoHolder> photos = as.getPhotoByUser(name, curPage);
// Очищаем элемент с идентификатором списка
out.println("var list = $('#list').empty();");
для (PhotoHolder тел.: фотографии) {
// Динамически добавляем каждую фотографию в элемент с идентификатором списка
out.println("list.append(/"<div align='center'>"
+ "<a href='javascript:void(0)' onclick=///"showImg('"
+ ph.getFileName() + "');///">" + ph.getTitle()
+ "</a></div>/");");
}
} catch (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "Пожалуйста, попробуйте еще раз!')");
}
}
}
/**
*
* @author Хонгтен
*
*/
публичный класс PhotoHolder {
//Название фотографии
частный заголовок строки;
//Имя файла фотографии на сервере
частная строка имя_файла;
// Конструктор без параметров
публичный PhotoHolder() {
}
// Конструктор для инициализации всех свойств
public PhotoHolder (String title, String fileName) {
this.title = заголовок;
это.ИмяФайла = ИмяФайла;
}
//Методы установки и получения атрибута title
public void setTitle(String title) {
this.title = заголовок;
}
публичная строка getTitle() {
вернуть это.title;
}
//Методы установки и получения атрибута fileName
public void setFileName (String fileName) {
это.ИмяФайла = ИмяФайла;
}
публичная строка getFileName() {
вернуть это.имя_файла;
}
}
импортировать java.util.ArrayList;
импортировать java.util.List;
импортировать com.b510.album.dao.PhotoDao;
импортировать com.b510.album.dao.UserDao;
импортировать com.b510.album.Exception.AlbumException;
импортировать com.b510.album.model.Photo;
импортировать com.b510.album.model.User;
импортировать com.b510.album.service.AlbumService;
импортировать com.b510.album.vo.PhotoHolder;
/**
*
* @author Хонгтен
*
*/
публичный класс AlbumServiceImpl реализует AlbumService {
// 2 компонента DAO, от которых зависит компонент бизнес-логики
частный UserDao ud = null;
частный PhotoDao pd = null;
// Внедрение зависимостей методов установки, необходимых для двух компонентов DAO
общественная недействительность setUserDao (UserDao ud) {
это.уд = уд;
}
public void setPhotoDao(PhotoDao pd) {
this.pd = ПД;
}
/**
* Проверьте, успешен ли вход пользователя в систему.
*
* @имя параметра
* Имя пользователя для входа
* @param пропуск
* Пароль для входа
* @return Результат входа пользователя в систему, в случае успеха возвращает true, в противном случае возвращает false.
*/
public boolean userLogin (имя строки, проход строки) {
пытаться {
// Используйте UserDao для запроса пользователей по имени пользователя
Пользователь u = ud.findByName(имя);
if (u != null && u.getPass().equals(pass)) {
вернуть истину;
}
вернуть ложь;
} catch (исключение ex) {
ex.printStackTrace();
throw new AlbumException("Произошло исключение при обработке входа пользователя!");
}
}
/**
* Зарегистрировать нового пользователя
*
* @имя параметра
* Имя пользователя вновь зарегистрированного пользователя
* @param пропуск
* Пароль для вновь зарегистрированных пользователей
* @return первичный ключ вновь зарегистрированного пользователя
*/
public int RegistUser (имя строки, проход строки) {
пытаться {
//Создаем новый экземпляр пользователя
Пользователь u = новый пользователь();
u.setName(имя);
u.setPass(пройти);
// Сохраняем объект пользователя
ud.save (и);
вернуть u.getId();
} catch (исключение ex) {
ex.printStackTrace();
throw new AlbumException("Во время регистрации нового пользователя произошло исключение!");
}
}
/**
* Добавить фотографии
*
* Пользователь @param
* Пользователь, добавивший фото
* @param заголовок
* Добавьте название к своей фотографии
* @param имя_файла
* Добавить имя файла фотографии на сервере
* @return Первичный ключ вновь добавленной фотографии.
*/
public int addPhoto(String user, String title, String fileName) {
пытаться {
//Создаем новый экземпляр фотографии
Фотография p = новая фотография();
p.setTitle(заголовок);
p.setFileName(имя_файла);
p.setUser(ud.findByName(пользователь));
// Экземпляр постоянной фотографии
пд.сохранить (р);
вернуть p.getId();
} catch (исключение ex) {
ex.printStackTrace();
throw new AlbumException("При добавлении фотографий произошло исключение!");
}
}
/**
* Получить все фотографии пользователя на основе пользователя
*
* Пользователь @param
* Текущий пользователь
* @param страницаНет
*Номер страницы
* @return Возвращает фотографии, принадлежащие пользователю и указанной странице.
*/
public List<PhotoHolder> getPhotoByUser (String user, int pageNo) {
пытаться {
List<Photo> pl = pd.findByUser(ud.findByName(user), pageNo);
Результат List<PhotoHolder> = новый ArrayList<PhotoHolder>();
за (Фото р : пл) {
result.add(new PhotoHolder(p.getTitle(), p.getFileName()));
}
вернуть результат;
} catch (исключение ex) {
ex.printStackTrace();
throw new AlbumException("При запросе списка фотографий произошло исключение!");
}
}
/**
* Проверьте, доступно ли имя пользователя, то есть существует ли имя пользователя уже в базе данных.
*
* @имя параметра
* Имя пользователя, которое необходимо подтвердить
* @return Возвращает true, если имя пользователя доступно, в противном случае возвращает false.
*/
общедоступное логическое значение validateName (имя строки) {
пытаться {
// Запрос соответствующего экземпляра пользователя на основе имени пользователя
Пользователь u = ud.findByName(имя);
если (и != ноль) {
вернуть ложь;
}
вернуть истину;
} catch (исключение ex) {
ex.printStackTrace();
throw new AlbumException("Во время проверки существования имени пользователя произошло исключение!");
}
}
}
импортировать java.util.List;
импортировать com.b510.album.vo.PhotoHolder;
/**
*
* @author Хонгтен
*
*/
общедоступный интерфейс AlbumService {
/**
* Проверьте, успешен ли вход пользователя в систему.
*
* @имя параметра
* Имя пользователя для входа
* @param пропуск
* Пароль для входа
* @return Результат входа пользователя в систему, в случае успеха возвращает true, в противном случае возвращает false.
*/
логическое значение userLogin (имя строки, проход строки);
/**
* Зарегистрировать нового пользователя
*
* @имя параметра
* Имя пользователя вновь зарегистрированного пользователя
* @param пропуск
* Пароль для новых зарегистрированных пользователей
* @return первичный ключ вновь зарегистрированного пользователя
*/
int RegisterUser (имя строки, проход строки);
/**
* Добавить фотографии
*
* Пользователь @param
* Пользователь, добавивший фото
* @param заголовок
* Добавьте название к своей фотографии
* @param имя_файла
* Добавить имя файла фотографии на сервере
* @return Первичный ключ вновь добавленной фотографии.
*/
int addPhoto (пользователь String, заголовок String, имя файла String);
/**
* Получить все фотографии пользователя на основе пользователя
*
* Пользователь @param
* Текущий пользователь
* @param страницаНет
*Номер страницы
* @return Возвращает фотографии, принадлежащие пользователю и указанной странице.
*/
List<PhotoHolder> getPhotoByUser (String user, int pageNo);
/**
* Проверьте, доступно ли имя пользователя, то есть существует ли имя пользователя уже в базе данных.
*
* @имя параметра
* Имя пользователя, которое необходимо подтвердить
* @return Возвращает true, если имя пользователя доступно, в противном случае возвращает false.
*/
логическое validateName (имя строки);
}
/**
* Класс объекта фотографии.
*
* @author Хонгтен
*
*/
общественный класс Фото {
//Атрибут идентификации
частный целочисленный идентификатор;
//Название фотографии
частный заголовок строки;
//Имя файла фотографии на сервере
частная строка имя_файла;
// Сохраняем пользователя, которому принадлежит фотография
частный пользователь;
// Конструктор без параметров
общедоступное фото() {
}
// Конструктор для инициализации всех свойств
public Photo (Целый идентификатор, Строковое название, Строковое имя файла, Пользователь) {
this.id = идентификатор;
this.title = заголовок;
this.filename = имя файла;
this.user = user;
}
// методы сеттера и получения атрибута идентификатора атрибута
public void setId (INTEGER ID) {
this.id = идентификатор;
}
public integer getId () {
вернуть это.id;
}
// методы сеттера и получения атрибута заголовка
public void settitle (название строки) {
this.title = заголовок;
}
public String getTitle () {
вернуть это.title;
}
// методы сеттера и получения атрибута атрибута файла
public void setFileName (String filename) {
this.filename = имя файла;
}
public String getFilename () {
вернуть это. filename;
}
// методы сеттера и получения атрибута пользователя
public void setuser (пользователь пользователя) {
this.user = user;
}
Общественный пользователь getUser () {
вернуть это. User;
}
}
импортировать java.util.set;
импортировать java.util.hashset;
/**
* Класс объектов пользователя
*
* @author Хонгтен
*
*/
Пользователь открытого класса {
// идентификационный атрибут
частное целочисленное идентификатор;
// Имя пользователя пользователя
частное имя строки;
// пароль этого пользователя
частный проход строки;
// Использование SET для сохранения фотографий, связанных с этим пользователем
Private Set <fhoto> Photo = New Hashset <photo> ();
// конструктор без параметров
public user () {
}
// Конструктор для инициализации всех свойств
Общественный пользователь (INTEGER ID, String Name, String Pass) {
this.id = идентификатор;
это.имя = имя;
this.pass = pass;
}
// методы сеттера и получения атрибута идентификатора атрибута
public void setId (INTEGER ID) {
this.id = идентификатор;
}
public integer getId () {
вернуть это.id;
}
// Атрибут сеттера и получения атрибута имени
public void setName (имя строки) {
это.имя = имя;
}
публичная строка getName() {
вернуть это.имя;
}
// Сеттер и методы получения атрибута атрибута
public void SetPass (String Pass) {
this.pass = pass;
}
public String getPass () {
вернуть это.pass;
}
// Атрибут сеттера и получения атрибутов
public void setphotos (set <fother> photos) {
this.photos = photos;
}
public Set <fother> getPhotos () {
вернуть это.photos;
}
}
/**
*Индивидуальное исключение
*
* @author Хонгтен
*
*/
открытый класс Albumexception расширяет Runtimeexception {
Частный статический последний длинный серийный режим = 8050756054850450421L;
// Предоставьте конструктор без параметра
public Albumexception () {
}
// Предоставление конструктора со строковыми параметрами
public Albumexception (String msg) {
Super (MSG);
}
}
импортировать java.sql.SQLException;
импортировать java.util.List;
импортировать org.hibernate.HibernateException;
Импорт org.hibernate.query;
Импорт org.hibernate.session;
Импорт org.springframework.orm.hibernate3.hibernatecallback;
импорт org.springframework.orm.hibernate3.support.hibernatedaosupport;
/**
*
* @author Хонгтен
*
*/
@Suppresswarnings ("не контролировано")
открытый класс HongtenbernatedAosupport расширяет hibernatedaosupport {
/**
* Используйте операторы HQL для операций за запрос под пейджинг
*
* @param hql
* Запись HQL для запроса
* @param offset
* Индекс первой записи
* @param PageSize
*Количество записей, которые будут отображаться на каждой странице
* @return Все записи текущей страницы
*/
публичный список FindByPage (Final String HQL, Final Int Offset,
final int pageSize) {
Список списка = gethibernateTemplate (). ExecuteFind (new hibernatecallback () {
Public Object DoInhibernate (сеанс)
бросает hibernateexception, sqlexception {
СПИСОК РЕЗУЛЬТАТ = SESSION.CREATEQUERY (HQL) .SetFirstresult (Offset)
.setMaxResults (pageSize) .list ();
вернуть результат;
}
});
список возврата;
}
/**
* Используйте операторы HQL для операций за запрос под пейджинг
*
* @param hql
* Запись HQL для запроса
* значение @param
* Если HQL имеет параметр, который необходимо передать, значение - это параметр, переданный.
* @param offset
* Индекс первой записи
* @param PageSize
*Количество записей, которые будут отображаться на каждой странице
* @return Все записи текущей страницы
*/
публичный список FindByPage (окончательная строка HQL, конечное значение объекта,
Окончательный int смещен, окончательный int pagesize) {
Список списка = gethibernateTemplate (). ExecuteFind (new hibernatecallback () {
Public Object DoInhibernate (сеанс)
бросает hibernateexception, sqlexception {
СПИСОК РЕЗУЛЬТАТ = SESSEON.Createeceery (HQL) .SetParameter (0, значение)
.setFirStresult (Offset) .setMaxResults (pageSize) .list ();
вернуть результат;
}
});
список возврата;
}
/**
* Используйте операторы HQL для операций за запрос под пейджинг
*
* @param hql
* Запись HQL для запроса
* @param значения
* Если HQL имеет несколько параметров, которые необходимо передавать, значения - это массив параметров, передаваемые.
* @param offset
* Индекс первой записи
* @param PageSize
*Количество записей, которые будут отображаться на каждой странице
* @return Все записи текущей страницы
*/
публичный список FindByPage (Final String HQL, Final Object [] Значения,
Окончательный int смещен, окончательный int pagesize) {
Список списка = gethibernateTemplate (). ExecuteFind (new hibernatecallback () {
Public Object DoInhibernate (сеанс)
бросает hibernateexception, sqlexception {
Query Query = session.createequery (hql);
для (int i = 0; i <values.length; i ++) {
Query.setParameter (i, значения [i]);
}
Список результата = Query.SetFirStresult (Offset) .SetMaxResults (
PageSize) .list ();
вернуть результат;
}
});
список возврата;
}
}
импортировать java.util.List;
Импорт com.b510.album.dao.photodao;
Импорт com.b510.album.enhance.hongtenhibernatedaosupport;
Импорт com.b510.album.model.photo;
Импорт com.b510.album.model.user;
/**
*
* @author Хонгтен
*
*/
@Suppresswarnings ("не контролировано")
Public Class Photodaohibernate расширяет HongtenbernatedAosupport Refrents
Photodao {
/**
* Загрузите экземпляр фотографии на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра фото, которое необходимо загрузить
* @return экземпляр фотографии, соответствующий указанному атрибуту идентификации
*/
public photo get (integer id) {
вернуть (фото) gethibernateTemplate (). get (photo.class, id);
}
/**
* Сохраняет указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо сохранить
* @return Значение атрибута Identity после того, как экземпляр фотографии сохранится
*/
Public Integer Save (фото фото) {
return (integer) gethibernateTemplate (). Сохранить (фото);
}
/**
* Измените указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо изменить
*/
Обнаружение Public void (Photo Photo) {
gethibernateTemplate (). Обновление (фото);
}
/**
* Удалить указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо удалить
*/
public void Delete (фото фото) {
gethibernateTemplate (). удалить (фото);
}
/**
* Удалить экземпляр фотографии на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра фото, которое необходимо удалить
*/
public void delete (целочисленный идентификатор) {
gethibernateTemplate (). Delete (get (id));
}
/**
* Запрос всех фотографий
*
* @return все экземпляры фото в базе данных
*/
Общедоступный список <fhoto> findall () {
return (list <fhoto>) gethibernateTemplate (). Найти ("From Photo");
}
/**
* Фотографии запроса, принадлежащие указанным пользователям и выполняют управление пейджингом
*
* @param пользователь
* Запрос пользователя, чья фотография принадлежит
* @param pageno
*Указанная страница, которая будет заправлена
* @return запрашиваемое фото
*/
Общедоступный список
int offset = (pageno - 1) * page_size;
// Возврат результаты запроса подкачки
return (list <photo>) findbypage ("с фото b, где b.user =?", пользователь,
Offset, page_size);
}
}
импортировать java.util.List;
Импорт com.b510.album.dao.userdao;
Импорт com.b510.album.enhance.hongtenhibernatedaosupport;
Импорт com.b510.album.model.user;
/**
*
* @author Хонгтен
*
*/
@Suppresswarnings ("не контролировано")
Общедоступный класс пользовательский
Userdao {
/**
* Загрузите экземпляр пользователя на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра пользователя, которое необходимо загрузить
* @return Encement пользователя, соответствующий указанному атрибуту идентификации
*/
общедоступный пользователь (INTEGER ID) {
return (пользователь) gethibernateTemplate (). get (user.class, id);
}
/**
* Сохраняет указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо сохранить
* @return Значение атрибута Identity после того, как экземпляр пользователя сохранится
*/
Public Integer Save (пользователь пользователя) {
return (integer) gethibernateTemplate (). Сохранить (пользователь);
}
/**
* Измените указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо изменить
*/
public void update (пользователь пользователя) {
GethibernateTemplate (). Обновление (пользователь);
}
/**
* Удалить указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо удалить
*/
public void delete (пользователь пользователя) {
gethibernateTemplate (). удалить (пользователь);
}
/**
* Удалить экземпляр пользователя на основе атрибута идентификации
*
* @param id
* Идентификационное значение атрибута экземпляра пользователя, которое необходимо удалить
*/
public void delete (целочисленный идентификатор) {
gethibernateTemplate (). Delete (get (id));
}
/**
* Запрос всех экземпляров пользователей
*
* @return Все экземпляры пользователей в базе данных
*/
Общедоступный список <user> findall () {
return (список <user>) gethibernateTemplate (). Найти ("от пользователя");
}
/**
* Найти пользователей на основе имени пользователя
*
* @param имя
* Имя пользователя, которое можно найти
* @return найденного пользователя
*/
public user findbyname (string name) {
Список <user> users = (list <user>) gethibernatetemplate (). Найти (
"От пользователя u, где u.name =?", имя);
if (users! = null && users.size () == 1) {
return users.get (0);
}
вернуть ноль;
}
}
импортировать java.util.List;
Импорт com.b510.album.model.photo;
Импорт com.b510.album.model.user;
/**
* Интерфейс PhotoDao
*
* @author Хонгтен
*
*/
публичный интерфейс PhotoDao {
// Использовать константы для управления количеством фотографий, отображаемых на каждой странице
final int page_size = 8;
/**
* Загрузите экземпляр фотографии на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра фото, которое необходимо загрузить
* @return экземпляр фотографии, соответствующий указанному атрибуту идентификации
*/
Фото получить (целочисленный идентификатор);
/**
* Сохраняет указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо сохранить
* @return Значение атрибута Identity после того, как экземпляр фотографии сохранится
*/
Integer Save (фото фото);
/**
* Измените указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо изменить
*/
Обновление void (фото фото);
/**
* Удалить указанный экземпляр фотографии
*
* @param фото
* Фото экземпляр, который необходимо удалить
*/
void удаление (фото фото);
/**
* Удалить экземпляр фотографии на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра фото, которое необходимо удалить
*/
void delete (INTEGER ID);
/**
* Запрос всех фотографий
*
* @return все экземпляры фото в базе данных
*/
Список <fhoto> findall ();
/**
* Фотографии запроса, принадлежащие указанным пользователям и выполняют управление пейджингом
*
* @param пользователь
* Запрос пользователя, чья фотография принадлежит
* @param pageno
*Указанная страница, которая будет заправлена
* @return запрашиваемое фото
*/
Список <Photo> findByuser (пользователь пользователя, int pageno);
}
импортировать java.util.List;
Импорт com.b510.album.model.user;
/**
* Userdao interface
*
* @author Хонгтен
*
*/
публичный интерфейс userdao {
/**
* Загрузите экземпляр пользователя на основе атрибута идентификации
*
* @param id
* Значение атрибута идентификации экземпляра пользователя, которое необходимо загрузить
* @return Encement пользователя, соответствующий указанному атрибуту идентификации
*/
Пользователь Get (INTEGER ID);
/**
* Сохраняет указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо сохранить
* @return Значение атрибута Identity после того, как экземпляр пользователя сохранится
*/
Integer Save (пользователь пользователя);
/**
* Измените указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо изменить
*/
void update (пользователь пользователя);
/**
* Удалить указанный экземпляр пользователя
*
* @param пользователь
* Экземпляр пользователя, который необходимо удалить
*/
void delete (пользователь пользователя);
/**
* Удалить экземпляр пользователя на основе атрибута идентификации
*
* @param id
* Идентификационное значение атрибута экземпляра пользователя, которое необходимо удалить
*/
void delete (INTEGER ID);
/**
* Запрос всех экземпляров пользователей
*
* @return все экземпляры пользователей в базе данных
*/
Список <user> findall ();
/**
* Найти пользователей на основе имени пользователя
*
* @param имя
* Имя пользователя, которое можно найти
* @return найденного пользователя
*/
Пользователь findbyname (string name);
}
Поскольку проект выглядит относительно большим после добавления пакета JAR, пакет JAR отменяется здесь.
Ниже приведено вложение : AJAX_JQUERY_ALBUM_JB51NET.RAR (загрузка исходного кода)