java에서 제공하는 클래스로,클라이언트 사이드에서 보낸 http 통신의 요청에 대해서 응답을 하는 역할
작동 원리 :
1) 클라이언트에서 요청 보냄
2) 웹서버에서 요청 수령
3) 웹서버가 WAS에 동적 페이지에 대한 처리 요청
4) WAS(Tomcat 등)는 어플리케이션 실행 시 Servlet를 호출하여 객체 생성 및 초기화(@WebServlet 붙어 있는 클래스 찾아서)
5) 클라이언트의 요청 시, 위 Servlet의
-HttpServletRequest 및 HttpSerlet Response 생성
-Service() 메서드 호출하여 동적 페이지 처리하는 로직 및 html 생성
/* java 코드로 비즈니스 로직 처리하는 코드 작성 하기에는 servlet이더 편하지만
html 생성은 jsp로 코드 짜기가 더 편하니까 jsp에 시켜 버리자
그렇게 하기 위해 view forwarding을 하자(보이는 view, 즉 html은 jsp에 시키자. */
RequestDispatcher dispatcher
// HttpServletResponse.getRequestDispacher(리소스) :
// -> 특정 리소스(예: JSP, 서블릿 등)의 경로를 인수로 받아 RequestDispatcher 객체를 반환
= req.getRequestDispatcher("/WEB-INF/chap04/dancer/register.jsp");
// 위에서 만든 RequestDispatcher를 jsp 파일에 보내자
dispatcher.forward(req, resp);
/*
Servlet이 RequestDispatcher를 통해 HttlRequest/ResponseServlet을 JSP에서 전달해서 JSP에서 html 생성해달라고 요청할 때,
먼저 HttpRequestServlet에 필요한 정보를 전달해주어야 함
=> 어떻게??
=> 1) Servlet에서 HttpRequestServlet.setAttribute(String 속성이름, Object 속성값)로 전달하고자 하는 정보 저장
2) JSP에서 EL(Expressive Language)인 ${}로 정보를 가져올 수 있음
*/
req.setAttribute("dancer", dancer);
Maven 빌드 도구 사용 시, JSP 파일은 정적 웹페이지 저장 위치인 webapp 경로 저장
<%@ page %>
: 페이지 설정 관련 JSP 지시어 문법
<%@ taglib %> : 라이브러리 가져오기
// uri에 적힌 라이브러리를 사용할 건데
// 이 라이브러리를 사용할 떄는 prefix인 c를 사용하여 <c: > 형태로 쓰겠다. --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
/* 아래에서 ${dancer.name}의 경우,
Servlet에서 HttpServletRequest.setAttribute("dancer"(String 속성이름), dancer(Object 속성값))으로
설정한 후 RequestDispatcher를 forward하여dancer 객체를 보내준 것을
EL(EXPRESSIVE LANGUAGE)를 통해 받아오는 기법이다.
이 때, crew가 private field 더라도 EL에서 자동으로 dance.crew를 dance.getCrew()로 변환해준다.
*/
<h2>${dancer.name}님 (소속: ${dancer.crewName})이 정상 등록되었습니다.</h2>
// jstl 라이브러리를 가져와서 <c:> 형식의 태그로 쓰겠다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
// jstl 태그의 forEach 태그를 쓰겠다
<c:forEach var="d" items="${dancers}">
<li>
# 이름: <span class="dancer-name">${d.name}</span>,
# 크루명: ${d.crewName},
# 수준: ${d.danceLevel}
<button class="del-btn">삭제</button>
</li>
</c:forEach>
// 이렇게 하면, 이 파일이 servlet으로 변환되면서 자동으로 태그를 생성해줌
<p th:text="'Welcome, ' + ${name} + '!'">Welcome, Guest!</p>// JSP : <c:forEach var="item" items="${items}"></c:forEach>
<ul>
<li th:each="item : ${items}" th:text="${item}">Sample Item</li>
</ul><div th:fragment="fileToInsert">2) frag 가져오기<div th:insert="~{commonParentFolder.fileName :: header}">