[2-17] @RequestParam과 @ModelAttribute
[2-18] @ModelAttribute
[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가 일치하는 경우(+하위경로 포함)에만 자동 전송
- 클라이언트 식별 기술
Cookie cookie = new Cookie("id", "asdf"); //쿠키 생성
cookie.setMaxAge(60*60*24); //유효기간 설정(초)
response.addCookie(cookie); //응답에 쿠키 추가
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); //응답에 쿠키 추가
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)
HttpSession session = request.getSession();
session.setAttribute("id", "asdf");
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] 데이터의 변환과 검증
WebDataBinder에 DefaultFormattingConversionService이 기본 등록
모든 컨트롤러 내에서의 변환 - ConfigurableWebBindingInitializer를 설정해서 사용
특정 컨트롤러 내에서의 변환 - 컨트롤러에 @InitBinder가 붙은 메서드를 작성
[2-31] 데이터의 변환과 검증