JSP/STUDY

[JSP] JSP 실습예제 - 4

코맹 2024. 8. 30. 14:18

 

 

 

피드백 작성 페이지
- feedbackSubmission.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Feedback Submission</title>
</head>
<body>
	<h2>Feedback Submission</h2>
	<form action="submitFeedback" method="post">
		<input name="feedback" placeholder="피드백을 작성해주세요">
		<input type="submit" value="제출">
	</form>
</body>
</html>
  • <form> 태그를 통해 클라이언트에서 서버로 데이터 전달

 

클라이언트가 보낸 데이터에 대한 비즈니스 로직 처리 후 피드백 요약 페이지로 전달
- FeedbackSubmissionServlet.java
package ex04;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/submitFeedback")
public class FeedbackSubmissionServlet extends HttpServlet{

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	// 사용자로부터 받은 피드백 데이터를 가져옵니다.
        String feedback = req.getParameter("feedback");
        System.out.println(feedback);

        // 애플리케이션 범위에 저장된 피드백 리스트를 가져옵니다.
        ServletContext context = getServletContext();
        ArrayList<String> feedbackList = (ArrayList<String>) context.getAttribute("feedbackList");
        System.out.println(feedbackList);
        
        
        // 처음 실행시 feedbackList가 null일 경우, 새로운 리스트를 생성합니다.
        if (feedbackList == null) {
            feedbackList = new ArrayList<>();
            context.setAttribute("feedbackList", feedbackList);
        }

        // 피드백 리스트에 새로운 피드백을 추가합니다.
        feedbackList.add(feedback);

        // 피드백 제출 후에는 피드백 요약 페이지로 리다이렉트합니다.
        resp.sendRedirect("feedbackSummary");
    }
		
	}

 

✔️ ServletContext

  • ServletContext 클래스는 톰캣 컨테이너 실행 시 각 컨텍스트(웹 애플리케이션)마다 한 개의  ServletContext 객체를 생성하고, 톰캣 컨테이너가 종료하면 ServletContext 객체도 소멸된다.
  • ServletContext 객체는 웹 애플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하여 사용한다.

 

특징

  • 서블릿과 컨테이너 간의 연동을 위해 사용한다.
  • 컨텍스트(웹 애플리케이션)마다 하나의 ServletContext가 생성된다.
  • 서블릿끼리 자원(데이터)을 공유하는 데 사용한다.
  • 컨테이너 실행 시 생성되고 컨테이너 종료시 소멸된다.

 

ServletContext가 제공하는 기능

  • 서블릿에서 파일 접근 기능
  • 자원 바인딩 기능
  • 로그 파일 기능
  • 컨텍스트에서 제공하는 설정 정보 제공 기능

 

ServletContext에서 제공하는 여러 가지 메서드

  • getAttribute(String name)
    • 주어진 name을 이용해 바인딩 value를 가져온다.
    • name이 존재하지 않으면 null을 반환한다.
  • getAttributeNames()
    • 바인딩된 속성들의 name을 반환한다.
  • getContext(String uripath)
    • 지정한 uripath 에 해당되는 객체를 반환한다.

💡 getServletContext() 메서드를 통해 ServletContext 객체에 접근한다.

💡 context.setAttribute() 메서드를 통해 ServletContext 객체에 데이터를 바인딩한다.

ServletContext에 바인딩된 모든 데이터는 모든 서블릿(사용자)들이 접근할 수 있다.
따라서, 웹 애플리케이션에서 모든 사용자가 공통으로 사용하는 데이터는 ServletContext에 바인딩 해놓고 사용하면 편리하다.

 

✔️ response.sendRedirect()

  • 클라이언트에서 데이터를 가지고 서버로 이동하는 방법
  • 대표적으로 sendRedirect()와 forward() 방식이 있다.
  • sendRedirect()는 반드시 doGet() 메서드로 이동하게 되며  주로 단순 이동시 사용되는 방식이다.
  • forward() 방식은 데이터를 가지고 이동할 때 자주 사용된다.

 

feedback 값들이 저장되어 있는 feedbackList를 jsp에 전달
- FeedbackSummaryServlet.java
package ex04;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/feedbackSummary")
public class FeedbackSummaryServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		 // 애플리케이션 범위에서 피드백 리스트를 가져옵니다.
        ServletContext context = getServletContext();
        ArrayList<String> feedbackList = (ArrayList<String>) context.getAttribute("feedbackList");

        // 피드백 리스트를 request 속성에 설정합니다.
        req.setAttribute("feedbackList", feedbackList);
        
        resp.setContentType("text/html; charset=UTF-8");

        // 피드백 요약 페이지로 포워딩합니다.
        RequestDispatcher dispatcher = req.getRequestDispatcher("/feedbackSummary.jsp");
        dispatcher.forward(req, resp);
        
    }
}

 

 

피드백 요약 페이지
- feedbackSummary.java
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Feedback Summary</title>
</head>
<body>
	<h2>Feedback Summary</h2>
	<c:forEach var="feedback" items="${feedbackList}">
		<li> ${feedback}</li>
	</c:forEach>
</body>


</html>

 

 

✔️ <c:forEach>

  • JSTL 반복문으로, 사용하기 위해서는 JSP 파일 상단에 JSTL core 선언이 필요하다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

 

속성

항목 설명 필수 여부 기본값
var 사용할 변수명 필수 없음
items Collection 객체(List, Map) 필수  
begin 반복 시작 index    
end 반복 종료   마지막 index
step 반복할 때마다 건너뛸 index 개수    
varStatus 반복 상태를 알 수 있는 변수    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

📌 참고 자료

 

[서블릿] ServletContext

ServletContext 클래스는 톰캣 컨테이너 실행 시 각 컨텍스트(웹 애플리케이션)마다 한 개의 ServletContext 객체를 생성함. 그리고 톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸 됨.ServletContext

velog.io

 

 

Servlet : Java에서 데이터 보내는방식 1 ( sendRedirect )

web ( client ) Java ( server ) * web (client) ------> Java (Server) : 클라이언트에서 데이터를 가지고 자바로 이동할 수 있는 몇가지 방법이 있다 ( 다음에 알아보자 ) 마찬가지로, Java의 servlet에서 다른 곳으로

sunnnkim.tistory.com

 

 

JSTL 반복문(forEach) 사용법 정리

JSTL 반복문 반복문은 동일한 작업을 특정 횟수 만큼 반복할 때 사용한다. JSTL에서는 제일 흔하게 사용하는 에 대해서 알아보자. 지시문 선언 반복문을 사용하려면 JSP 파일 상단에 JSTL core 선언이

thefif19wlsvy.tistory.com

 

'JSP > STUDY' 카테고리의 다른 글

[JSP] JSP 실습예제 - 5  (0) 2024.09.02
[JSP] JSP 실습예제 - 3  (0) 2024.08.30
[JSP] JSP 실습예제 - 2  (0) 2024.08.29
[JSP] JSP 실습예제 - 1  (0) 2024.08.29
[JSP] request.getParameter()  (0) 2024.05.20