HttpServletRequest

HYUNBIN CHO·2021년 4월 22일
0

spring

목록 보기
18/23
post-thumbnail

HttpServletRequest, HttpServletResponse
HTTP요청메시지, HTTP응답 메시지를 편리하게 사용하도록 도와주는 객체.
서블릿이 개발자 대신에 HTTP요청 메시지를 파싱해서 HttpServletRequest객체에 담아서 제공하기 때문에 개발자는 그냥 사용하면 된다.

🔷 기본 사용법

🔸 GET/POST 방식확인

request.getMethod(); //GET

🔸 사용 프로토콜

request.getProtocol(); // HTTP/1.1

🔸 http, https, ftp

request.getScheme(); //http  

🔸 URL주소가져오기

request.getRequestURL();// http://localhost:8080/request-header
request.getRequestURI(); // /request-header     

🔸 QueryString 얻기

request.getQueryString(); // username=hello

🔸 https(보안채널)사용유무

request.isSecure();

🔸 헤더정보

/*Enumeration<String> headerNames = request.getHeaderNames();
      while (headerNames.hasMoreElements()) {
      String headerName = headerNames.nextElement();
      System.out.println(headerName + ": " + request.getHeader(headerName));
      }
*/                
request.getHeaderNames().asIterator().
    forEachRemaining(headerName -> System.out.println(headerName + 
    ": "+ request.getHeader(headerName)));

🔸 쿠키정보

if (request.getCookies() != null) {
    for (Cookie cookie : request.getCookies()) {
    System.out.println(cookie.getName() + ": " + cookie.getValue());
    }
 }

🔸 서버 정보(이름, 포트)

request.getServerName(); 
request.getServerPort(); 

🔸 local 정보

request.getLocalName();
 request.getLocalAddr();
request.getLocalPort();

🔸 Remote 정보

request.getRemoteHost();
request.getRemoteAddr();
request.getRemotePort();

🔷 HttpServletRequest의 부가기능

🔹 임시저장소 기능

HTTP요청의 시작~종료까지 유지되는 임시저장소 기능
request.setAttribute(name, value);
request.getAttribute(name);

🔹 세션 관리 기능

request.getSession(create:true);

🔷 HTTP요청 데이터

🔹클라이언트에서 서버로 데이터를 전달하는 방법

GET, POST, HTTP message body

🔸 GET - 쿼리 파라미터

  • /url?username=hi&age=20
  • 메시지 바디 없이 url의 쿼리파라미터에 데이터를 포함해서 전달
  • 검색, 필터, 페이지 등에서 많이 사용

🔸데이터 전달 방법

localhost:8080/request-param?username=hi&age=10

🔸 전달된 데이터 가져와서 사용하기


// 단일 파라미터
String age = request.getParameter("age");
String username = request.getParameter("username"); 
// 파라미터 이름을 모두 조회
Enumeration<String> parameterNames = request.getParameterNames(); 
//요즘 방식
request.getParameterNames().asIterator()
        .forEachRemaining(paramName -> System.out.println(paramName + "=" 
        + request.getParameter(paramName)));

// 파라미터를 Map으로 조회
Map<String, String[]> parameterMap = request.getParameterMap(); 
// 이름이 같은 복수의 파라미터를 조회
String[] usernames = request.getParameterValues("username");
for(String username : usernames){
    System.out.println("username = " + name);

🔸 POST - HTML Form

  • Content-Type:application/x-www-form-urlencoded
  • 메시지 바디에 쿼리 파라미터 형식으로 데이터 전달 ➡️username=hi&age=20
  • 회원가입, 상품주문, HTML FORM사용

🔸 데이터 전달 방법

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/request-param" method="post">
  username: <input type="text" name="username"/>
  age: <input type="text" name="age"/>
  <button type="submit">전송</button>
</form>
</body>
</html>

🔸 데이터 가져와서 사용하는 방법은 위의 GET방법과 동일
🔸 테스트 할 때마다 form 만들기는 귀찮으니깐 POSTMAN을 사용하자.

🔸 HTTP message body

  • HTTP API에서 주로 사용 (JSON, XML, TEXT정보를 담아서 데이터 전달)
  • 데이터 형식은 주로 JSON형식을 사용
  • POST, PUT, PATCH

🔸 데이터 전달 방법(TEXT)
post : http://localhost:8080/request-body-string
contentType : text/plain
message body : hello!
🔸 데이터 가져와서 사용하기

@WebServlet(name="requestBodyStringServlet", urlPatterns="/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream();// inputStream은 바이트 코드를 반환
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // StreamUtils를 이용해서 바이트코드를 String으로 변환
        System.out.println("messageBody = " + messageBody);
        response.getWriter().write("OK");

🔸 데이터 전달방법(JSON)
post : http://localhost:8080/request-json-string
contentType : json
message body : {"username":"hello", "age":20}
🔸 데이터 가져와서 사용하기

@WebServlet(name="requestBodyJsonServlet", urlPatterns="/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
        System.out.println("messageBody = " + messageBody);
       
        HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
        System.out.println("helloData.getUsername = " + helloData.getUsername());
        System.out.println("helloData.getAge = " + helloData.getAge());
        response.getWriter().write("OK");
    }
}





https://www.inflearn.com/course/스프링-mvc-1/

profile
백견이 불여일타

0개의 댓글