Содержание
Введение
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″? >
http://www.springframework.org/schema/beans/spring-beans-2.5 xsd»>
classpath: /resources/config. properties
Нужна помощь в написании отчета?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Наша система гарантирует сдачу работы к сроку без плагиата. Поможем с характеристой и презентацией. Правки внесем бесплатно.
Листинг 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); deletedList = new ArrayList ();
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 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 (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»>
«sequence»>
NEWS_SEQ
<! [CDATA [DELETE FROM News WHERE id IN (: newsIdList)]] >
Заключение
В результате производственной практики были приобретены новые теоретические и практические знания, навыки и умения. Выполненная работа имела отношение к реальной задаче, результат решения которой необходим конкретным людям.
Итогом практики явилось:
· закрепление полученных в университете теоретических знаний о реляционных БД, СУБД;
· получение новых знаний о 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)>