요청->서블릿->뷰 3단계 설명

🔍 1순위: HTTP 요청/응답  

GET vs POST 

// 패턴 1: 폼 보여주기 → 처리하기
@WebServlet("/exam7_2")
public class exam7_2 extends HttpServlet {

    // 사용자가 주소창에 입력하거나 링크 클릭 → GET
    protected void doGet() { 
        // 📄 폼 JSP 보여주기
        dispatcher.forward(req, resp);
    }

    // 사용자가 폼에서 submit 버튼 클릭 → POST  
    protected void doPost() { 
        // 🔧 실제 처리 (파일 업로드, DB 저장 등)
        dispatcher.forward(req, resp);
    }
}

 

  • GET: 데이터 가져오기, URL에 데이터 노출 OK
  • POST: 데이터 보내기, URL에 데이터 숨김
  • 언제 GET: 폼 보여주기, 목록 보기, 검색
  • 언제 POST: 파일 업로드, 로그인, 회원가입

🔗 2순위: JSP → 서블릿 데이터 전송

<!-- JSP: 데이터 보내기 -->
<form action="exam7_2" method="post">
    <input type="text" name="username">     <!-- name이 키! -->
    <input type="file" name="profileImg">   <!-- name이 키! -->
    <input type="submit" value="전송">
</form>
// 서블릿: 데이터 받기
String username = req.getParameter("username");      // name="username"
String filename = multi.getFilesystemName("profileImg"); // name="profileImg"

서블릿 → JSP 데이터 전송

// 서블릿: 데이터 보내기
req.setAttribute("userInfo", username);      // "userInfo"라는 이름으로 보냄
req.setAttribute("uploadedFile", filename);  // "uploadedFile"이라는 이름으로 보냄

RequestDispatcher dispatcher = req.getRequestDispatcher("result.jsp");
dispatcher.forward(req, resp);
<!-- JSP: 데이터 받기 -->
<%
String userInfo = (String) request.getAttribute("userInfo");        // 같은 이름!
String uploadedFile = (String) request.getAttribute("uploadedFile"); // 같은 이름!
%>

<h3>사용자: <%= userInfo %></h3>
<img src="images/<%= uploadedFile %>">

 

  • name 속성 ↔ getParameter() 연결
  • setAttribute() ↔ getAttribute() 연결
  • 문자열 이름이 정확히 일치해야 함

🗺️ 3순위: URL 매핑과 경로 이해 

URL이 어떻게 연결되는가?

@WebServlet("/exam7_2")  // ← 이게 URL!
public class exam7_2 extends HttpServlet {
<form action="exam7_2">  <!-- ← 같은 이름! -->
<a href="exam7_2">다시하기</a>  <!-- ← 같은 이름! -->
브라우저 주소창: http://localhost:8080/JSPBook/exam7_2
                                      ↑
                                 @WebServlet("/exam7_2")

JSP 파일 경로

// 서블릿에서 JSP 호출
RequestDispatcher dispatcher = req.getRequestDispatcher("chapter07/fileupload02.jsp");
                                                      // ↑
                                                // 실제 파일 경로
프로젝트 구조:
src/main/webapp/
├── chapter07/
│   ├── fileupload02.jsp      ← 여기!
│   └── fileupload02_process.jsp
└── resources/
    └── images/

 

  • 상대 경로 vs 절대 경로
  • 웹앱 컨텍스트 경로
  • 서블릿 URL 패턴

📝 4순위: JSP 스크립틀릿 패턴 

JSP에서 자바 코드 쓰는 패턴들

<%
// 1. 데이터 받기
String name = (String) request.getAttribute("name");
List<String> items = (List<String>) request.getAttribute("items");

// 2. 조건 처리
if (name != null) {
    out.println("안녕하세요 " + name + "님!");
} else {
    out.println("이름이 없습니다.");
}

// 3. 반복 처리
for (String item : items) {
    out.println("<p>" + item + "</p>");
}
%>

<!-- 4. 표현식으로 출력 -->
<h3>이름: <%= name %></h3>
<h3>파일: <%= filename %></h3>

🎯 공부할 것:

  • <% %> (스크립틀릿): 자바 코드
  • <%= %> (표현식): 값 출력
  • <%! %> (선언): 메서드 선언
  • 조건문, 반복문 패턴

🔄 5순위: 요청-처리-응답 사이클 

 

1. 사용자가 주소 입력/링크 클릭
   ↓
2. 브라우저가 서버에 GET 요청
   ↓  
3. @WebServlet("/exam7_2")의 doGet() 실행
   ↓
4. RequestDispatcher로 JSP 폼 보여주기
   ↓
5. 사용자가 폼 작성 후 submit 클릭
   ↓
6. 브라우저가 서버에 POST 요청 (form 데이터 포함)
   ↓
7. 같은 서블릿의 doPost() 실행
   ↓  
8. req.getParameter()로 폼 데이터 받기
   ↓
9. 파일 처리, DB 저장 등 비즈니스 로직
   ↓
10. req.setAttribute()로 결과 데이터 설정
    ↓
11. RequestDispatcher로 결과 JSP로 이동
    ↓
12. JSP에서 request.getAttribute()로 데이터 받아서 HTML 생성
    ↓
13. 완성된 HTML을 브라우저에 응답

연습 

Step 1: 

<!-- 폼 -->
<form action="test" method="post">
    <input type="text" name="message">
    <input type="submit" value="전송">
</form>
// 서블릿
@WebServlet("/test")
public class TestServlet extends HttpServlet {
    protected void doGet() { /* 폼 보여주기 */ }
    protected void doPost() { 
        String message = req.getParameter("message");
        req.setAttribute("result", message);
        // 결과 JSP로 이동
    }
}
<!-- 결과 -->
<h3>받은 메시지: <%= request.getAttribute("result") %></h3>

Step 2: 

  • 여러 개 input 추가
  • 파일 업로드 추가
  • 조건문, 반복문 추가
  • 에러 처리 추가

📚 

웹 기초

  • HTTP GET/POST 차이점
  • HTML form 태그와 input 태그
  • URL 구조와 경로

서블릿 핵심

  • @WebServlet 어노테이션
  • doGet() vs doPost() 역할
  • HttpServletRequest/Response 객체
  • RequestDispatcher.forward()

JSP 핵심

  • 스크립틀릿 <% %> 사용법
  • 표현식 <%= %> 사용법
  • request 내장 객체

데이터 전달

  • req.getParameter() ↔ HTML name 속성
  • req.setAttribute() ↔ request.getAttribute()
  • form action ↔ @WebServlet URL