스프링 2

Mango·2022년 3월 19일
0

Spring

목록 보기
2/7

[2-17] @RequestParam과 @ModelAttribute

  1. @RequestParam
    - 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션

[2-18] @ModelAttribute

  1. @ModelAttribute
    - 적용대상을 Model의 속성으로 자동 추가해주는 애너테이션
    - 반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능
    - 컨트롤러의 매개변수에 붙을 수 있는 애너테이션 @RequestParam과 @ModelAttribute
    - 기본형/String에는 @RequestParam 생략, 참조형에는 @ModelAttribute생략
  2. WebDataBinder
    - 브라우저를 통해서 요청받은 값이 실제 객체에 바인딩 될 때 중간역할을 해주고
    - 크게 두가지 작업 ① 타입 변환 ② 데이터 검증을 하고 결과를 BindingResult에 저장해서 Controller에 넘겨줘서 Controller가 그 결과를 볼 수 있다.

[2-19] 회원가입 화면 작성하기

- root-context.xml은 non-web관련 설정파일
- servlet-context.xml은 web관련 설정파일
- <c:url> ① context root 자동추가 ② Session id 자동추가

[2-20] @GetMapping, @PostMapping

[2-21] @GetMapping, @PostMapping
1. @GetMapping, @PostMapping
- @RequestMapping대신 @GetMapping, @PostMapping 사용 가능
- method가 다르면 url이 같아도 문제없음
2. 클래스에 붙이는 @RequestMapping
- 맵핑될 URL의 공통부분을 @requestMapping으로 클래스에 적용
3. @RequestMapping의 URL패턴
- ?는 한 글자, *는 여러 글자, **는 하위 경로 포함. 배열로 여러 패턴 지정
4. URL인코딩 - 퍼센트 인코딩
- URL에 포함된 non-ASCII문자를 문자 코드(16진수) 문자열로 변환

[2-22] redirect와 forward
1. redirect와 forward의 처리 과정 비교
- redirect : 클라이언트가 요청을 하면 해당 페이지가 다른 URL로 재요청하라는 응답을 보냄 -> 브라우저가 자동으로 해당 URL으로 재요청을 보냄. 요청이 2번 응답도 2번
- forward : 클라이언트가 요청을 하면 내용을 다른 페이지로 전달해줌. 전달받은 페이지는 요청을 처리해서 응답.
2. RedirectView
- RedirectView : 컨트롤러에서 redirect 처리하면 응답헤더 만들어 상태전송
3. JstlView
- JSP뷰를 처리하는 것
4. InternalResourceView
- forward할 때 사용되는 뷰
5. forward의 예시

[2-23] 쿠키(coocie)란
1. 쿠키란?
- 이름과 값의 쌍으로 구성된 정보. 아스키 문자만 가능
2. 쿠키의 작동 과정
- 서버에서 생성 후 전송, 브라우저에 저장. 유효기간 이후 자동 삭제
- 서버에 요청시 domain, path가 일치하는 경우(+하위경로 포함)에만 자동 전송
- 클라이언트 식별 기술

  1. 쿠키의 생성
 Cookie cookie = new Cookie("id", "asdf"); //쿠키 생성
 cookie.setMaxAge(60*60*24); //유효기간 설정(초)
 response.addCookie(cookie); //응답에 쿠키 추가
  1. 쿠키의 삭제와 변경
 Cookie cookie = new Cookie("id", ""); //변경할 쿠키와 같은 이름 쿠키 생성
 cookie.setMaxAge(0); //유효기간을 0으로 설정(삭제)
 response.addCookie(cookie); //응답에 쿠키 추가
 
 Cookie cookie = new Cookie("id", ""); //변경할 쿠키와 같은 이름 쿠키 생성
 cookie.setValue(URLEncoder.encode("남궁성")); //값의 변경
 cookie.setDomain("www.fastcampus.co.kr"); //도메인의 변경
 cookie.setPath("/ch2"); //경로의 변경
 cookie.setMaxAge(60*60*24*7); //유효기간의 변경
 response.addCookie(cookie); //응답에 쿠키 추가
  1. 쿠키 읽어오기
 Cookie[] cookies = request.getCookies(); //쿠키 읽기
 
 for(Cookie cookie : cookies) {
 	String name = cookie.getName();
    String value = cookie.getValue();
    
    System.out.printf("[cookie]name=%s, value=%s%n", name, value);
 }

[2-24] 세션(Session)

  1. 세션이란?
    - 서로 관련된 요청들을 하나로 묶은 것 -> 쿠키를 이용
    - browser마다 개별 저장소(session 객체)를 서버에서 제공
    - 브라우저가 요청을 보내면 서버가 응답에 세션ID를 쿠키에 저장해서 주고 그 다음 요청부터는 요청에 (세션ID가 있는)쿠키가 자동으로 따라간다. 따라서 다음 요청부터는 같은 세션으로 묶인다.
    - 독립적인 요청들을 같은 세션ID가 있는 쿠키로 그룹화한다.
    - 세션을 종료하는 방법 : 수동종료(invalidate()) / 자동종료(Time out)
  2. 세션의 생성과정
    - 처음에 브라우저가 요청을 하면 서버가 세션객체를 만든다.
    - 세션ID가 담긴 쿠키를 응답으로 보낸다.
  3. 세션 객체 얻기
    - 쿠키는 브라우저마다 저장이 되기 때문에 서로 다른 PC또는 브라우저로부터 세션ID를 받아서 저장하고 있다.
 HttpSession session = request.getSession();
 session.setAttribute("id", "asdf");
  1. 세션과 관련된 메서드
  2. 세션의 종료
    - 수동 종료
  HttpSession session = request.getSession();
  session.invalidate(); //1.세션을 즉시 종료
  session.setMaxInactiveInterval(30*60); //2.예약 종료(30분 후)

- 자동 종료 - web.xml

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

[2-25] 세션(Session)

[2-26] 세션(Session)

[2-27] 예외처리

[2-28] 예외처리
1. @ExceptionHandler와 @ControllerAdvice
- 예외 처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다. 여러개일 경우 배열로
- @ControllerAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정 가능)
- 예외 처리 메서드가 중복된 경우, 컨트ㅗㄹ러 내의 예외 처리 메서드가 우선
2. @ResponseStatus
- 응답 메시지의 상태 코드를 변경할 때 사용
3. - web.xml
- 상태 코드별 뷰 맵핑
4. SimpleMappingExceptionResolver
- 예외 종류별 뷰 맵핑에 사용. servlet-context.xml에 등록
5. ExceptionResolver
6. 스트링에서의 예외 처리
① 컨트롤러 메서드 내에서 try-catch로 처리
② 컨트롤러에 @ExceptionHandler메서드가 처리
③ @ControllerAdvice클래스의 @ExceptionHandler메서드가 처리
④ 예외 종류별로 뷰 지정 - SimpleMappingExceptionResolver
⑤ 응답 상태 코드별로 뷰 지정 -

[2-29] DispatcherServlet 파헤치기
1. DispatcherServlet이란?
- 서블릿에서 공통처리가 가능한 부분을 앞으로 빼내서 공통부분을 제거하는 역할
2. SpringMVC의 요청 처리 과정

3. DispacherServlet의 소스 분석

[2-30] 데이터의 변환과 검증

  1. WebDataBinder
  2. ResigterController에 변환기능 추가하기
  3. PropertyEditor
    - PropertyEditer : 양방향 타입 변환(String -> 타입, 타입 -> String) 특정 타입이나 이름의 필드에 적용 가능
    ① 디폴트 ProeprtyEditor - 스프링이 기본적으로 제공
    ② 커스텀 PropertyEditor - 사용자가 직접 구형. PropertyEditorSupport를 상속하면 편리
    - 모든 컨트롤러 내에서의 변환 - WebBindingInitializer를 구현후 등록
    - 특정 컨트롤러 내에셔의 변환 : 컨트롤러에 @InitBinder가 붙은 메서드를 작성
  4. Converter와 ConversionService
    - Converter : 단방향 타입 변환(타입A -> 타입B). PropertyEditor의 단점을 개선(stateful -> stateless)
    - ConvertionService : 타입 변환 서비스를 제공. 여러 Converter를 등록 가능

    WebDataBinder에 DefaultFormattingConversionService이 기본 등록
    모든 컨트롤러 내에서의 변환 - ConfigurableWebBindingInitializer를 설정해서 사용
    특정 컨트롤러 내에서의 변환 - 컨트롤러에 @InitBinder가 붙은 메서드를 작성

  5. Formatter
    - Formatter : 양방향 타입변환(String -> 타입, 타입 ->String), 인터페이스
    - 바인딩할 필드에 적용 : @NumberFormat, @DateTimeFormat

[2-31] 데이터의 변환과 검증

  1. Validator란?
    - 객체를 검증하기 위한 인터페이스. 객체 검증가(validator)구현에 사용
  2. Validator를 이용한 검증 - 수동
  3. Validator를 이용한 검증 - 자동
  4. 글로벌 Validator
    - 하나의 Validator로 여러 객체를 검증할 때, 글로벌 Validator로 등록
  5. MessageSource
    - 다양한 리소스에서 메시지를 읽기 위한 인터페이스
  6. 검증 메시지의 출력
    - 스프링이 제공하는 커스텀 태그 라이브러리를 사용
profile
How u do that

0개의 댓글

관련 채용 정보