- •Содержание
- •1 Описание предметной области
- •Социальной сети «в общаге» и
- •Определение требований к системе с
- •Точки зрения предметной области
- •1.2 Определение требований к социальной сети «в Общаге»
- •1.3 Функциональная модель социальной сети «в Общаге»
- •2 Постановка задач и обзор методов её решения, спецификация вариантов использования «социальной сети»
- •3 Модели представления «социальной сети» и их
- •3.1.4 Диаграмма компонентов
- •3.1.5 Диаграмма развёртывания
- •3.2 Описание применения паттернов проектирования
- •3.3 Обоснование выбора технологии клиентского приложения
- •4 Информационная модель системы социальной сети «в общаге» и её описание
- •5 Обоснование использования фреймворков spring mvc, spring security, javaserver faces, библиотеки commonsfileupload
- •5.1 Обоснование использования фреймворка Spring mvc
- •5.2 Обоснование использования фреймворка Spring Security
- •5.3 Обоснование использования фреймворка JavaServer Faces
- •5.4 Обоснование использования библиотеки commons-fileupload
- •6 Описание алгоритмов реализующих бизнес-логику серверной части социальной сети «в общаге»
- •7 Руководство пользователя
- •8 Результаты тестирования разработанной cистемы и оценка выполнения задач
- •8.1 Тестирование разработанной системы
- •8.2 Оценка выполнения задач
- •Список используемых источников
- •Приложение а
- •Приложение в (обязательное) Листинг sql-скрипта, генерирующего базу данных
- •Приложение г (рекомендуемое) Листинг некоторых файлов, используемых для работы Spring mvc
5.3 Обоснование использования фреймворка JavaServer Faces
Для реализации страницы администратора использовался фреймворк JavaServer Faces (JSF). Это позволило избежать написания множественного кода страниц представления и бизнес-логики. Это сделал IDE (NetBeans). Страницы позволяют просматривать списки пользователей, сообщений, авторизаций. Также можно добавлять, удалять и изменять информацию в элементах списка. При просмотре подробной информации о пользователе просматривается список сообщений, которые пользователь отправил, или которые были отправлены пользователю. [7]
5.4 Обоснование использования библиотеки commons-fileupload
Необходимо было сделать загрузку фотографий. Для этого послужила библиотека commons-fileupload. Часть кода jsp:
<form action="Upload" method="post" enctype="multipart/form-data">
<div>
<input type="hidden" name="userName" value="<%out.print(request.getAttribute("userName"));%>">
<input name="file1" type="file">
<input type="submit" value="Обновить фотографию"><br>
</div>
</form>
Код сервлета:
import controller.MyContext;
import entity.Users;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import session.UsersFacadeRemote;
public class Upload extends HttpServlet {
String userName;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//проверяем является ли полученный запрос multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// Создаём класс фабрику
DiskFileItemFactory factory = new DiskFileItemFactory();
// Максимальный буфера данных в байтах,
// при его привышении данные начнут записываться на диск во временную директорию
// устанавливаем один мегабайт
factory.setSizeThreshold(1 * 1024 * 1024);
// устанавливаем временную директорию
File tempDir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
factory.setRepository(tempDir);
//Создаём сам загрузчик
ServletFileUpload upload = new ServletFileUpload(factory);
//максимальный размер данных который разрешено загружать в байтах
upload.setSizeMax(1024 * 1024 * 10);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
//если принимаемая часть данных является полем формы
userName = item.getString();
} else {
//в противном случае рассматриваем как файл
processUploadedFile(item);
}
}
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
getServletContext().getRequestDispatcher("/edit.htm").forward(request, response);
}
private void processUploadedFile(FileItem item) throws Exception {
//если если размер равен нулю
//скорее всего пользователь оставил поле пустым
//игнорируем его
if (item.getSize() == 0) {
return;
}
//в базу
UsersFacadeRemote uFR = (UsersFacadeRemote) MyContext.getContext().lookup("HostelServer/UsersFacade/remote");
Users user = uFR.find(userName);
user.setPhoto(item.get());
uFR.edit(user);
}
}
Комментарии автора кода сохранены. [13]