Создание системы электронной коммерции
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
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())