[스프링부트] 8. request객체 1

백하림's avatar
Mar 19, 2025
[스프링부트] 8. request객체 1

HTTP 요청 헤더 출력 코드

Enumeration<String> headerNames = req.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); String headerValue = req.getHeader(headerName); System.out.println(headerName + ": " + headerValue); }

결과

host: localhost:8080 connection: keep-alive sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 sec-purpose: prefetch;prerender purpose: prefetch accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 sec-fetch-site: none sec-fetch-mode: navigate sec-fetch-user: ?1 sec-fetch-dest: document accept-encoding: gzip, deflate, br, zstd accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 host: localhost:8080 connection: keep-alive sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 sec-purpose: prefetch;prerender purpose: prefetch accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 sec-fetch-site: none sec-fetch-mode: navigate sec-fetch-user: ?1 sec-fetch-dest: document accept-encoding: gzip, deflate, br, zstd accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

HTML 폼 제출 예제

자바 코드

package org.example.demo6; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("*.do") public class DemoServlet extends HttpServlet { // insert @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println("username: " + username); System.out.println("password: " + password); } }

HTML 코드

<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form action="http://localhost:8080/hello.do" method="post" enctype="application/x-www-form-urlencoded"> <input type="text" placeholder="Enter username" name="username"> <input type="text" placeholder="Enter password" name="password"> <button type="submit">전송</button> </form> </body> </html>
💡
<form: 폼을 정의합니다.
  • action: 폼을 제출할 서버의 URL을 지정합니다. http://localhost:8080/hello.do로 설정되어 있습니다.
  • method: 폼을 제출할 HTTP 메서드입니다. 여기서는 post를 사용하여 데이터를 안전하게 전송합니다.
  • enctype: 폼 데이터가 서버로 전송될 때 인코딩 방식을 정의합니다. 여기서는 application/x-www-form-urlencoded 방식으로 데이터를 전송합니다.
💡
<input>: 사용자로부터 정보를 입력받는 필드입니다.
  • type="text": 텍스트 입력을 받는 필드입니다.
  • placeholder: 입력란에 표시되는 안내 텍스트입니다.
  • name: 서버에서 받을 데이터의 이름을 지정합니다. 서버에서는 이 이름을 키로 사용하여 데이터를 처리합니다.
💡
<button type="submit">: 폼을 제출하는 버튼입니다. 사용자가 클릭하면 입력한 데이터가 서버로 전송됩니다.
notion image
notion image

GET 및 POST 요청 처리

package org.example.demo6; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.util.Enumeration; @WebServlet("*.do") public class DemoServlet extends HttpServlet { // select // localhost:8080/demo.do?username=ssar&password=1234 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String path = req.getRequestURI(); System.out.println("path : " + path); String method = req.getMethod(); System.out.println("method : " + method); String queryString = req.getQueryString(); // where에 걸린다. 구체적 질의 System.out.println("queryString : " + queryString); String username = req.getParameter("username"); // 파싱 System.out.println("username : " + username); String password = req.getParameter("password"); // 파싱 System.out.println("password : " + password); // 헤더 정보 출력 String method1 = req.getHeader("User-Agent"); System.out.println("User-Agent : " + method1); String host = req.getHeader("Host"); System.out.println("Host : " + host); Enumeration<String> headerNames = req.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); String headerValue = req.getHeader(headerName); System.out.println(headerName + ": " + headerValue); } } // insert @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); // POST 방식 파라미터 추출 String password = req.getParameter("password"); // POST 방식 파라미터 추출 System.out.println("username: " + username); System.out.println("password: " + password); String body = ""; BufferedReader br = req.getReader(); while (true) { String line = br.readLine(); // 한 줄씩 읽음 if (line == null) break; // 더 이상 읽을 내용이 없으면 종료 body = body + line; // 본문 내용 누적 } System.out.println("body : " + body); // 본문 내용 출력 } }
💡

📌 핵심 개념

  • HttpServletRequest 객체: 클라이언트의 요청 정보를 담고 있는 객체
    • getRequestURI(): 요청된 URI를 반환
    • getMethod(): 요청 방식(GET/POST 등)을 반환
    • getQueryString(): URL의 쿼리 문자열을 반환
    • getParameter(): 요청 파라미터를 반환
    • getHeader(): 요청 헤더 정보를 반환
    • getHeaderNames(): 모든 요청 헤더 이름을 반환
  • BufferedReader: POST 요청에서 요청 본문을 읽기 위해 사용

📌 정리

기능
설명
doGet() 처리
GET 요청을 처리하며 URL, 쿼리 파라미터, 헤더를 출력
doPost() 처리
POST 요청을 처리하며 파라미터와 본문을 출력
HttpServletRequest
요청 정보를 담고 있는 객체, 다양한 메서드 제공
BufferedReader
요청 본문 데이터를 한 줄씩 읽는 데 사용
Share article

harimmon