- •Содержание
- •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
Приложение г (рекомендуемое) Листинг некоторых файлов, используемых для работы Spring mvc
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>servlet.Upload</servlet-class>
</servlet>
<servlet>
<servlet-name>Foto</servlet-name>
<servlet-class>servlet.Foto</servlet-class>
</servlet>
<servlet>
<servlet-name>Delete</servlet-name>
<servlet-class>servlet.Delete</servlet-class>
</servlet>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/Upload</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Foto</servlet-name>
<url-pattern>/Foto</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Delete</servlet-name>
<url-pattern>/Delete</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/faces/welcomeJSF.jsp</welcome-file>
</welcome-file-list>
</web-app>
dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="controller.PersonController" />
<bean class="controller.RegController" p:regService-ref="regService"/>
<bean class="controller.EditController" p:editService-ref="editService"/>
<bean class="controller.MessageController" />
<bean class="controller.FotoController" />
<bean class="controller.FindController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="login.htm">indexController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
</beans>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean name="regService" class="service.RegService" />
<bean name="editService" class="service.EditService" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://127.0.0.1:3306/vobschage"
p:username="root"
p:password="12345" />
</beans>
MessageController.java
import entity.Messages;
import entity.MessagesPK;
import java.util.Date;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import session.MessagesFacadeRemote;
import session.UsersFacadeRemote;
public class MessageController extends SimpleFormController {
public MessageController() throws NamingException {
setCommandClass(Name.class);
setCommandName("names");
setSuccessView("redirect:/message.htm");
setFormView("message");
}
@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception {
request.setCharacterEncoding("UTF-8");
String userName = SecurityContextHolder.getContext().getAuthentication().getName();
Name name = new Name();
name.setFields(userName);
UsersFacadeRemote uFR = (UsersFacadeRemote) MyContext.getContext().lookup("HostelServer/UsersFacade/remote");
Set<Messages> setM = uFR.find(userName).getMessagesSet();
setM.addAll(uFR.find(request.getParameter("owner")).getMessagesSet());
Iterator<Messages> iteratorM = setM.iterator();
while(iteratorM.hasNext()){
Messages message = iteratorM.next();
if(!((message.getMessagesPK().getUsername().equals(userName) ||
message.getMessagesPK().getUsername().equals(request.getParameter("owner"))) &&
(message.getMessagesPK().getIdReceiver().equals(userName) ||
message.getMessagesPK().getIdReceiver().equals(request.getParameter("owner"))))){
iteratorM.remove();
}
}
Date date = new Date();
iteratorM = setM.iterator();
Messages[] m = new Messages[setM.size()];
int index = 0;
while(!setM.isEmpty()){
iteratorM = setM.iterator();
Messages messageOld = new Messages();
date = setM.iterator().next().getDateMessage();
Messages message = setM.iterator().next();
messageOld = message;
while(iteratorM.hasNext()){
message = iteratorM.next();
if(message.getDateMessage().before(date)){
date = message.getDateMessage();
messageOld = message;
}
}
m[index] = messageOld;
index++;
setM.remove(messageOld);
}
index--;
int count = index + 1;
request.setAttribute("count", index + 1);
while(index >= 0){
if(m[index].getMessagesPK().getUsername().equals(userName)){
request.setAttribute("who" + String.valueOf(count - index), "Я");
}
request.setAttribute("mes" + String.valueOf(count - index), m[index].getText());
request.setAttribute("date" + String.valueOf(count - index), m[index].getDateMessage());
index--;
}
return name;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
setSuccessView("redirect:/message.htm?owner=" + request.getParameter("owner"));
Name name = (Name) command;
MessagesFacadeRemote mFR = (MessagesFacadeRemote) MyContext.getContext().lookup("HostelServer/MessagesFacade/remote");
String userName = SecurityContextHolder.getContext().getAuthentication().getName();
Messages message = new Messages();
MessagesPK mpk = new MessagesPK();
mpk.setUsername(userName);
mpk.setIdReceiver(request.getParameter("owner"));
Random r = new Random();
mpk.setIdMessage(r.nextInt(1000000000));
message.setMessagesPK(mpk);
message.setText(name.getMessage());
message.setIsOnWall(0);
Date d = new Date();
message.setDateMessage(d);
mFR.create(message);
ModelAndView mv = new ModelAndView(getSuccessView());
return mv;
}
}
message.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сообщения</title>
<link href="./hostel.css" rel="stylesheet" type="text/css" />
</head>
<body>
<spring:nestedPath path="names">
<div class="title">В Общаге</div>
<br>
<div class="table">
<div class="tr">
<div class="tdmesl" align="center">
<br/>
<form action="" method="post">
<spring:bind path="message">
<textarea class="textarea" cols="50" rows="20" name="${status.expression}">${status.value}</textarea>
</spring:bind>
<div class="btnSend">
<pre><input type="submit" value="Отправить" /> </pre>
</div>
<br/>
<br/>
</form>
</div>
<div class="tdmesr">История сообщений:
<br/>
<br/>
<table border="1" width="100%">
<%
for(int i = 1; i <= Integer.parseInt(request.getAttribute("count").toString()); i++){
out.print("<tr><td width='20%'>" + request.getAttribute("date" + String.valueOf(i)) + "</td>" +
"<td width='5%'>");
if(request.getAttribute("who" + String.valueOf(i)) != null){
out.print(" Я ");
}
else{
out.print("Мне");
}
out.print("</td>" +
"<td width='75%'>" + request.getAttribute("mes" + String.valueOf(i)) + "</td>" +
"</tr>");
}
%>
</table>
</div>
</div>
</div>
</spring:nestedPath>
</body>
</html>