본문 바로가기

스프링

AnnotationMethodHandlerAdapter_파라미터타입_애노테이션

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. requesturi 정보와 get,post mothod 셋팅 및 리스판스 객체 생성

 

81. 테스트 DispatcherServlet Init

 

 

39. 타입레벨의 @RequestMappingDefaultAnnotationHandlerMapping에서 컨트롤러를 선택할 때 대표적으로 사용하는 애노테이션. 하지만 해당 클래스는 빈으로 등록되어야하므로, @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에 다른 애노테이션이 붙어 있지 않다면 모두 모델정보를 담는데 사용할 수 있는 오브젝트가 전달된다. ModelModelMap은 모두 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 변수에 넣어준다.