HttpServletRequest 에서 값 얻기
contentType = application/x-www-form-urlencoded
(form데이터)
<form action="ExServlet" method="post"> <label>id : <input type="text" name="id_info" size="10em"></label><br> <label>password : <input type="password" name="pw_info" size="10em"></label><br> <label>name : <input type="text" name="name_info"></label><br> <input type="checkbox" name="hobby" value="축구">축구 <input type="checkbox" name="hobby" value="야구" checked="checked">야구 <input type="checkbox" name="hobby" value="농구">농구 <input type="checkbox" name="hobby" value="테니스">테니스<br> <input type="radio" name="sex" value="남">남 <input type="radio" name="sex" value="여">여 <br> <input type="submit" value="전송"> </form>
String id = request.getParameter("id_info"); String pw = request.getParameter("pw_info"); String name = request.getParameter("name_info"); String[] hobby = request.getParameterValues("hobby"); String sex = request.getParameter("sex"); System.out.println("id : " + id); System.out.println("pw : " + pw); System.out.println("name : " + name); System.out.println("sex(남/여) : " + sex); System.out.println("hobby : " + Arrays.toString(hobby));
값을 받는 메소드 3가지
- 아래 메소드 들은 form에서 name으로 정의한 이름으로 parameter를 가지고 옴
- String getParameter(”name”) → 전송받은 값 중 지정한 “name”을 String 값으로 가져옴
- String[] getParameterValues(”name”) → 이름들 중 선택한 값을 가져옴
- getParameterNames() → 전송한 모든 name을 가져옴
HttpServletRequest 에서 requestBody 얻어내기
- HttpServletRequest의 inputStream에서 getAllBytes를 Filter 단에서 해버리면 Controller에서 해당 데이터에 접근이 불가능함
이때 ContentCachingRequestWrapper 클래스를 이용
- chain.doFilter에 ContentCachingRequestWrapper 인스턴스로 request를 넣기
class TraceFilter : OncePerRequestFilter() { override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, chain: FilterChain) { MDC.put("authId", "noAuthId".take(8)) try { chain.doFilter(ContentCachingRequestWrapper(request), response) } finally { MDC.clear() } } }
- 그 후 해당 request의 inputStream이 한번 읽혀야 캐싱이 됨
- 캐싱된 데이터를 request instance 에서 계속적으로 얻어낼 수 있음