Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

2025-11-13(백엔드 - Servlet) 본문

HDC 학습일지

2025-11-13(백엔드 - Servlet)

heewon09 2025. 11. 13. 20:30

jsp 코드 만드는곳

Servlet 정리 - 클라이언트 요청을 처리하는 자바 기술

자바 실행 형태별 구분 

구분                       설명                                   실행 방법

Application         일반 자바 프로그램          public static void main(String[] args) 메소드를 java 클래스명으로 실행

Applet            HTML에 포함되어 실행되는         <applet> 태그에 삽입

Servlet         서버에서 클라이언트 요청을                웹서버(Tomcat)가 호출
                    처리하는 자바 기술                                   

Servlet이란 

  • 서버에서 클라이언트의 요청을 받아서 처리하고 응답을 돌려주는 자바 객체
  • 예 : 로그인 , 회원가입, 게시판 글 목록 예약, 장바구니 등 서버에서 처리해아 할 로직들
  • 실행 위치 : 서버 내부
  • 따라서 HTML 문서 안에 직접 자바 코드를 쓸 수 없고, 서버가 인식할 수 있는 서블릿 클래스 형태로 작성해야 함
  • 서버(Tomcat)가 자동으로 서블릿 객체를 생성하고, 생명주기 메소드를 호출함

Servlet 작성 규칙

서블릿은 반드시 톰캣이 인식할 수 있는 표준 구조 안에 있어야 한다,

<context>               ← 프로젝트 이름 (예: backendtest)
│
├── html, jsp, css, js, image 등
│
└── WEB-INF/
     ├── web.xml            ← 설정 파일 (서블릿 등록, 매핑 정보 등)
     ├── lib/               ← 외부 라이브러리 (mysql-connector.jar 등)
     └── classes/           ← 서블릿, DAO, DTO, Service 클래스

클래스 접근 지정자 

반드시 public class로 작성해야 함 (서버가 외부에서 호출하기 때문)

Servlet (interface)
   ↑
GenericServlet (추상 클래스)
   ↑
HttpServlet (추상 클래스)
   ↑
MyServlet (사용자 정의 클래스)
  • 우리가 작성하는 서블릿은 항상 HttpServlet을 상속받음.
  • HttpServlet은 HTTP/HTTPS 프로토콜과 관련된 기능

오버라이딩해야 하는 주요 메소드

메소드설명호출 시점
init() 서블릿 초기화 (객체 생성 직후 1회 실행) 처음 로드될 때
service() 클라이언트 요청 시마다 호출 (GET/POST 관계없이) 요청마다
doGet() GET 방식 요청 시 실행 요청마다
doPost() POST 방식 요청 시 실행 요청마다
destroy() 서블릿 객체가 소멸될 때 실행 서버 종료 시

클라이언트 요청이 들어오면 서버가 자동으로 호출하는 메소드들.

서블릿 등록 방법

서버가 어떤 URL로 요청이 들어올 때 어떤 서블릿을 실행할지 알아야 함.
이걸 등록 + 매핑(mapping) 작업이라고 함.

① web.xml 설정

<servlet>
  <servlet-name>first</servlet-name>
  <servlet-class>basic.FirstServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>first</servlet-name>
  <url-pattern>/first.naver</url-pattern>
</servlet-mapping>

② Annotation 방식

@WebServlet("/first.naver")
public class FirstServlet extends HttpServlet { ... }

구성 요소의미

http:// 프로토콜
localhost 서버 IP
8088 포트 번호
backendtest 프로젝트(Context) 이름
/iot/second 서블릿 매핑 경로

5. 요청 방식 (GET vs POST)

구분GETPOST
데이터 위치 URL에 포함 HTTP Body에 포함
보안성 낮음 (주소창 노출) 높음 (숨겨서 전송)
사용 목적 조회/검색용 등록/수정/삭제용
전송 방법 주소창, 하이퍼링크, form(method="get") form(method="post")
파일 업로드 가능 x O

6. 서블릿에서 요청 정보 추출

http://localhost:8088/serverweb/life.do?id=bts1&pass=1234

→ 서버는 요청이 들어오면 HttpServletRequest 객체를 만들어 전달함.
→ 우리는 request.getParameter("id") 식으로 값을 추출할 수 있음.

String id = request.getParameter("id");
String pass = request.getParameter("pass");

7. Servlet LifeCycle (생명주기)

클라이언트 요청 → 서버가 서블릿 객체 생성 → init() 실행
   ↓
요청 들어올 때마다 service() → doGet()/doPost() 실행
   ↓
서버 종료 또는 reload 시 destroy() 실행

 

구분핵심 내용
Servlet 정의 서버에서 클라이언트 요청을 처리하는 자바 클래스
필수 상속 클래스 HttpServlet
주요 메소드 init(), service(), doGet(), doPost(), destroy()
등록 방법 web.xml 또는 @WebServlet
요청 방식 GET (조회) / POST (등록, 수정, 삭제)
위치 /WEB-INF/classes 내부 (톰캣이 인식하는 표준 디렉토리)

전체 흐름 다이어그램

 ┌──────────────────────────────┐
 │         [Client / Browser]   │
 │ ───────────────────────────  │
 │ HTML, JS, Form → 요청(Request)│
 │ 예: GET /member?id=woohee    │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │        [Servlet - Controller]│
 │------------------------------│
 │ ① 요청 분석 (파라미터 추출)   │
 │    String id = req.getParameter("id");│
 │ ② Service 호출                │
 │    MemberDTO dto = service.getMember(id);│
 │ ③ 결과를 JSP로 전달            │
 │    req.setAttribute("member", dto);     │
 │    forward("/memberInfo.jsp");          │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │          [Service Layer]     │
 │------------------------------│
 │ 비즈니스 로직 처리 (데이터 검증, 조건문 등)│
 │ DAO 호출                     │
 │    dao.getMember(id);         │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │              [DAO]           │
 │------------------------------│
 │ JDBC를 이용해 DB 접근         │
 │ SQL 실행 → ResultSet 처리      │
 │ DB 데이터 → DTO로 변환         │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │              [DB]            │
 │------------------------------│
 │ 실제 데이터 저장소(MySQL 등) │
 │ SELECT / INSERT / UPDATE ... │
 └──────────────┬───────────────┘
                │ (결과 반환)
                ▼
 ┌──────────────────────────────┐
 │          [Service]           │
 │------------------------------│
 │ DAO 결과를 받아서 리턴         │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │          [Servlet]           │
 │------------------------------│
 │ JSP에게 데이터 전달(request.setAttribute)│
 │ JSP로 Forward(이동)           │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │          [JSP(View)]         │
 │------------------------------│
 │ HTML + EL(${member.id}) 출력 │
 │ 브라우저로 Response 전송     │
 └──────────────┬───────────────┘
                │
                ▼
 ┌──────────────────────────────┐
 │        [Client 화면]         │
 │------------------------------│
 │ HTML이 렌더링되어 사용자에게 표시 │
 │ 예: “아이디: woohee 이름: 우희” │
 └──────────────────────────────┘

'HDC 학습일지' 카테고리의 다른 글

2025-11-17(Spring)  (1) 2025.11.17
2025-11-14(서블릿, jsp 구조 파악, 스프링)  (0) 2025.11.17
2025-11-12(React -final)  (1) 2025.11.13
2025-11-11(react)  (0) 2025.11.12
2025-11-10(javascript - final)  (0) 2025.11.11