1. HttpServlet
1️⃣ HttpServlet이란?
Java로 웹 서비스를 만들 때, HTTP 요청/응답을 처리하기 위한 클래스(기반 클래스)
HttpServlet은 **서버(웹 서버 or WAS)**에서 실행되며GET,POST등 HTTP 요청을 받아 처리하는 자바 클래스의 부모 클래스
2️⃣ 어디에 쓰나?
웹은 기본적으로 클라이언트 ↔ 서버 구조로 동작해
- 클라이언트: 브라우저(Chrome, Edge 등)
- 서버: 코드 실행 + 응답 보내기
이때 서버 쪽에서:
- 요청 받고
- 내부 로직 실행하고(DB 처리 등)
- 결과를 HTML, JSON 등으로 응답하는
핵심 역할을 맡는 게 HttpServlet!
3️⃣ HttpServlet의 동작 방식
HttpServlet은 아래 메서드를 제공해 우리가 필요한 것만 override해서 사용
메서드 | 의미 |
doGet() | GET 요청 처리 ( URL로 요청, 조회 등) |
doPost() | POST 요청 처리 ( 폼 제출, 데이터 추가) |
doPut() | 수정 요청 |
doDelete() | 삭제 요청 |
4️⃣ 예시 코드
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
response.getWriter().println("<h1>Hello Servlet!</h1>");
}
}➡
/hello로 GET 요청 들어오면 브라우저에 <h1>Hello Servlet!</h1> 출력5️⃣ HttpServlet의 역할 요약
역할 | 설명 |
요청 수신 | 브라우저/클라이언트 요청 받음 |
처리 | 필요한 내부 로직 실행 (DB, 계산 등) |
응답 생성 | HTML/JSON/Text 등의 응답 작성 |
HTTP 프로토콜 처리 | GET/POST 등 종류별 처리 지원 |
6️⃣ Servlet → HttpServlet → Spring까지 연결
- Servlet: 웹 요청/응답을 다루는 Java 기술
- HttpServlet: 그 중에서 HTTP 기반 웹 처리를 위한 클래스
- Spring MVC : HttpServlet을 내부에서 활용하며 더 편하게 사용하도록 만든 프레임워크
HttpServlet = 웹 개발의 기초Spring은 이를 더 쉽게 쓰도록 만든 도구
2. 실습
1️⃣ doGet()
1) 기본


package com.example.demo;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.do") // url에 localhost:포트번호/????.do 아무거나 적고 끝에 .do만 입력하면 연결됨
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.server.servlet.context.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}



2) getWriter() (BufferedWriter)
package com.example.demo;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.do")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
PrintWriter out = resp.getWriter();
out.println("HelloWorld");
}
}





서블릿 - 자바가 소켓에 http 프로토콜을 얹혀주는 것
그걸 우리는 갖다 쓰는 것
3) Content-type 미입력
package com.example.demo;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.k")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
PrintWriter out = resp.getWriter();
out.println("<h1>GoodBye</h1>");
}
}

4) Content-type 임의로 입력
package com.example.demo;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.k")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
resp.setHeader("Content-Type", "text/plain");
PrintWriter out = resp.getWriter();
out.println("<h1>GoodBye</h1>");
}
}

2️⃣ doPost()
1) 기본

package com.example.demo;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.k")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
resp.setHeader("Content-Type", "text/plain");
PrintWriter out = resp.getWriter();
out.println("<h1>GoodBye</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post ~~~");
PrintWriter out = resp.getWriter();
out.println("<h1>Post</h1>");
}
}


다시 ‘보내기’ 클릭

※ 전체 코드 분석
0️⃣ 원본
1) 코드
package com.example.demo;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* HttpServlet => Socket 서버에 http 프로토콜이 적용된 클래스 (우리가 socket 서버나 버퍼 만들 필요도 없고,
* 프로토콜 생각할 필요도 없음)
*/
@WebServlet("*.k")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloWorld");
resp.setHeader("Content-Type", "text/plain");
PrintWriter out = resp.getWriter();
out.println("<h1>GoodBye</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post ~~~");
PrintWriter out = resp.getWriter();
out.println("<h1>Post</h1>");
}
}
2) 이 파일이 하는 일
브라우저에서 요청이 들어오면
→ 자바 코드가 실행되고
→ 텍스트(또는 HTML)를 응답으로 보내는 역할
즉, 말 그대로 “웹 서버 역할을 하는 자바 코드”
MyServlet은 *.k로 끝나는 주소로 요청이 오면 GET/POST 요청을 구분해서 결과를 되돌려주는 클래스
1️⃣ 코드 분석
1) @WebServlet("*.k")
@WebServlet("*.k")- 브라우저 주소가
.k로 끝나면 호출되라는 뜻
- 예)
http://localhost:8080/test.k→ 실행됨http://localhost:8080/hello.k→ 실행됨/abc.jsp같은 건 실행 ❌
즉, URL 매핑 규칙
2) extends HttpServlet
public class MyServlet extends HttpServlet이 클래스가 HttpServlet을 상속 받았다 = HTTP 요청을 처리할 수 있는 “웹 클래스”가 된다는 뜻
3) doGet() = GET 요청 처리
@Override
protected void doGet(...)- 주소 입력하거나
- 링크 클릭하거나
- 웹에서 기본 요청 → GET
➡️ 브라우저에서 주소 입력할 때 실행
System.out.println("HelloWorld");- 서버 콘솔에 메시지 출력 (브라우저에는 안 보임)
resp.setHeader("Content-Type", "text/plain");- 응답 형식을 지정
- 지금은 텍스트로 보낸다고 표시
PrintWriter out = resp.getWriter();
out.println("<h1>GoodBye</h1>");- 브라우저에 보내는 내용
- 텍스트지만 HTML 태그 문자열 그대로 출력됨
(브라우저는
<h1>을 태그로 인식 안 함, 그냥 글자로 보는 형식)4) doPost() = POST 요청 처리
@Override
protected void doPost(...)- 폼 제출
- Ajax 요청
- 데이터 전송
➡️ 같은 POST 요청이 들어올 때 실행됨
System.out.println("post ~~~");
- 서버 콘솔 출력
out.println("<h1>Post</h1>");
- 브라우저에
<h1>Post</h1>출력
3️⃣ 흐름 요약
URL | GET 요청 | POST 요청 |
/anything.k | <h1>GoodBye</h1> 출력 | <h1>Post</h1> 출력 |
4️⃣ 중요한 포인트
✔
HttpServlet은 웹 요청 처리 클래스✔
doGet()은 GET, doPost()는 POST 요청✔
resp.getWriter().println() 는 브라우저로 텍스트 보내기✔
System.out.println()은 서버 콘솔 로그✔
@WebServlet("*.k")는 주소 매핑 조건Share article