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

Одной из основных проблем с web-приложений является разделение логики, которые занимаются Презентация себя, то данные должны быть представлены, а тот, который управляет потоком логики. Это как ответ на такие опасения, что Model-View-Controller(MVC паттерн был разработан. Этот документ предоставляет решение для моделирования пользовательского интерфейса, функциональность Веб-приложения так, чтобы отдельные части могут быть легко изменены, то есть модель-представление-контроллер рамках.

Введение

Model-View-Controller (MVC) рисунок отделяет моделирование домена, презентации, и действия, основанные на ввод пользователя в трех разных классах.

Модель: модель управляет поведением и данных в предметной области, отвечает на запросы на информацию о ее состоянии (обычно от точки зрения), и отвечает на инструкции, чтобы изменить состояние (обычно от контроллера).
Вид: вид управляет отображением информации.
Контроллера: интерпретирует мышь и клавиатура клавиши для ввода от пользователя, сообщая модель, и/или вид на изменения как соответствующие.

Важно отметить, что оба представления и контроллера, зависит от модели. Однако, модель зависит ни на вид, ни на контроллер. Это одно из ключевых преимуществ разделения. Это разделение позволяет этой модели будет построено и испытано независимой визуальной презентации. Расстояние между представления и контроллера является вторичной по многим rich-client-приложений, и, в самом деле, многие интерфейс пользователя базы реализации роли, как один объект. В Web-приложениях, с другой стороны, расстояние между просмотра (браузер) и контроллер (серверные компоненты обработки HTTP-запроса) очень четко определены.

Решения, представленную в настоящем документе используется очень простой сервлетов и JSP и обычных java-объектов, использования этой системы очень легко любых приложений реального времени могут быть разработаны. Следуя этой простой системы наиболее сложных ЗНАНИЕ основ можно понять.

Модель-Представление-Контроллер Тип

Mvc-Типа Я: В этом типе реализации, Представление и Контроллер существовать как единое целое-View-Controller. В плане реализации, на Странице, ориентированный подход Контроллер логики реализуется в рамках Вид т.е. с J2EE, это JSP. Все эти задачи Контроллер, как, например, извлечение HTTP-запрос параметров, называют бизнес-логики (реализовано в JavaBeans, если не непосредственно в JSP), и обработки HTTP-сессии включено в JSP с использованием скриплеты и JSP-тегов действия.

Mvc Тип-II: проблема с Type-I является ее недостаточная управляемость. С Контроллеров, встроенных в JSP с использованием скриптлетов, код может получить из рук очень легко. Чтобы преодолеть проблемы, ремонтопригодности и повторного использования, Контроллер логики, могут быть перенесены в сервлетов и JSP могут быть использованы для чего он предназначен, чтобы быть-компонента представления. Следовательно, путем внедрения Контроллеров в сервлет, MVC Тип-II Шаблон Проектирования могут быть реализованы.

Основное различие между MVC Типа I и Типа II, когда Контроллер логики, встроенной в JSP в Типа I и Типа II, его переехала в сервлет.

Mvc Тип-II Основы

В этом кадре работа, Модель-plain old java-объект, вид-JSP, который будет отображать страницу, используя модели , эти две зависимости от приложения и эта основа носит централизованный контроллер сервлет, который будет заполнить модели и вызывает метод из класса действия.
Ниже приведен исходный контроллера.

Simplecontroller.java

пакет прост;

импорт java.io.IOException;
импорт java.lang.reflect.Method;

импорт javax.servlet.ServletException;
импорт javax.servlet.http.HttpServlet;
импорт javax.servlet.http.HttpServletRequest;
импорт javax.servlet.http.HttpServletResponse;

public class SimpleController расширяет HttpServlet {

частные ActionBeanMapping картирование;

public void doGet(HttpServletRequest запрос,
Httpservletresponse ответ)
бросает ServletException, IOException {
try {
Строка strJsp = null;
Строка strURI = request.getRequestURI();
int startIndex = strURI.lastIndexOf("/");
int endIndex=strURI.lastIndexOf("у тебя");
Строка strAction =
Struri.substring(startIndex+1, endIndex);
This.populatebean(запрос, strAction);
Simplehandler handler =
(Simplehandler)mapping.getActionInstance(strAction);
Strjsp = handler.process(request, response);
Request.getrequestdispatcher(strJsp).forward(request, response);
} catch (Exception e) {
E.printstacktrace();
Request.getrequestdispatcher("/error.jsp").forward(request, response);
}
}

public void doPost(HttpServletRequest запрос,
Httpservletresponse ответ)
бросает ServletException, IOException {
This.doget(request, response);
}

public void init() throws ServletException {
Строка strFile = this.getServletContext().getRealPath("/")+
This.getservletconfig().getInitParameter("actionmappings");
System.out.println("MAPPING FILE PATH::"+strFile);
try {
отображение = new ActionBeanMapping(strFile);
} catch (IOException e) {
E.printstacktrace();
}
}
частные void populateBean(HttpServletRequest запроса, Строка strAction)
{
Объект obj;
try {
obj = mapping.getBeanInstance(strAction);
Методы[] = obj.getClass().getMethods();
for(int i=0; i
Метод method = методов[i];
Строка strName = method.getName();
если(strName.startsWith("set")) {
Строка strField = strName.substring(4);
Strfield =
String.valueof(strName.charAt(3)).toLowerCase(+)
Strfield;
Строка arrayValue[] = request.getParameterValues(strField);
Строка'= null;
если(arrayValue != null &&arrayValue.length>0){
'= Arrayvalue[0];
}
try {
method.invoke(obj, ');
} catch (Exception e) {
E.printstacktrace();
}
}
}
Request.setattribute(SimpleHandler.BEAN, obj);
} catch (Exception e) {
E.printstacktrace();
}
}
}

Сервлета метод init используется для инициализации действий и боб отображений.

public void init() throws ServletException {
Строка strFile = this.getServletContext().getRealPath("/")+
This.getservletconfig().getInitParameter("actionmappings");
System.out.println("MAPPING FILE PATH::"+strFile);
try {
отображение = new ActionBeanMapping(strFile);
} catch (IOException e) {
E.printstacktrace();
}
}
Файл отображения путь берется из сервлета config, и инициализирован ActionBeanMapping вспомогательный класс.

Actionbeanmapping.java:

пакет прост;

импорт java.io.FileInputStream;
импорт java.io.IOException;
импорт java.util.Properties;

public class ActionBeanMapping {
частные Свойства prop = новые Свойства();

общественные ActionBeanMapping(String propFile) throws IOException {
this.prop.load(новый FileInputStream(propFile));
}
общественный Объект getActionInstance(String действий)throws Exception {
Строка strClass = prop.getProperty("действие".+action.trim());
если(strClass == null)
throw new NullPointerException("Null действий::"+действие);
вернуться Class.forName(strClass).newInstance();
}

общественный Объект getBeanInstance(String действий)throws Exception {
Строка strClass = prop.getProperty("боб".+действие);
если(strClass == null) throw
новый NullPointerException("Null боб::"+действие);
вернуться Class.forName(strClass).newInstance();
}
}

Этот класс читает файл свойств и обеспечивает два метода для создания экземпляра Действий и Боб классов с использованием java reflection для указанного пользователя действия.
Методы GET и POST запроса вызывает следующий код в контроллере.
try {
Строка strJsp = null;
Строка strURI = request.getRequestURI();
int startIndex = strURI.lastIndexOf("/");
int endIndex=strURI.lastIndexOf("у тебя");
Строка strAction =
Struri.substring(startIndex+1, endIndex);
This.populatebean(запрос, strAction);
Simplehandler handler =
(Simplehandler)mapping.getActionInstance(strAction);
Strjsp = handler.process(request, response);
Request.getrequestdispatcher(strJsp).forward(request, response);
} catch (Exception e) {
E.printstacktrace();
Request.getrequestdispatcher("/error.jsp").forward(request, response);
}

Этот фрагмент кода получает действий пользователя от URI, и создает компонент и действия класса и заполняет модель и вызывает метод действий класса. Все действия классов в заявке должны реализовывать интерфейс SimpleHandler. Если произошли какие-либо ошибки этот контроллер направляет обобщенную страница ошибки.

Simplehandler.java:

пакет прост;

импорт javax.servlet.http.HttpServletRequest;
импорт javax.servlet.http.HttpServletResponse;

открытый интерфейс SimpleHandler {
public static final ФАСОЛИ = "simple.BEAN";

public String процесса(HttpServletRequest запрос, HttpServletResponse ответ) throws Exception;

}

Все действия классов в заявке должны осуществлять процесс метод.

Население модель данных из объекта запроса осуществляется по следующим метода контроллера.

частные void populateBean(HttpServletRequest запроса, Строка strAction)
{
Объект obj;
try {
obj = mapping.getBeanInstance(strAction);
Методы[] = obj.getClass().getMethods();
for(int i=0; i
Метод method = методов[i];
Строка strName = method.getName();
если(strName.startsWith("set")) {
Строка strField = strName.substring(4);
Strfield =
String.valueof(strName.charAt(3)).toLowerCase(+)
Strfield;
Строка arrayValue[] = request.getParameterValues(strField);
Строка'= null;
если(arrayValue != null &&arrayValue.length>0){
'= Arrayvalue[0];
}
try {
method.invoke(obj, ');
} catch (Exception e) {
E.printstacktrace();
}
}
}
Request.setattribute(SimpleHandler.BEAN, obj);
} catch (Exception e) {
E.printstacktrace();
}
}

Этот метод заполняет модель данными и связывает модель для объекта запроса, эта модель находится в радиусе действия класса и JSP.

error.jsp

[%@ page language="java" pageEncoding="ISO-8859-1"%]
[html]
[головка]
[title]Ошибка.[/title]
[/head]
[body]
[font color="#ff0000"]Ошибка произошла при обработке запроса.[/font]
[/body]
[/html]

Web-конфигурация определяется ниже, это простой файл конфигурации на контроллер.

web.xml:

[?xml version="1.0" encoding="UTF-8"?]
[web-версия app="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema инстанции"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
--
[сервлета]
[описание]Простой J2EE Контроллер[/описание]
[display-name]Простой J2EE Контроллер[/display-name]
[сервлет-имя]SimpleController[/servlet-имя]
[сервлет-класс]simple.SimpleController[/servlet-класс]
[init-param]
[param-имя]actionmappings[/param-имя]
[param value]WEB-INF/actionmappings.properties[/param value]
[/init-param]
[нагрузки-на-автозагрузки]1[/нагрузка-на-автозагрузки]
[/servlet]

[servlet-mapping]
[сервлет-имя]SimpleController[/servlet-имя]
[url-шаблон]*"трудитесь[/url-шаблон]
[/servlet-mapping]
[добро-file-list]
[добро-файл], [/welcome-файл]
[/welcome-file-list]
[/web-app]

Контроллер сервлет запускается для всех url-адресов, которые будут заканчивается у тебя, этот сервлет нагрузок при запуске сервера, и определяет действие отображений путь к файлу.

Пример Приложения на основе

Предоставление образец заявления на регистрацию для хранения имя, адрес электронной почты и телефон.
index.jsp:
[%@ page language="java" pageEncoding="ISO-8859-1"%]
[html]
[головка]
[title]главная страница[/title]
[/head]

[body]
[form method="post" action="register.do"]
[table width="200"border="0" align="center"]
[tr]
[td colspan=2 align="center"][сильный]Данные Пользователя[/strong] [/td][/ru]
[tr]
[td]Название[/td]
[td][input type="text" name="name"][/td][/ru]
[tr]
[td align="left"]Электронный адрес[/td]
[td][input type="text" name="email"][/td][/ru]
[tr]
[td align="center"] Телефон[/td]
[td][input type="text" name="телефон"][/td][/ru]

[tr]
[td colspan="2" align="center"] [input type="submit" value="Submit" name="Submit"][/td][/ru]
[/table]
[/форму]
[/body]
[/html]

Это JSP-странице для ввода данных пользователем для сохранения данных в системе. Когда пользователь нажимает кнопку Submit на странице данных размещена в действие реестра.
Боб и Действий отображений вошли в отображения файла.
actionmappings.properties
action.register=simple.RegistrationHandler
bean.register=simple.User
все действия пользователей от просмотра, необходимо представить в свойства этого файла.
Когда пользователь отправляет данные на контроллер заполняется данными для следующей модели.
User.java:
пакет прост;

общественный класс Пользователя {
private String имя;
частные Строку, электронный адрес;
private String телефон;
public String getEmail() {
вернуться электронный адрес;
}
public void setEmail(Строку, электронный адрес) {
this.email = электронный адрес;
}
public String getName() {
возвращение имени;
}
public void setName(String name) {
и = имя;
}
public String getPhone() {
возвращение телефона;
}
public void setPhone(String телефона) {
this.phone = телефон;
}
}
Следующие действия вызывается, когда данные представлены.
пакет прост;

импорт javax.servlet.http.HttpServletRequest;
импорт javax.servlet.http.HttpServletResponse;

public class RegistrationHandler реализует SimpleHandler {
public String процесса(HttpServletRequest запрос,
Httpservletresponse ответ) throws Exception {
User = (Пользователя)request.getAttribute(SimpleHandler.BEAN);
возвращение "/success.jsp";
}
}
Это действие класс получает компонента из просьбе; этот компонент может быть сохранен в системе, после успешной обработки возвращается в success.jsp для контроллера вперед к этой точке зрения.
success.jsp:
[%@ page language="java" import="просто.*" Pageencoding="ISO-8859-1"%]
[%
User = (Пользователя) request.getAttribute(SimpleHandler.BEAN);
%]
[html]
[головка]
[title]Успех.[/title]
[/head]
[body]
[table width="200"border="0" align="center"]
[tr]
[td colspan=2 align="center"][сильный]Пользовательские Данные Успешно Сохранены[/strong] [/td][/ru]
[tr]
[td]Название[/td]
[td][%= user.getName( %) ][/td][/ru]
[tr]
[td align="left"]Электронный адрес[/td]
[td][%= user.getEmail( %) ][/td][/ru]
[tr]
[td align="center"] Телефон[/td]
[td][%= user.getPhone( %) ][/td][/ru]
[tr]
[td colspan="2" align="center"] [input type="button"value="Home" onClick="window.location='/MVC';" name="Submit"][/td][/ru]
[/table]
[/body]
[/html]

Это JSP показывает сообщение успеха обработки данных.

Заключение

Одной из основных проблем с web-приложений является разделение логики, которые занимаются Презентация себя, то данные должны быть представлены, а тот, который управляет потоком логики. Это как ответ на такие опасения, что Model-View-Controller(MVC паттерн был разработан.