액션 태그는 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
스크립트 태그, 주석, 디렉티브 태그와 함게 JSP 페이지를 구성하는 태그
커스텀 태그의 일종
액션 태그는 JSP 페이지에서 페이지와 페이지 사이를 제어하거나(forward), 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나(include), 자바빈즈(javaBeans)등의 다양한 기능을 제공
XML 형식 <jsp:... />를 사용합니다. 액션 태그는 반드시 끝나는 태그 />로 마무리해야 합니다.

<jsp:forward page="이동할 페이지 - JSP, html, text, servlet 경로" />
- 페이지 이동은(주소이동) 아님 -> 버퍼의 치환임 / 버퍼를 통제함
HttpServletResponse

🔼응답헤더에 Location 추가 -> 페이지 이동

버퍼: 임시메모리

버퍼에 ex01.jsp이라는 결과물이 담겨있는데
출력하다가 jsp의forward를 만나면 기존 쌓여있던 버퍼를 비워버린다. forward에 정의된 페이지쪽의 내용을 교체해버림!
ex01 -> 02 페이지 이동아님
ex03 -> 02 페이지 이동

🔽🔽

응답코드 302(임시이동) 페이지 이동!
<jsp:include page="추가될 페이지">👩🏫참고)
ServletRequest내
RequestDispatcher
->forward(): 버퍼를 치환
->include(): 버퍼를 추가
메서드 존재
- 서블릿 내에서는 <jsp:forward/> <jsp:include page=".."/>태그들을 사용 못하기 때문에(태그는 jsp에서) RequestDispatcher로 해당 메서드들을 사용한다.
페이지 이동 = 주소이동
-> Location이 바뀌어있어야함
HttpServletResponse안에 sendRedirect를 이용해서 Location을 변경시킬 수 있다.
M - Model
V(View) - JSP 담당
:처리 결과 응답(화면출력)
C(Controller) - Servlet 담당
: 사용자의 요청이 들어오는 곳
역할분담
컨트롤러쪽에서 처리하고 처리 결과는 서블릿을 통해야지만 view에서 출력이 된다.

처리 결과는 뷰에서 출력


//서비스 처리 부분은 서블릿을 통해야지만 처리 결과가 나오는 구조이다. -> doGet메서드가 실행 되어야지만!!! 처리되겠죠?!
처리 결과는 뷰가 출력
서블릿을 거치치 않고 jsp로 접근되어 출력되기때문에 처리완료가 뜨지않는다.
💥서블릿 내에서만 접근하도록!!!! jsp파일에 직접 접근 하도록 하면 안된다.
-> webapp폴더는(경로 /) 서블릿 외부에서 접근 가능
-> WEB-INF폴더는 설정을 넣는 폴더, 자원 접근 x 서블릿 내부에서만 접근이 가능하다. 따라서 jsp를 뷰로 쓰는 경우에는 여기에 정의해야한다.

🔼이렇게 하면 주소로 직접 접근 못하도록 막아져있다.
order/order.jsp 접근불가!!


include 액션태그 출력 버퍼에 추가
<jsp:include page="추가될 페이지">

include 디렉티브 태그는 출력 결과물이 물리적으로 소스 형태로(코드 형태) 추가
<%@ include file="파일 경로" %>

<jsp:forward/> <jsp:include/>request.getParameter() 를 통해서 조회 가능
param쪽 내용이 forward page경로로 데이터 전송이 된다.

한글을 안전하게 보내기 위해선.. URL인코딩..


인코딩된 URL을 바꿔주는 디코더
디코딩을 통해서 원래 형태로 바꿈!


👩🏫참고)
속성을 관리하는 4가지 객체💟
속성: 뷰에서 사용할 수 있는 데이터
PageContext pageContext: 하나의 jsp페이지에서만 데이터 조회 가능
HttpServletRequest request: 하나의 요청이 처리되는 범위에서 조회 가능
HttpSession session: 세션이 유지되는 범위에서 조회 가능
ServletContext application: 애플리케이션이 종료되기 전까지 조회 가능
void setAttribute(String name, Object value): 속성 지정/ 없을땐 추가, 있을땐 수정Object getAttribute(String name):속성 조회void removeAttribute(String name): 속성 제거데이터가 유지되는 범위
pageContext < request <sesstion < application




다시 게시판 만들어보자
MVC
maven 의존성 추가






서비스 만들기



Bean -> 자바 객체
1) 자바빈즈 : 데이터 표현을 목적으로 하는 자바 클래스
2) 자바빈즈 작성 규칙

빌더패턴은 new로 직접 객체생성 목적이 아님!
생성자 접근제어자 범위가 private으로 되어있다


기본 생성자가 있어야한다! 없으면 url요청시 오류
3) useBean 액션 태그로 자바빈즈 사용하기
<jsp:useBean id=“자바빈즈 식별이름” class=“패키지명을 포함한 자바빈즈 이름” scope=“범위” />

scope: 자바 빈스 객체 속성값 유지 범위(조회 가능 범위)
- page(기본값)/ pageContext범위에서 조회 가능
- request/ HttpServletRequest 범위에서 조회 가능(요청 처리 범위)
- session/ HttpSession
- application/ ServletContext
scope 설정 x -> 기본값일때



리스트에 항목 추가해도 나오지않음

scope request로 변경하고나서!


4) setProperty 액션 태그로 프로퍼티 값 저장하기
//setter 메서드 호출
setter을 대신하는 프로퍼티!
<jsp:setProperty name=“자바빈즈 식별 이름” property=“프로퍼티 이름” value=“값” />


5) getProperty 액션 태그로 프로퍼티의 값 가져오기
//getter 메서드 호출
getter을 대신하는 프로퍼티!

조회 쟈쟌~


📢📢set하고 get으로 조회하고 이런식으로 불러오는건 사실 비효율적이다. 출력문에서 바로 값 넣고 출력하는게 효율적일거다.
다만 name값은 다 동일해야한다.



