Разработка Web-приложения

  • Вид работы:
    Отчет по практике
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    642,37 Кб
  • Опубликовано:
    2014-04-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка Web-приложения

Содержание

Введение

1. Структура и задачи предприятия

1.1 Разработка систем с использованием WEB-технологий

2. Краткое теоретическиое обоснование применяемых для решения поставленной задачи технологий

2.1 WEB-технологии. Spring framework

2.1.1 Архитектура Spring

2.1.2 IoC - инверсия контроля

2.2 Struts

2.3 Hibernate

3. Практическая реализация поставленной задачи

Заключение

Список использованной литературы

Введение

Производственная практика является составной частью учебного процесса подготовки квалифицированных специалистов. Во время практики происходит закрепление и конкретизация результатов теоретического обучения, приобретение студентами умения и навыков практической работы по присваиваемой квалификации и избранной специальности.

Основной целью производственной практики является систематизация и закрепление знаний, полученных в период обучения.

К задачам практики можно отнести расширение теоретических знаний, развитие умений и навыков в ходе выполнения конкретной работы.

Место прохождения производственной практики - подразделение разработки программных продуктов использующих веб-технологии. Компания ИООО "ЭПАМ Системз".

Были поставлены следующие задачи:

·        изучить структуру предприятия и подразделения,

·        изучить технику безопасности и охраны труда,

·        ознакомиться с WEB-технологиями,

·        закрепить полученные знания на практике, построив WEB-приложение с помощью программного продукта Oracle Database и технологий Spring, Struts.

·        подобрать и систематизировать материалы для написания данного отчёта.

Отчёт о производственной практике состоит из трёх разделов.

Первый раздел посвящён описанию структуры и задач предприятия.

Во втором разделе приведены краткие теоретические сведения, необходимые для понимания и последующего решения поставленной задачи.

Третий раздел представляет собой подробное описание хода практической реализации поставленной производственной задачи.

1. Структура и задачи предприятия


Компания-резидент Парка высоких технологий "ЭПАМ Системз" (EPAM Systems) является на сегодняшний день крупнейшим поставщиком услуг в области разработки проектного (заказного) программного обеспечения и решений в Центральной и Восточной Европе. Созданная в 1993 году, Компания имеет представительства в 11 странах мира, более 7300 высококвалифицированных специалистов в штате, и продолжает активно расти. Реализовав тысячи сложных и масштабных решений для своих заказчиков по всему миру, EPAM Systems неизменно остаётся признанным лидером в таких областях как: разработка, тестирование <#"723683.files/image001.gif">

Рис. 1 - Архитектура Spring

·        IoC - главный модуль

·        AOP - Spring может подключиться к программе в любой точке и выполнить там нужный код

·        Service Abstraction - абстрагируем благодаря тому, что мы вызываем интерфейсы Spring-а и вызываем его методы для работы. За счет этого он абстрагирует от всего остального (Web remoting, EJB, JMS, Scheduling итп).

·        DAO - для работы с БД

·        ORM - JPA, hibername

·        WEB - классы, которые помогают упростить разработку Web (авторизация, доступ к бинам Spring-а из web)

·        MVC - создает web

 

2.1.2 IoC - инверсия контроля

Как это обычно делают люди. Менеджер: он зависит от какого-то сервиса или продукта. Сейчас менеджер просто создает этот сервис или продукт самостоятельно, то есть, менеджер делает new service и вызывает его методы. Представим, что у нас есть какая-либо фабрика и мы говорим фабрике, что нужно создавать продукты и она их производит. Но в этом случае мы зависим от фабрики. Так делают многие и это правильно.

Но как можно сделать лучше? Нужно сделать, чтобы менеджер получал, что-то извне, а не создавал. По сути это и называется инъекция зависимости (инверсия контроля). Теперь получается, что не менеджер уже контролирует объекты, а кто-то их контролирует, а менеджеру предоставляет. Мы, как бы, меняем направление движения.


2.2 Struts


В паттерне MVC поток выполнения приложения всегда проходит через центральный контроллер. Контроллер перенаправляет запросы - в нашем случае, это HTTP запросы - к соответствующему обработчику. Обработчики привязаны к Модели, и каждый разработчик действует как адаптер между запросом и Моделью. Модель представляет, или инкапсулирует, бизнес-логику или состояние приложения. Управление обычно передается обратно через Контроллер соответствующему Представлению (View). Перенаправление осуществляется путем обращения к набору соответствий (mappings) между Моделью и представлением; причем этот набор обычно загружается из базы данных или из конфигурационного файла. Такая схема обеспечивает слабое связывание между Представлением и Моделью, что может сделать разработку и сопровождение приложения значительно проще.

Согласно паттерну Model-View-Controller, Struts имеет 3 основных компонента: сервлет контроллер, который входит в Struts, JSP страницы (это "представление”) и бизнес-логику приложения ("модель”). Давайте рассмотрим, как это все взаимодействует.

Struts'овский сервлет-контроллер связывает и перенаправляет HTTP запросы к другим объектам среды, включая JavaServer Pages и наследники класса org. apache. struts. action. Action <#"723683.files/image003.gif">

Рис. 2 - Список всех новостей

На Рис.3 можно увидеть форму для добавления новой новости. После нажатия на кнопку СОХРАНИТЬ происходит валидация, и если есть ошибки, то они подсвечиваются и не корректная информация не сохраняется.

Рис.3 - Форма для добавления новости

На Рис.4 можно увидеть форму для редактирования новости. Форма имеет такой же вид как и на Рис.3, только с уже заполненной информацией.

Рис.4 - Форма для редактирования новости

Далее представим немного основных кусков кода с небольшими комментариями:

Листинг 1. Конфигурация Spring.

<? xml version="1.0" encoding="Utf-8"? >

<beans xmlns="http://www.springframework.org/schema/beans": xsi="http://www.w3.org/2001/XMLSchema-instance": schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5 xsd">

<bean id="configProperties" class="org. springframework. beans. factory. config. PropertyPlaceholderConfigurer">

<property name="location">

<value>classpath: /resources/config. properties</value>

</property>

</bean>

<bean id="pool" class="com. epam. news. pool. ConnectionPool" scope="" destroy-method="dispose">

<constructor-arg value="${database. driver}"/>

<constructor-arg value="${database. url}"/>

<constructor-arg value="${connectionPool. poolSize}"/>

</bean>

<bean id="jdbcNewsDAO" class="com. epam. news. database. JdbcNewsDAO">

<property name="pool" ref="pool"/>

</bean>

<bean id="hibernateNewsDAO" class="com. epam. news. database. HibernateNewsDAO"/>

<bean id="jpaNewsDAO" class="com. epam. news. database. JpaNewsDAO"/>

<bean name="newsAction" class="com. epam. news. presentation. action. NewsAction">

<property name="newsDAO" ref="hibernateNewsDAO"/>

</bean>

<alias name="newsAction" alias="/saveNews"/>

<alias name="newsAction" alias="/newsList"/>

<alias name="newsAction" alias="/cancel"/>

<alias name="newsAction" alias="/viewNews"/>

<alias name="newsAction" alias="/addNews"/>

<alias name="newsAction" alias="/editNews"/>

<alias name="newsAction" alias="/deleteNews"/>

</beans>

Листинг 2. Класс, который обрабатывает запросы, пришедшие от пользователя.

public class NewsAction extends MappingDispatchAction {

private static final Logger log = Logger. getLogger (NewsAction. class);

private static final String SUCCESS = "success";

private INewsDAO newsDAO;

public void setNewsDAO (INewsDAO newsDAO) {

this. newsDAO = newsDAO;

}

public ActionForward list (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {

log. info (NEWS_LIST);newsForm = (NewsForm) form;. setNewsList (newsDAO. getList ());

return mapping. findForward (SUCCESS);

}

public ActionForward view (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {newsForm = (NewsForm) form;

int newsId = newsForm. getId ();

log. info (NEWS_VIEW + newsId);. setNewsMessage (newsDAO. fetchById (newsId));

return mapping. findForward (SUCCESS);

}

public ActionForward edit (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {newsForm = (NewsForm) form;

int newsId = newsForm. getId ();

log. info (NEWS_EDIT + newsId);. setNewsMessage (newsDAO. fetchById (newsId));

return mapping. findForward (SUCCESS);

}

public ActionForward delete (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {newsForm = (NewsForm) form;[] selected = newsForm. getSelected ();

log. info (NEWS_DELETE + selected);<Integer> deletedList = new ArrayList<Integer> ();

for (int index = 0; index < selected. length; index++) {. add (Integer. parseInt (selected [index]));

}. remove (deletedList);

return mapping. findForward (SUCCESS);

}

public ActionForward cancel (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {traceDeque = (TraceDeque) request. getSession (). getAttribute (TRACE_DEQUE);back;

if (traceDeque. peekLast (). equals (ADD_NEWS_DO)) {= NEWS_LIST_DO;

} else {= traceDeque. peek ();

}

log. info (NEWS_CANCEL + back);refererForward = new ActionForward (back, true);

return refererForward;

}

public ActionForward save (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {newsForm = (NewsForm) form;news = newsForm. getNewsMessage ();. save (news);

log. info (NEWS_SAVE + news);path = mapping. findForward (SUCCESS). getPath ();modifiedForward = new ActionForward (path + "?" + ID +"="

+ news. getId (), true);

return modifiedForward;

}

public ActionForward add (ActionMapping mapping, ActionForm form,request, HttpServletResponse response)

throws Exception {

log. info (NEWS_ADD);newsForm = (NewsForm) form;. setNewsMessage (new News ());

return mapping. findForward (SUCCESS);

}

}

Листинг 3. Пример пулла соединений:

public class ConnectionPool {

private static final Logger log = Logger. getLogger (ConnectionPool. class);

private static final String POOL_CREATED = "Connection pool created, pool size: ";

private static final String POOL_DESTROYED = "Connection pool destroyed";

private String driver;

private String url;

private BlockingQueue<Connection> queue;

private ConnectionPool (String driver, String url, int poolSize) {

this. driver = driver;

this. url = url;

this. poolSize = poolSize;();

}

private void initialize () {

try {. forName (driver). newInstance ();= new ArrayBlockingQueue<Connection> (poolSize);

for (int i = 0; i < poolSize; i++) {. offer (DriverManager. getConnection (url));

}

} catch (SQLException e) {

throw new RuntimeException (e);

} catch (InstantiationException e) {

throw new RuntimeException (e);

} catch (IllegalAccessException e) {

throw new RuntimeException (e);

} catch (ClassNotFoundException e) {

throw new RuntimeException (e);

}

log. info (POOL_CREATED + poolSize);

}

public Connection getConnection () {connection = null;

try {= queue. take ();

} catch (InterruptedException e) {

throw new RuntimeException (e);

}

return connection;

}

public void returnConnection (Connection connection) {

boolean closed = true;

try {. setAutoCommit (true);= connection. isClosed ();

} catch (SQLException e) {

throw new RuntimeException (e);

}

if (! closed) {. offer (connection);

}

}

public void dispose () {connection;

if (queue == null) {

return;

}

while ( (connection = queue. poll ())! = null) {

try {

if (! connection. getAutoCommit ()) {.commit ();

}. close ();

} catch (SQLException e) {

throw new RuntimeException (e);

}

}

log. info (POOL_DESTROYED);

}

}

Листинг 4. Пример маппинга для Hibernate

<? xml version="1.0"? >

<! DOCTYPE hibernate-mapping PUBLIC

"- // Hibernate/Hibernate Mapping DTD 3.0 // EN"

"http://hibernate. sourceforge.net/hibernate-mapping-3.0. dtd">

<hibernate-mapping>

<class name="com. epam. news. model. News" table="news">

<id column="newsId" name="id" type="integer">

<generator>"sequence">

<param name="sequence">NEWS_SEQ</param>

</generator>

</id>

<property column="title" name="title" type="string" />

<property column="c_date" name="date" type="date" />

<property column="brief" name="brief" type="string" />

<property column="content" name="content" type="string" />

</class>

<query name="findAllNews">

</query>

<query name="deleteSelectedNews">

<! [CDATA [DELETE FROM News WHERE id IN (: newsIdList)]] >

</query>

</hibernate-mapping>

Заключение


В результате производственной практики были приобретены новые теоретические и практические знания, навыки и умения. Выполненная работа имела отношение к реальной задаче, результат решения которой необходим конкретным людям.

Итогом практики явилось:

·        закрепление полученных в университете теоретических знаний о реляционных БД, СУБД;

·        получение новых знаний о web-технологиях;

·        работа с новым программными продуктами и системами;

·        получение навыков анализа документации;

·        приобретение опыта принятия самостоятельных решений;

·        приобретение опыта работы в команде;

·        приобретение опыта участия в долгосрочных, масштабных проектах.

Список использованной литературы


1       Интернет-сайт Предприятия места практики http://www.epam. by <http://www.epam.by>/. Дата доступа 20.06.2012.

         Spring http://www.spring-source.ru/docs_simple. php <http://www.spring-source.ru/docs_simple.php>

         Struts <http://www.struts.ru/userGuide/>

         Hibernate http://ru. wikipedia.org/wiki/Hibernate_ (%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0)  <http://ru.wikipedia.org/wiki/Hibernate_(%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0)>

Похожие работы на - Разработка Web-приложения

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!