피드백 작성 페이지
- 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 |