Создание системы электронной коммерции

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

p> }

}

public CustomerController getCustomerController() {

return custctl;

}

...

}

final class ContextListener

implements ServletContextListener {

private ServletContext context = null;

...

public void contextInitialized(ServletContextEvent event) {

this.context = event.getServletContext();

context.setAttribute("beanManager",

new BeanManager());

context.log("contextInitialized()");

}

...

}

Обработка запроса Все запросы для перечисленных в таблице 2 URL отображаются в Web-компонент dispatcher, который реализуется сервлетом Dispatcher:

class Dispatcher extends HttpServlet {

public void doPost(HttpServletRequest request,

HttpServletResponse response) {

...

String selectedScreen = request.getServletPath();

 

request.setAttribute("selectedScreen", selectedScreen);

BeanManager beanManager = getServletContext().getAttribute(

"beanManager");

...

if (selectedScreen.equals("/accountHist")) {

...

} else if (selectedScreen.equals("/transferAck")) {

String fromAccountId =

request.getParameter("fromAccountId");

String toAccountId =

request.getParameter("toAccountId");

if ( (fromAccountId == null) || (toAccountId == null)) {

request.setAttribute("selectedScreen", "/error");

request.setAttribute("errorMessage",

messages.getString("AccountError"));

} else {

TransferBean transferBean = new TransferBean();

request.setAttribute("transferBean",

transferBean);

transferBean.setMessages(messages);

transferBean.setFromAccountId(fromAccountId);

transferBean.setToAccountId(toAccountId);

transferBean.setBeanManager(beanManager);

try {

transferBean.setTransferAmount(new

BigDecimal(request.

getParameter("transferAmount")));

String errorMessage = transferBean.populate();

if (errorMessage != null) {

request.setAttribute("selectedScreen", "/error");

request.setAttribute("errorMessage",

errorMessage);

}

} catch (NumberFormatException e) {

request.setAttribute("selectedScreen", "/error");

request.setAttribute("errorMessage",

messages.getString("AmountError"));

}

}

...

try {

request.getRequestDispatcher("/template.jsp").

forward(request, response);

} catch(Exception e) {

}

}

}

Когда передается запрос, Dispatcher делает следующее:

1.Извлекает и сохраняет URL входящего запроса в атрибуте запроса selectedScreen. Это делается потому, что URL будет изменен, когда запрос перенаправится в шаблонную страницу приложения.

2.Создает компонент JavaBeans и сохраняет компонент как атрибут запроса.

.Разбирает и проверяет параметры запроса. Если параметр не верен, Dispatcher может сбросить псевдоним запроса в страницу ошибок. В противном случае он инициализирует компонент JavaBeans.

.Вызывает метод populate компонента JavaBeans. Этот метод извлекает данные из корпоративных компонентов и обрабатывает их в соответствии с выбором, указанным пользователем.

.Перенаправляет запрос в template.jsp.

Как упоминалось ранее, template.jsp генерирует ответ, включая ответы из субкомпонентов. Если запросом является GET, субкомпонент тела обычно извлекает данные из корпоративного компонента непосредственно; в противном случае он извлекает данные из компонента JavaBeans, инициализированного сервлетом Dispatcher.

На рисунке 6 изображено взаимодействие между этими компонентами.

 

Рисунок 6 - Взаимодействие Web-компонентов

 

9 Защита Web-ресурсов

корпоративный бизнес первичный ключ

В J2EE-платформе Web-ресурс защищается от анонимного доступа указанием того, какие роли безопасности могут обращаться к ресурсу. Эти указания называются ограничением безопасности. Web-контейнер гарантирует, что только определенные пользователи, выступающие в роли, указанной в ограничении безопасности, могут обратиться к ресурсу. Для того чтобы Web-контейнер заставил действовать ограничение безопасности, приложение должно установить средство, при помощи которого пользователи будут идентифицировать себя (как рассматривалось в разделе Аутентификация пользователей Web-ресурсов), а Web-контейнер должен поддерживать отображение роли на пользователя.

В Web-клиенте приложения Duke's Bank все перечисленные в таблице 18-2 URL ограничены ролью безопасности BankCustomer. Приложение требует от пользователя идентифицировать себя при помощи механизма регистрации, основанного на форме. Когда пользователь пытается получить доступ к URL Web-клиента, являясь не аутентифицированным, Web-контейнер отображает URL регистрации /logon, который отображается в JSP-страницу logon.jsp. Эта страница содержит форму, которая требует от пользователя ввода идентификатора и пароля. Web-контейнер извлекает эту информацию, отображает ее в роль безопасности и проверяет, соответствует ли эта роль установленной в ограничении безопасности. Обратите внимание, что для того, чтобы Web-контейнер проверял правильность аутентификационной информации и выполнял отображение, при размещении приложения необходимы следующие шаги:

1.Добавьте группу пользователей, ID и пароль в область контейнера по умолчанию (см. раздел J2EE-пользователи, области и группы).

2.Отобразите роль BankCustomer на пользователя или группу пользователя (см. раздел J2EE-пользователи, области и группы).

После аутентификации пользователя введенный пользователем идентификатор используется как ключ для идентификации счетов пользователя. Идентификатор извлекается из запроса следующим образом:

<% ArrayList accounts = .getAccountController().getAccountsOfCustomer(

request.getUserPrincipal().getName())