Spring MVC Vlidator - ValidationUtils 사용하기 Spring에서 Validator를 구현하는 방법은 두 가지가 있습니다.1. Programmatic2. Declarative 그 중에서 첫 번째 Programmatic 방법을 사용하여 구현할 때 ValidationUtils를 사용하면 매우 간단하게 구현할 수 있습니다.인터페이스 중에 인자가 네개인 녀석을 사용하여 defaultMessage를 주면 프로퍼티 파일을 만들지 않아도 메시지를 출력할 수 있습니다. 1. Validator
Handling exceptions 13.10. Handling exceptions 특정 예외가 발생했을 때 특정 페이지로 이동 시킬 수 있습니다. 먼저 컨트롤러든 서비스 단이든 벨리데이션 할 때든 에러를 발생시킵니다. 예외 처리 할 것도 없기 때문에 RuntimeException이 좋겠네요. public void add(MemberInfo memberInfo) { if(memberInfo.getConfirmMember().equals(“ajnapaqj&
Intercepting requests Intercepting requests 예제 어떤 서비스를 로그인 한 유저에게만 제공하고 싶다면… request를 처리하는 메소드 내에서 if (request.getSession.getAttribute(“user”) != null) throw LoginRequiredException(); 이런식으로 예외를 발생시키고 이 예외가 발생할 때마다 로그인 페이지로 이동 시키게 할 수 있습니다. 하지만 저런 코드가 여러 부분에서 필요하게
파일 업로드 MultipartResolver 사용하여 파일 업로드 구현 예제 1. 사용할 Resolver 선택 및 등록1.1. 필요한 jar 파일 추가 2. 폼 만들기 3. 모델 객체에 파일 다룰 속성 추가3.1. String, bate[], MultupartFile 중 어떤 타입으로 받을 것인가 선택 및 코딩 4. 컨트롤러 만들기(4.0. 바인딩 할 꺼면-String, byte[] 사용할 때-
File Upload 13.8. Spring's multipart (fileupload) support 13.8.1. Introduction MultipartResolver 인터페이스를 사용하여 파일 업로드를 구현할 수 있습니다. 내부 구현체는 Commons FileUpload 와 COS FileUpload 를 사용합니다. 기본적으로 Spring은 Multipart 를 지원하진 않지만 Multipart를 포함하는 요청이 들어오면 Context에 설정해둔 MutipartResoolver를 사용하여 적절하게 처리할 수 있습니다. 13.8.2. Using the
Spring Reference 13장 13.7. Using themes 13.7.1. Introduction 테마를 적용하기 위해서는 전역적으로 사용할 스타일 시트(CSS)와 그림 파일등의 자원을 정의하는 것이 필요합니다.13.7.2. Defining themes ThemeSource 를 사용하면 되는데 XmlWebApplicationContext 가 ThemeSource 를 구현하고 있으며 내부 구현체로는 ResourceBundleThemeSource 를 기본으로 사용하고 있습니다. ResourceBundleThemeSource는 classpath에 들어있는
locale 13.6. Using locales Request가 들어오면 Dispatcher는 Locale resolver를 찾게 되고 만약에 있으면 Locale을 설정할 때 사용합니다. RequestContext.getLocale() 메소드를 사용해서 Locale resolver에 의해 설정 된 Locale을 가져올 수 있습니다. 13.6.1. AcceptHeaderLocaleResolver 사용자의 브라우져에서 보내진 request의 헤더에 accept-language 부분에서 Locale을 읽어들입니다. 사용자의 OS locale을 나타냅니다.13.
Chaining Resolvers 13.5.2. Chaining ViewResolvers 다수의 ViewResolver들을 등록해 둘 수 있습니다. 그 때 특정 view 이름을 해석할 View Resolver들을 순서대로 나열하는 것을 Chaining ViewResolver라고 하는 것 같습니다. ViewResolver들의 순서는 Ordered 인터페이스를 사용하여 설정할 수 있습니다. 레퍼런스의 예를 보겠습니다. <bean id=”jspViewResolver” class=”org.springframework.web.
Spring Reference 13장 13.5. Views and resolving them 핸들러(controller)는 요청을 처리 한 뒤 ModelAndView 객체를 넘겨 줍니다. 이 때 이 객체에 view의 이름을 같이 넘겨 주는데 이 이름으로 실제 view를 찾아 주는 역할을 하는 것이 View Resolver입니다. 13.5.1. Resolving views – the ViewResolver interface Spring 에서 제공하는 다양한
Interceptor 13.4.3. Intercepting requests - the HandlerInterceptor interface HandlerMapping 안에 interceptor를 만들어서 HandlerMapping에 들어오는 요청들 중에 일부를 처리하는 Handler 하테 요청을 세 가지 시점(넘기기 전과 후, 완료 된 후)에 특정 작업을 추가할 수 있습니다. 레퍼런스에 나와있는 예제는 특정 시간 사이에 들어오는 요청이 아니면 모두 특정 페이지로 요청을 넘겨 버리게 됩니다.
SimpleUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 이 HandlerMapping은 Ant 스타일의 path 매칭(특수 문자 사용을 말하는 듯 합니다.)을 사용할 수 있습니다. <web-app> … <servlet> <servlet-name>sample</servlet-name> <servlet-class&
BeanNameUrlHandlerMapping 13.4.1. BeanNameUrlHandlerMapping 전달 받은 Request를 application context에 정의해둔 특정 bean의 이름으로 매핑시킵니다. 예를 들어 http://samples.com/editaccount.form 이라는 request를 처리할 컨트롤러를 다음과 같이 등록할 수 있습니다. <beans> <bean id=”handlerMapping” class=”org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping&
DispatcherServlet 13.4. Handler mappings DispatcherServlet 과의 관계를 나타내면 다음과 위와 같이 여러 개의 handlerMapping 객체를 List 형태로 가지고 있습니다. Dispatcher Servlet은 위 그림에 표현하지 않은 다른 객체들도 여럿 가지고 있습니다. 저 중에 딱 Dispatcher Servelt과 HandlerMapping 하나와의 관계를 보겠습니다.요청을 처리할 커맨드 객체를 찾아서 HandlerExecutionChain 객체에 감싸서 넘겨
Command Controllers 13.3.4. Command controllers AbstractCommandController :: 특정 객체로 request의 파라미터를 바인딩 할 수 있습니다. 폼 기능은 제공하지 않지만 validation을 할 수 있으며 바인딩 객체를 사용하여 원하는 일을 할 수 있습니다. AbstractFormController :: submit 기능을 제공하기 위한 추상 클레스 입니다. 사용자의 화면의 폼에 입력할 값을 채우면 각각의 필드로 바인딩하고 validation 할
ParameterizableViewController 13.3.2. Other simple controllers ParameterizableViewController 를 사용하면 AbstractController 와 기능은 같지만 veiw 이름을 Configuration 파일에서 설정할 수 있습니다.위의 인터페이스를 보면 viewName이라는 멤버 변수가 있고 setter injection 사용하여 설정 파일로 부터 view 이름을 설정 할 수 있다는 것을 알 수 있습니다.AbstractController와의 관계는 다음과 같습니다. 실제 구현한 코드도
AbstractController 13.3.1. AbstractController and WebContentGenerator 다양한 컨트롤러들의 가장 기반이 되는 구현체인 AbstractController에서 설정할 수 있는 속성들은 다음과 같습니다. Feature Explanation supportedMethods 어떤 형식의 요청을 받아 들일지 설정합니다. 보통은 GET 이나 POST 둘 중 하나며 원하는 메서드 이름으로 바꿀 수 도 있습니다. 지원 하지 않는 요청의 경우 ServletException이 발생합니다. requiresSession
Controller 13.3. Controllers 컨트롤러는 MVC중 C에 해당하며 사용자의 입력을 받은 뒤 뷰에 보여주기 적당한 모델로 바꿔준다. Spring은 다양한 컨트롤러들을 제공하는데 크게 폼 컨트롤러, 커맨드 기반 컨트롤러, 마법사 스타일의 컨트롤러로 나뉩니다. Spring 컨트롤러의 가장 상위에 위치한 Controller 인터페이스는 다음과 같습니다. public interface Controller { /**
Spring Reference 13장 13.2. The DispatcherServlet <web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup&
Spring Reference 13장 13.1. Introduction Spring MVC 의 특징 다른 web MVC 프레임워크와 마찬가지로 모든 요청을 DispatcherServlet 을 사용하여 요청을 처리할 핸들러에게 dispatch 합니다. 요청을 처리할 핸들러(Controller)로는 가장 심플한 Controller 인터페이스 부터 여러 경우에 사용할 수 있는 구현체들을 제공합니다. 어떤 객체라도 폼에 입력되는 값을 받아들이는 객체(폼
Spring Reference 13장 13. Web MVC framework 13.1. Introduction Spring MVC는 DispatcherServlet 를 중심으로 만들어졌습니다.모든 객체가 Command 객체로 사용될 수 있습니다.View Resolution이 정말 유연하다. 13.2. The DispatcherServlet Spring MVC 프레임워크도 다른 request 중심의 웹 MVC 프레임워크와 마찬가지로 중앙 서브릿에서 요청(request)을 디스패칭하여 웹 애플리케이션의 다른