메서드 맨날 뭐 있는지 까먹어서 여기다 미리 정리해 두고 사용
-> WAS는 HttpServletRequest 객체를 생성하여 저장
응답을 보낼 때 사용하기 위해 HttpServletResponse 객체 생성
-> Servlet에게 두 객체 전달
-> doGet, doPost, Service 등과 같은 메서드에 파라미터로 전달되어 사용됨
http프로토콜의 request정보를 서블릿에게 전달하기 위해 사용
헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드 포함
Body의 Stream을 읽어 들이는 메소드 포함
요청을 보낸 클라이언트에게 응답을 보내기 위해 WAS에서 생성되어 서블릿에게 전달됨
서블릿은 이 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송
HttpServletRequest
인터페이스에서 제공하는 다양한 메서드를 통해 요청과 관련된 정보를 얻을 수 있다. 아래 표에 주요 메서드들을 정리하였다.
이름 | 설명 | 예제 |
---|---|---|
getParameter(String name) | 요청 파라미터의 값을 문자열로 반환한다. | request.getParameter("paramName") |
getParameterValues(String name) | 동일한 이름의 요청 파라미터를 배열로 반환한다. | request.getParameterValues("paramName") |
getParameterMap() | 모든 요청 파라미터를 Map<String, String[]> 형태로 반환한다. | request.getParameterMap() |
getHeader(String name) | 요청 헤더의 값을 문자열로 반환한다. | request.getHeader("User-Agent") |
getHeaderNames() | 모든 요청 헤더 이름을 Enumeration 형태로 반환한다. | request.getHeaderNames() |
getMethod() | 요청 메서드(GET, POST 등)를 문자열로 반환한다. | request.getMethod() |
getRequestURI() | 요청의 URI를 문자열로 반환한다. | request.getRequestURI() |
getRequestURL() | 요청의 전체 URL을 StringBuffer로 반환한다. | request.getRequestURL() |
getRemoteAddr() | 요청을 보낸 클라이언트의 IP 주소를 반환한다. | request.getRemoteAddr() |
getSession() | 현재 요청과 연관된 세션을 반환하거나, 세션이 없으면 새로 생성한다. | request.getSession() |
getCookies() | 클라이언트가 전송한 쿠키 배열을 반환한다. | request.getCookies() |
getContentType() | 요청의 콘텐츠 타입을 반환한다. | request.getContentType() |
getInputStream() | 요청 본문의 입력 스트림을 반환한다. | request.getInputStream() |
getReader() | 요청 본문을 읽기 위한 BufferedReader를 반환한다. | request.getReader() |
Spring MVC 어노테이션:
Spring MVC에서는 다양한 어노테이션을 사용하여 요청을 매핑하고, 데이터를 처리하며, 응답을 제어한다. 아래 표에 주요 어노테이션들을 정리하였다.
이름 | 설명 | 예제 |
---|---|---|
@RequestMapping | HTTP 요청을 특정 컨트롤러 메서드와 매핑하는 역할을 한다. | @RequestMapping("/path", method = RequestMethod.GET) |
@GetMapping | GET 요청을 처리한다. | @GetMapping("/path") |
@PostMapping | POST 요청을 처리한다. | @PostMapping("/path") |
@PutMapping | PUT 요청을 처리한다. | @PutMapping("/path") |
@DeleteMapping | DELETE 요청을 처리한다. | @DeleteMapping("/path") |
@PatchMapping | PATCH 요청을 처리한다. | @PatchMapping("/path") |
@RequestParam | 요청 파라미터를 메서드 인자로 바인딩한다. | @RequestParam(name = "paramName", defaultValue = "default") String paramValue |
@PathVariable | URL 경로에 포함된 값을 메서드 인자로 바인딩한다. | @GetMapping("/users/{id}") @PathVariable("id") String id |
@RequestBody | HTTP 요청 본문을 자바 객체로 변환한다. | @RequestBody MyData data |
@RequestHeader | 요청 헤더의 값을 메서드 인자로 바인딩한다. | @RequestHeader("User-Agent") String userAgent |
@CookieValue | 요청에 포함된 쿠키의 값을 메서드 인자로 바인딩한다. | @CookieValue("sessionId") String sessionId |
@ModelAttribute | 요청 파라미터를 자바 객체로 바인딩하고, 모델에 추가한다. | @ModelAttribute("userForm") UserForm userForm |
@ResponseBody | 컨트롤러 메서드가 반환하는 값을 HTTP 응답 본문으로 직렬화한다. | @ResponseBody List getData() |
@ResponseStatus | 컨트롤러 메서드가 특정 HTTP 상태 코드를 반환하도록 한다. | @ResponseStatus(HttpStatus.NOT_FOUND) |
@CrossOrigin | CORS(Cross-Origin Resource Sharing)를 설정한다. | @CrossOrigin(origins = "http://example.com") |
@SessionAttributes | 특정 모델 속성을 세션에 저장하여 여러 요청에 걸쳐 사용할 수 있도록 한다. | @SessionAttributes("user") |
@SessionAttribute | 현재 세션에서 이미 저장된 속성을 가져온다. | @SessionAttribute("user") User user |
@RequestScope | 빈의 생존 기간을 HTTP 요청 동안으로 한정한다. | |
@SessionScope | 빈의 생존 기간을 HTTP 세션 동안으로 한정한다. | |
@ApplicationScope | 빈의 생존 기간을 애플리케이션 전체로 한정한다. |
기타 관련 어노테이션:
Spring MVC에서 추가로 유용하게 사용되는 어노테이션들이다. RESTful 웹 서비스를 구현하거나, 전역 예외 처리, 데이터 변환 등을 처리할 때 사용된다.
이름 | 설명 | 예제 |
---|---|---|
@RestController | @Controller와 @ResponseBody를 결합한 어노테이션으로, RESTful 웹 서비스 구현 시 사용된다. | @RestController |
@ControllerAdvice | 전역 예외 처리, 바인딩 설정, 모델 속성 정의 등을 위한 어노테이션이다. | |
@ExceptionHandler | 특정 예외가 발생했을 때 실행될 메서드를 정의한다. | @ExceptionHandler(Exception.class) |
@InitBinder | 컨트롤러 메서드에 바인딩할 데이터 변환기나 검증기를 설정한다. | @InitBinder |
HttpServletResponse
인터페이스는 서버가 클라이언트에게 응답을 전송하는 데 필요한 다양한 메서드를 제공한다. 이를 통해 응답의 상태 코드, 헤더, 본문 등을 설정할 수 있다. 아래 표는 HttpServletResponse
인터페이스에서 자주 사용되는 주요 메서드들을 정리한 것이다.
이름 | 설명 | 예제 |
---|---|---|
setStatus(int sc) | 응답의 상태 코드를 설정한다. 예를 들어, 200은 성공을, 404는 리소스가 없음을 의미한다. | response.setStatus(HttpServletResponse.SC_OK) |
setHeader(String name, String value) | 응답 헤더의 이름과 값을 설정한다. | response.setHeader("Content-Type", "application/json") |
addHeader(String name, String value) | 기존 헤더에 더해 추가 헤더를 설정한다. 같은 이름의 헤더가 이미 존재하면 새로운 값이 추가된다. | response.addHeader("Set-Cookie", "name=value") |
setContentType(String type) | 응답의 콘텐츠 타입을 설정한다. 예를 들어, text/html이나 application/json을 사용할 수 있다. | response.setContentType("application/json") |
getWriter() | 응답 본문을 작성할 수 있는 PrintWriter 객체를 반환한다. | PrintWriter out = response.getWriter() |
getOutputStream() | 응답 본문을 바이트 단위로 작성할 수 있는 ServletOutputStream 객체를 반환한다. | ServletOutputStream out = response.getOutputStream() |
sendRedirect(String location) | 클라이언트를 다른 URL로 리다이렉트한다. | response.sendRedirect("http://example.com") |
sendError(int sc) | 지정된 상태 코드로 에러 응답을 전송한다. | response.sendError(HttpServletResponse.SC_NOT_FOUND) |
sendError(int sc, String msg) | 지정된 상태 코드와 메시지로 에러 응답을 전송한다. | response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid Request") |
setCharacterEncoding(String charset) | 응답의 캐릭터 인코딩을 설정한다. | response.setCharacterEncoding("UTF-8") |
addCookie(Cookie cookie) | 응답에 쿠키를 추가한다. | response.addCookie(new Cookie("name", "value")) |
setContentLength(int len) | 응답 본문의 길이를 설정한다. (단, 최신 서블릿 스펙에서는 setContentLengthLong(long) 메서드 사용을 권장한다.) | response.setContentLength(2048) |
setContentLengthLong(long len) | 응답 본문의 길이를 long 타입으로 설정한다. | response.setContentLengthLong(2048L) |
flushBuffer() | 버퍼된 출력 내용을 클라이언트로 전송한다. | response.flushBuffer() |
reset() | 응답의 버퍼와 상태 코드, 헤더 등을 초기화한다. | response.reset() |
resetBuffer() | 응답의 버퍼를 초기화한다. | response.resetBuffer() |
isCommitted() | 응답이 클라이언트에게 전송되었는지 여부를 반환한다. | boolean committed = response.isCommitted() |
setBufferSize(int size) | 응답 버퍼의 크기를 설정한다. | response.setBufferSize(8192) |
getBufferSize() | 응답 버퍼의 크기를 반환한다. | int bufferSize = response.getBufferSize() |
이 표를 통해 HttpServletResponse
의 다양한 메서드를 쉽게 이해하고 사용할 수 있을 것이다. 각 메서드는 상황에 따라 적절히 활용하여 클라이언트에게 원하는 응답을 전송하는 데 도움이 된다.