1.3 Servlet과 JSP 기초

1. 프로젝트 디렉토리 구조 (Maven 기준)

project-root
├── src
│   ├── main
│   │   ├── java          # 자바 소스 코드 (Servlet, Model 등)
│   │   ├── resources     # 설정 파일
│   │   └── webapp        # 웹 리소스 루트
│   │       ├── WEB-INF   # 외부에서 직접 접근 불가 (web.xml 등)
│   │       ├── index.jsp # 메인 페이지
│   │       └── css/      # 정적 리소스
└── pom.xml               # Maven 설정 파일

2. JSP (Java Server Pages) 기본 문법

HTML 코드 안에 자바 코드를 삽입하여 동적인 페이지를 만듭니다.

1) 스크립트릿 (Scriptlet): <% ... %>

자바 로직 코드를 작성하는 영역입니다.

<%
    String name = "홍길동";
    int age = 20;
%>

2) 표현식 (Expression): <%= ... %>

변수나 메소드의 반환값을 화면(HTML)에 출력합니다.

<p>이름: <%= name %></p>
<p>나이: <%= age %></p>

3) 지시자 (Directive): <%@ ... %>

페이지 속성 등을 정의합니다. 가장 상단에 위치합니다.

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>

3. Servlet 기초

자바 클래스로 웹 요청을 처리합니다. @WebServlet 어노테이션으로 URL을 매핑합니다.

HelloServlet.java

package com.example.backend;

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("/hello") // URL 매핑: localhost:8080/hello 로 접속 시 실행
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 응답 데이터 타입 및 인코딩 설정
        resp.setContentType("text/html; charset=UTF-8");
        
        // HTML 출력
        resp.getWriter().println("<h1>Hello from Servlet!</h1>");
        resp.getWriter().println("<p>서블릿에서 보낸 응답입니다.</p>");
    }
}

4. 실습: 구구단 출력하기

JSP를 이용하여 2단부터 9단까지 출력하는 페이지를 만들어보세요.

<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>구구단</title></head>
<body>
    <h2>구구단 출력</h2>
    <%
        for(int i=2; i<=9; i++) {
    %>
        <h3><%= i %></h3>
        <%
            for(int j=1; j<=9; j++) {
        %>
            <%= i %> x <%= j %> = <%= i*j %> <br>
        <%
            }
        %>
        <hr>
    <%
        }
    %>
</body>
</html>
서브목차