
GET 방식의 /first/regist 요청이 들어오면 /first/regist 뷰로 위임한다.
views의 하위 경로를 요청 경로와 동일하게 해주어야 한다.
핸들러 메소드에 파라미터로 특정 몇가지 타입을 선언하게 되면 핸들러 메소드 호출 시 인자로 값을 전달해준다.
1. HttpServletRequest를 매개변수로 선언하여 파라미터로 전달 받은 값 꺼내기
핸들러 메소드 매개변수로 HttpServletResponse도 사용 가능하다.
상위 타입인 ServletRequest, ServletResponse도 사용 가능하며 WebRequest도 사용 가능하다.

messagePrinter.jsp

인코딩 설정이 안 되어 있어서 글씨가 깨져서 나온다

같은 폴더에 EncodingFilter 생성 후 모든 파일들에 적용될 수 있게 @WeabFilter 어노테이션 달아준다.
Filter 클래스 상속받고 메소드 생성해준 뒤 doFilter에 UTF-8적용


2. @RequestParam 으로 값 꺼내기
요청 파라미터를 매핑하여 호출 시 값을 넣어주는 어노테이션으로 @PathVariable처럼 변수 앞에 작성한다.
form의 name 속성 값과 매개변수의 이름이 다른 경우 @RequestParam("name")을 설정하면 된다.
또한 어노테이션은 생략 가능하지만 명시적으로 작성하는 것이 의미 파악에 쉽다.


- 전달하는 form의 name 속성이 일치하는 것이 없는 경우 400 - 잘못 된 요청 에러가 발생하는데
required 속성을 false로 설정하면 해당 name 값이 존재하지 않아도 null로 처리하며 에러가 발생하지 않는다.
(기본 값이 true이기 때문에 설정하지 않으면 에러가 발생함)
- 값이 넘어오지 않게 되면 "" 와 같은 빈 문자열이 넘어오게 되는데, 이 때 parsing 관련 에러가 발생할 수 있다. (400 - 잘못 된 요청)
값이 넘어오지 않는 경우 defaultValue를 이용하면 기본 값을 설정할 수 있다.


파라미터가 여러 개 인 경우 맵으로 한 번에 처리할 수도 있다.
이 때 맵의 키는 form의 name 속성 값이 된다.

3. @ModelAttribute를 이용하는 방법
DTO 같은 모델을 커맨드 객체로 전달 받는다.
@ModelAttribute의 경우 커맨드 객체를 생성하여 매개변수로 전달해 준 뒤 해당 인스턴스를 model에 담는다.
경우에 따라서 폼에서 입력한 값을 다음 화면으로 전달해야 하는 경우가 발생하는데 이 때 유용하게 사용할 수 있다. @ModelAttribute("모델에 담을 key값")을 지정할 수 있으며, 지정하지 않으면 타입의 앞 글자를 소문자로 네이밍한 규칙을 따른다.
해당 어노테이션은 생략이 가능하지만 명시적으로 작성하는 것이 좋다.


4-1. session 이용하기
HttpSession을 매개변수로 선언하면 핸들러 메소드 호출 시 세션 객체를 넣어서 호출한다.

loginResult.jsp



4-2. @SessionAttributes를 이용하여 session에 값 담기
클래스 레벨에 @SessionAttributes 어노테이션 이용하여 세션에 값을 담을 key 값을 설정해두면 Model 영역에 해당 key로 값이 추가되는 경우 session에 자동으로 등록한다.


@SessionAttributes로 등록 된 값은 session의 상태를 관리하는 SessionStatus의 setComplete() 메소드를 호출해야 사용이 만료된다.
현재 컨트롤러 세션에 저장 된 모든 정보를 제거한다. 개별 제거는 불가능하다.

5. @RequestBody를 이용하는 방법
해당 어노테이션은 http 요청 본문 자체를 모델로 변환시켜주는 어노테이션이다.
클릭해보면 쿼리스트링 형태의 문자열이 전송된다.
JSON으로 전달하는 경우 Jackson의 컨버터로 자동 파싱하여 사용할 수 있다.
주로 RestAPI 구현 시 많이 사용한다.


'TIL > Spring' 카테고리의 다른 글
[Spring] 개념정리-2 (0) | 2022.04.12 |
---|---|
[Spring] 개념 정리-1 (0) | 2022.04.12 |
[Spring] SpringIoC - Component Scan (excludeFilters, includeFilters) (0) | 2022.04.06 |
[Spring] Spring IoC(제어의 역행)-bean factory (0) | 2022.04.06 |