Download presentation
Presentation is loading. Please wait.
Published byAusten Verney Modified over 10 years ago
1
eXtreme Programming XP Тема 10
2
XP 1. Контроллеры (SimpleFormController, UrlFilenameViewController); 2. Модель и представление соединяются посредством класса org.springframework.web.servlet.ModelAndView 3. Для поддержки работы с формой используется командный объект (JavaBean, который заполняется значениями из полей формы) 4. Представления реализуются с помощью JSP страниц. Для упрощения сценариев существуют специальные теги из библиотеки дескрипторов Spring. 5. Используются объекты, раскрывающие интерфейс Validator (для проверки правильности ввода данных в форму) 6. Перехватчики – классы, которым передается управление перед (после) тем, как будет выполнен контроллер 7. Преобразователи представления – класс InternalResourceViewResolver. Осуществляет преобразование имен представлений (файл с расширением htm) в фактическое представление (файл с расширением jsp)
3
Перенаправление на контроллеры осуществляет класс org.springframework.web.servlet.DispatcherServlet Управление на него передается с помощью настройки в файле web.xml приложения. XP
4
В корневой папке приложения – index.jsp В папке WEB-INF содержатся файлы настройки приложения web.xml и timex-servlet.xml Файлы настройки Hibernate находятся в папке classes XP
5
XP
6
XP
7
<war destfile="${war.file}" webxml="${src.dir}/conf/web.xml"> <delete dir="${webinf.dir}/${src.dir}" failonerror="false" /> XP
8
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> Time Expression Example index.jsp
9
XP timex org.springframework.web.servlet.DispatcherServlet 1 timex *.htm
10
XP Файл контекста приложения задает JavaBean’ы, используемые в приложении и их отношения внедрения. Разберем сначала функциональность авторизации пользователя.
11
XP <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="urlMap" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> signInController signOutController urlFilenameController
12
XP <bean id="httpRequestInterceptor" class="com.visualpatterns.timex.controller.HttpReques tInterceptor"> signin.htm
13
XP true /signin redirect:ok.htm com.visualpatterns.timex.controller.SignLogin
14
XP <bean name="signOutController" class="com.visualpatterns.timex.controller.SignOutCon troller"> redirect:signin.htm
15
XP <bean id="urlFilenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewCo ntroller" />
16
XP <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResour ceViewResolver"> org.springframework.web.servlet.view.JstlView /WEB-INF/jsp/.jsp
17
XP <bean id="messageSource" class="org.springframework.context.support.Resourc eBundleMessageSource"> messages Файл messages.properties должен содержать строки: Id сообщения = текст сообщения
18
XP <bean id="urlMapAuthenticate" class="org.springframework.web.servlet.handler.SimpleUrlHandle rMapping">...
19
XP package com.visualpatterns.timex.controller; public class SignLogin { String login, password; public String getLogin() {return login;} public void setLogin(String login){this.login=login;} public String getPassword(){return password;} public void setPassword(String pass){ password=pass;} }
20
XP package com.visualpatterns.timex.controller; import javax.servlet.http.HttpServletRequest; public class ApplicationSecurityManager { public static final String USER = "user"; public Object getUser(HttpServletRequest request) { return request.getSession(true).getAttribute(USER); } public void setUser(HttpServletRequest request, Object user) { request.getSession(true).setAttribute(USER, user);} public void removeUser(HttpServletRequest request) { request.getSession(true).removeAttribute(USER);} }
21
XP package com.visualpatterns.timex.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.visualpatterns.timex.controller.SignLogin; import com.visualpatterns.timex.controller.ApplicationSecurityManager; public class HttpRequestInterceptor extends HandlerInterceptorAdapter { private String signInPage; private ApplicationSecurityManager applicationSecurityManager; public String getSignInPage() { return signInPage;} public void setSignInPage(String signInPage) { this.signInPage = signInPage;} public ApplicationSecurityManager getApplicationSecurityManager() { return applicationSecurityManager;} public void setApplicationSecurityManager( ApplicationSecurityManager applicationSecurityManager) { this.applicationSecurityManager = applicationSecurityManager;}
22
XP public void setApplicationSecurityManager( ApplicationSecurityManager applicationSecurityManager) { this.applicationSecurityManager = applicationSecurityManager;} public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String log = (String)applicationSecurityManager.getUser(request); if (log == null) { response.sendRedirect(this.signInPage); return false; } return true; }
23
XP 1. Обращение к форме: - formBackingObject – создание командного объекта - initBinder – регистрация редакторов свойств - showForm - referenceData – формирование списков 2. Данные в форме некорректные: - initBinder - onBind - onBindAndValidate - processFormSubmission - showForm - referenceData 3. Данные были корректными: - initBinder - onBind - onBindAndValidate - processFormSubmission - onSubmit
24
XP package com.visualpatterns.timex.controller; import org.springframework.validation.Errors; import com.visualpatterns.timex.controller.SignLogin; public class SignInValidator implements org.springframework.validation.Validator { public boolean supports(Class clazz) { return clazz.equals(SignLogin.class); } public void validate(Object command, Errors errors) { SignLogin log = (SignLogin) command; if (log == null) return; String login = log.getLogin(); String password = log.getPassword(); if (!(login.equals("admin") && password.equals("admin"))) errors.reject("error.login.invalid"); }
25
XP package com.visualpatterns.timex.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; import com.visualpatterns.timex.controller.ApplicationSecurityManager; import com.visualpatterns.timex.controller.SignLogin; public class SignInController extends SimpleFormController { private ApplicationSecurityManager applicationSecurityManager; protected Object formBackingObject(HttpServletRequest request) throws Exception { return new SignLogin(); }
26
XP public ModelAndView showForm( HttpServletRequest request, HttpServletResponse response, BindException errors, Map controlModel) throws Exception { if (applicationSecurityManager.getUser(request) != null) return new ModelAndView(getSuccessView()); return super.showForm(request, response, errors, controlModel); } public void onBindAndValidate( HttpServletRequest request, Object command, BindException errors) throws Exception { if (errors.hasErrors()) return; SignLogin formUser = (SignLogin) command; applicationSecurityManager.setUser(request, formUser.getLogin()); }
27
XP public ModelAndView onSubmit( HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { return new ModelAndView(getSuccessView());} public ApplicationSecurityManager getApplicationSecurityManager() { return applicationSecurityManager; } public void setApplicationSecurityManager( ApplicationSecurityManager applicationSecurityManager) { this.applicationSecurityManager = applicationSecurityManager; }
28
XP package com.visualpatterns.timex.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import com.visualpatterns.timex.controller.ApplicationSecurityManager; public class SignOutController implements Controller { private ApplicationSecurityManager applicationSecurityManager; private String successView; public String getSuccessView() { return successView; } public void setSuccessView(String successView) { this.successView = successView; }
29
XP public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws Exception { applicationSecurityManager.removeUser(request); return new ModelAndView(getSuccessView()); } public ApplicationSecurityManager getApplicationSecurityManager() { return applicationSecurityManager;} public void setApplicationSecurityManager( ApplicationSecurityManager applicationSecurityManager) { this.applicationSecurityManager = applicationSecurityManager; }
30
XP Цель – перенаправление на страницу авторизации
31
XP Авторизация
32
XP Логин: ' value=' ' type="text" size="6" maxlength="6"> Пароль: ' value=' ' type="password" size="8" maxlength="10">
33
XP Вы успешно вошли в систему Выйти из системы
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.