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로 시작하는 URL만 DispatcherServlet이 담당. 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의 설정을 변경하려면 디폴트 뷰 리졸버로는 사용할 수없고, 명시적으로 빈으로 등록해서 프로퍼티를 지정해줘야한다. 후에 다시 설명.
'스프링' 카테고리의 다른 글
[spring] 핸들러매핑_이론 (0) | 2021.02.10 |
---|---|
Mock테스트_빈등록코딩_컨트롤러의종류와어댑터 (0) | 2021.02.09 |
WEB_루트애플리케이션컨텍스트_테스트 (0) | 2021.02.07 |
스프링 MVC 이론 (0) | 2021.02.06 |
트랜잭션_조합_WAS트랜잭션_고급 (0) | 2021.02.06 |