본문 바로가기

스프링

서블릿컨텍스트등록_핸들러어댑터전략

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.junit : junit

6.     Commons-logging : Spring-context가 사용

7.     Mail : java-mail

8.     Mockito : 목 프레임워크 중 Mockito

9.     Mysql-connector : Mysql JDBC

10.   Org.springframework.context.support : Spring java-mail

11.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

12.   Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

13.   Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

14.   Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

15.   Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

16.   Spring-jdbc : 스프링이 지원하는 jdbc.

17.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

18.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

19.   Spring-web : ContextLoaderListener 내장 루트 컨텍스트(서비스,DAO)

20.   Spring-webmvc : SpringMVC를 위한 리졸버, 모델앤뷰 등 지원

 

비즈니스 로직을 담는 루트 애플리케이션 컨텍스트와 웹기술이 들어가는 자식 컨텍스트를 만들어 웹기술이 바뀌더라도 비즈니스 로직은 변하지 않는 것이 스프링이 추구.

스프링웹어플리케이션을 만드려면 먼저 루트 애플리케이션 컨텍스트와 서블릿 애플리케이션 컨텍스트, 두가지를 web.xml을 이용해 등록한다.

7~17. 루트 웹 애플리케이션 컨텍스트의 디폴트 설정파일은 /WEB-INF/applicationContext.xml 이다. 사용할 이름이 다르거나, 설정파일이 여러 개일 때는 contextConfigLocation이라는 컨텍스트 파라미터를 추가해 설정해주면 된다.

18~22. 웹 프레젠테이션 계층의 빈을 등록할 서블릿 컨텍스트 추가.

23~24. DispatcherServlet을 등록할 때는 HTTP 요청 패턴을 지정해줘야 한다. /app로 시작하는 URLDispatcherServlet이 담당. RESTful 스타일. 이렇게 생성하면 서블릿 컨텍스트가 사용할 설정파일 이름은 서블릿 이름 뒤에 ‘–servlet.xml’ 을 붙인 설정파일을 디폴트로 사용(spring-servelt.xml)한다.

* 스프링 MVC를 사용하려면 먼저 DispatcherServlet전략을 선택하고 그에 따른 코드를 작성해야 한다.

 

HelloSpring 빈 등록

 

테스트용 빈

 

14. context:annotation-config : @Autowired를 이용해 의존관계 설정

15. 디폴트 전략2 > 핸들러 매핑 : BeanNameUrlHandlerMapping

Controller를 실행하려면 DispatcherServlet이 특정 URL의 요청을 이 컨트롤러로 넘겨줘야 한다. 간단히 사용할만 한 것은 빈의 이름에 매핑할 URL을 넣어주는 것이다. ‘/’과 같은 URL의 특수문자를 사용해도 좋다. 컨트롤러는 다른 빈에 의해서 참조되는 경우가 없기 때문에.

 

* DispatcherServlet디폴트 전략1 > 핸들러어댑터 : SimpleControllerHandlerAdapter

18. ModelAndView handleRequest : SimpleControllerHandlerAdapter에 의해 실행되는 메소드 재정의 필요

* SimpleControllerAdapter?

> Controller 인터페이스를 구현한 핸들러/컨트롤러를 사용한다.

> 서블릿의 요청과 응답 정보를 가진 Request, Response를 그대로 전달받는다. 컨트롤러의 작업 결과는 모델과 뷰를 통해 동시에 담을 수 있는 ModelAndView 타입 오브젝트로 리턴한다.

23. 디폴트 전략3 > 뷰 리졸버 : InternalResourceViewResolver

> 컨트롤러가 리턴한 뷰 이름에 해당하는 뷰 오브젝트를 가져온다. 이렇게 가져온 뷰 오브젝트를 이용해 최종적인 HTTP 응답 결과를 만들어낸다. 굉장히 복잡함. 일단 JSP를 리턴한다고 알고 넘어가자.

 

그런데 왜 hello.jsp 파일을 WEB-INF 아래에 넣었을까?

기존 모델방식과는 다르게 URL을 통해 실행시키는 용도가 아니다. 직접 실행시키지 못하도록 웹루트 /WEB-INF/ 아래에 JSP파일을 두는게 좋다. JSP에 직접접근이 아닌 InternalResourceView 는 내부적으로 WEB-INF 아래에 있는 JSP도 실행시킬 수 있다.

* prefiex, suffix를 통해 j네를 제거하고 사용할 수 있다. InternalResourceViewResolver의 설정을 변경하려면 디폴트 뷰 리졸버로는 사용할 수없고, 명시적으로 빈으로 등록해서 프로퍼티를 지정해줘야한다. 후에 다시 설명.