Spring MVC 구성 주요 컴포넌트

1. DispatcherServlet
 - Front Controller
2. Controller
 - 클라이언트 요청 처리를 수행하는 Controller
3. HandlerMapping
 - 클라이언트의 요청을 처리할 Controller를 찾는 작업처리
 4. View
 - 응답하는 로직을 처리
 5. ViewReslover
 - 응답할 View를 찾는 작업을 처리
 6. ModelAndView
 - 응답할 View와 View에게 전달할 값을 저장하는 용도의 객체

'프로그래밍 > Spring MVC' 카테고리의 다른 글

Controller 작성(AbstractController, MultiActionController)  (0) 2012.06.26
HandlerMapping  (0) 2012.06.26
DispatcherServlet 설정과 ApplicationContext  (0) 2012.06.26
Spring MVC 흐름  (0) 2012.06.26
MVC패턴이란?  (0) 2012.06.26
Posted by 조은성
,

* MVC 패턴이란?
UI기반의 application 전체프로그램을 디자인 하기 위한 패턴

* 싱글턴 패턴?
전체 어플리케이션 중 한 클래스를 정의 하기 위한 패턴

DTO(VO) - 데이터를 묶어 주는 역할을 함. 값을 이동시키기 위한 객체

M - model (비지니스 로직 처리) (모델은 2가지로 나뉘어짐. 1. 비지니스로직 - 비지니스Service, 2. DB관련 - DAO )
V - view (응답처리)
C - controller (프로그램의 전체 흐름 처리 work flow)

* 만약 클라이언트가 요청을 하면

1. 요청받기
 -> 요청시 보낸 값을 읽는다.
 -> 검증
2. 비지니스 로직 처리
3. 응답

을 순서대로 처리한다.

비지니스 로직을 밖으로 빼서 처리하고 응답하는 코드도 따로 빼서 만든다.

 

 

 

* Model1 : 컨트롤러 개념만 빠진다.
* Model2 : 컨트롤러 개념 추가.
                Model : Java Beans이 처리
                View : jsp(JAVA코트와 HTML코드 처리)
                controller : Servlet이 처리

* model2는 자바에서만 취급하는 프레임 워크 지만 MVC는 다른 프로그램에서도 사용가능하다.

 

 

 

* 예전에 했던 회원등록 프로그램 적용 예제 

 

 

Posted by 조은성
,

@Aspect 어노테이션을 이용한 AOP

1. @Aspect 어노테이션을 이용하여 Aspect 클래스에 직접 Advice 및 Point등을 직접 설정
2. 설정파일에 <aop:aspectj-autoproxy/> 를 추가 해야함
3. Aspect class를 <bean>으로 등록
4. 어노테이션(Annotation)
 - @Aspect : Aspect 클래스 선언
 - @Before("pointcut")
 - @AfterReturning(pointcut="", returning="")
 - @AfterThrowing(pointcut="",throwing="")
 - @After("pointcut")
 - @Around("pointcut")

5. Around를 제외한 나머지 메소드들은 첫 argument로 JoinPoint를 가질 수 있다.
6. Around 메소드는 argument로 ProceedingJoinPoint를 가질 수 있다.  

 

 

 

 

 

* 결과

------------정상처리----------------
AdviceClass.before.beforeLogger()---------------------
AdviceClass.aroundLogger() 실행----------------
Business메소드가 실행되었습니다.
AdviceClass.afterReturnLogger()--------------
null
AdviceClass.afterLogger()----------------------
------------에러내기----------------
AdviceClass.before.beforeLogger()---------------------
AdviceClass.aroundLogger() 실행----------------
AdviceClass.afterThrowLogger()----------------------
i가 0보다 작다
Exception in thread "main" AdviceClass.afterLogger()----------------------
java.lang.RuntimeException: i가 0보다 작다
 at aop.core.CoreClass.businessMethod(CoreClass.java:6)
 at aop.core.CoreClass$$FastClassByCGLIB$$359776d6.invoke(<generated>)
 at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
 at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
 at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:50)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
 at aop.common.AdviceClass.aroundLogger(AdviceClass.java:34)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
 at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
 at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
 at aop.core.CoreClass$$EnhancerByCGLIB$$cebdb4e6.businessMethod(<generated>)
 at TestMain.main(TestMain.java:14)

 

Posted by 조은성
,