1. Com.springsource.javax.activation : Spring java-mail
2. Com.springsource.javax.mail : Spring java-mail
3. Com.springsource.javax.servlet.jsp.jstl : JstlView
4. Com.springsource.org.aopalliance : Spring ProxyFactoryBean
5. Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원
6. Com.springsource.org.cator.core : 자동으로 자바 오브젝트를 XML로 변환 지원.
7. Com.springsource.org.cator.xml : 자동으로 자바 오브젝트를 XML로 변환 지원.
8. Com.springsource.junit : junit
9. Commons-logging : Spring-context가 사용
10. Jackson-annotation : MappingJackson2JsonView
11. Jackson-core : MappingJackson2JsonView
12. Jackson-databind : MappingJackson2JsonView
13. Mail : java-mail
14. Mockito : 목 프레임워크 중 Mockito
15. Mysql-connector : Mysql JDBC
16. Org.springframework.context.support : Spring java-mail
17. Org.springframework.oxm : Object-XML Mapping. 마샬러 빈을 지정해 모델에서 변환에 사용할 오브젝트를 지정해주면, OXM마샬러를 통해 모델 오브젝트를 XML로 변환해서 뷰의 결과로 사용할 수 있음.
18. Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean
19. Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)
20. Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)
21. Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)
22. Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)
23. Spring-jdbc : 스프링이 지원하는 jdbc.
24. Spring-test.jar
- @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.
- SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스
- @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일
25. Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션
26. Spring-web : ContextLoaderListener 내장 루트 컨텍스트(서비스,DAO)
27. Spring-webmvc : SpringMVC를 위한 리졸버, 모델앤뷰 등 지원
이해가 안가면 083.WEB_커스텀컨트롤러_핸들러인터셉터_어노테이션 참조
테스트 디스패처 서블릿을 위한 인터페이스
* 번거로운 XML 설정 대신 AbstractDispatcherServletTest를 사용
25. DispatcherServlet 초기화시 ServletConfig 오브젝트를 만들어 초기화해야함.
50. ContextRoot 값이 있을 때 추가해줌
54. setServletPath : 컨텍스트 root를 넣을 수 있도록 셋팅
58. request에 uri 정보와 get,post mothod 셋팅 및 리스판스 객체 생성
81. 테스트 DispatcherServlet Init
39. 타입레벨의 @RequestMapping은 DefaultAnnotationHandlerMapping에서 컨트롤러를 선택할 때 대표적으로 사용하는 애노테이션. 하지만 해당 클래스는 빈으로 등록되어야하므로, @Controller 어노테이션의 스테레오타입이 많이 쓰임.
40. 31에 의해 호출되는데 뷰이름이 없을시 RequestToViewNameTranslator(디폴트 전략)에 의해 URL을 따라 hello라고 뷰이름이 지정된다. DefaultRequestToViewNameTranslator 를 빈으로 등록해주면 prefix, suffix 를 기본 URL에 추가로 붙여줄 수도 있다.
42. @CookieValue, @RequestParam 아래 스샷 참조
37. @RequestMapping URL에 {}로 들어가는 패스변수를 하나 이상 받는다.
> 보통 /user/view?cmd=10 과 같이 쿼리스트링으로 전달하는데 URL에 포함하는 방식.
32. int가 아닌 타입을 맞추지 않으면 400 응답코드가 발생한다.
@RequestHeader
39. 디폴트 접미어 패턴에 의해 hello.do 도 /hello 컨트롤러가 받을 수 있음. 많을 때는 최대한 정확한 컨트롤러를 찾음
43. java.util.Map, spring.Model, spring.ModelMap에 다른 애노테이션이 붙어 있지 않다면 모두 모델정보를 담는데 사용할 수 있는 오브젝트가 전달된다. Model과 ModelMap은 모두 addAttribue() 메소드를 제공하여 일반 맵의 put()처럼 이름을 지정해서 오브젝트 값을 넣을 수 있다.
45. u처럼 오브젝트 값만 전달한다면, 오브젝트의 타입정보를 참고해서 “user”라는 모델 이름으로 자동부여함.
63. @RequestParam : 요청 파라미터를 메소드 파라미터에서 1:1로 받을 때 사용.
74. @ModelAttribute
- 도메인(DTO) 오브젝트에 요청 파라미터를 바인딩 해서 받을 때 사용.(커맨드 패턴 오브젝트)
- 폼에서 입력한 정보에 오류가 있어 재입력 요청시 사용됨.
- 컨트롤러가 리턴하는 모델에 파라미터로 전달한 오브젝트를 그대로 자동으로 추가해준다.
- “user”로 이름을 지정해줄 수 있고, 생략하면 클래스 타입에 따라 “user”가 된다.
* 위 2개 애노테이션 모두 생략 가능하며, 생략해도 동일하게 적용됨.
* 어떻게 생략이 가능할까?
> 몇가지 단순타입(String, int…)는 @RequestParam으로 보고 그 외의 복잡한 오브젝트는 @ModelAttribute로 간주한다. 무조건 생략하는건 위험할 수 있다. 누가 보더라도 쉽다면 생략하고, 사용하는 것을 권장한다.
76. URL에서 조회조건에 해당하는 id와 같은 파라미터는 사용자의 입력값이 아닌 다른 웹페이지의 링크에 미리 생성된 것일 가능성이 높다. @RequestParam의 경우 TypeMismatchException 예외를 처리하는 핸들러 예외 리졸버를 추가해주면된다.
하지만, @ModelAttribute는 다르다. 도메인 객체에 값을 넣다가 작업이 중단되고 400 응답코드가 클라이언트로 전달되지 않고, 발생한 예외 BindException(Error타입) 타입의 오브젝트에 담겨서 컨트롤러로 전달하고 아무일 없다는 듯이 진행한다. @RequestParam은 타입을 무조건 변환해서 값을 넣으려고 하지만 @ModelAttribute는 성격이 다르다.
> 사용자 입력값에 오류가 발견된 채로 작업을 종료하는 것이 아닌, 사용자에게 다시 수정할 기회를 줘야한다.
> Error 혹은 BindingResult 타입은 @ModelAttribute의 항상 뒤에 와야하며, 함께 사용하지 않으면 스프링은 애플리케이션이 값에 문제가 없도록 보장해준다고 생각한다.
> Error 혹은 BindingResult에 오류가 담겨있다면 다시 등록폼을 출력해 사용자가 수정하도록 해야한다.
35. @Value
- 주로 시스템 프로퍼티나 다른 빈의 프로퍼티 값, SpEL을 이용해 클래스의 상소를 읽거나 의 값을 osName 변수에 넣어준다.
'스프링' 카테고리의 다른 글
90. @SessionAttribute와SessionStatus (0) | 2021.02.18 |
---|---|
[spring] @Controller리턴타입의종류 (0) | 2021.02.17 |
[spring] 제네릭스_매핑정보상속_컨트롤러 (0) | 2021.02.15 |
[spring] MVC이론_requestMapping (0) | 2021.02.14 |
[spring] 뷰_뷰리졸버 기초 (0) | 2021.02.13 |