-
[ Servlet / JSP ] 7. JSP action tag스타터스 백엔드 3기 2023. 1. 9. 17:11
하루입니다.
복습!!!
- 톰캣은 웹 서버이면서 서블릿 컨테이너이면서 JSP 컨테이너 기능도 한다.
- web application server는 servlet container와 jsp container가 필요하다.
- <% out.print("jsp") %>와 <%= "jsp" %>는 같다.
- session은 서블릿끼리 (동브라우저끼리) 공유!
- applicaion(context 객체)는 동서버 동웹어플리케이션끼리 공유! 서버만 안 닫히면 된다!!
- forward 되어야 한다! 그러면 request 사용!
- 현재 브라우저 내부에서 실행된다! 그러면 session 사용!
- 다른 브라우저에서도 실행된다! 그러면 application 사용!
JSP action tag
- jsp의 등장배경은 자바 코드를 자제하자는 것이다.
- jsp는 웹화면(html)으로 보여줄 콘텐츠를 로직(java)로 구현하는 것이다.
- 그래서 태그이지만 실행시 자바로 동작하는 aciton 태그가 생겼다.
- 상대경로 : <img alt="" src="../images/html5.jpg">
- 절대경로 : <img alt="" src="<%=request.getContextPath() %>/images/html5.jpg">
<jsp:include
page="b.jsp"/>
- 동일한 서버, 동일한 context여야 한다.
- 다른 파일을 포함하겠다.
- a.jap <jsp:include page="b.jsp"/>
=> b.jsp 실행한다.
=> a.jsp로 돌아온다. 실행권이 a.jsp에 있다.
=> 실행 결과만 포함한다.
- 여러 페이지에 들어갈 공통적인 내용이 들어간다. 로고, 오시는 길 등
만약 a.jsp라는 파일에서
1 ;
<jsp:include page="b.jsp"/> [ b.jsp 2 ; ]
3 ;
이라면, 1 2 3이 실행된다.<jsp:forward
page="b.jsp"/>
- 동일한 서버, 동일한 context여야 한다.
- 다른 파일로 이동하겠다.
- 제어 자체가 b.jsp로 이동한다.
만약 a.jsp라는 파일에서
1 ;
<jsp:forward page="b.jsp"/> [ b.jsp 2 ; ]
3 ;
이라면, 1 2만 실행된다. 돌아오지 않는다.
<jsp:useBean />
- 자바 객체 생성 태그이다.
- id와 class는 필수이다.


----------------------- 그 외 ---------------------
- scope = "page(기본)" / request, session, application
<jsp:useBean id="a" class="test.A" scope="request" />
호오오 굉장히 신기한useBean의 scope 전달법

<jsp:setProperty />
property="id" name="useBean 태그의 id 속성값"

<jsp:getProperty /> 
<jsp:param /> 
객체 전달은 불가하다. 객체 전달은 request.getAttribute() 를 사용하자.
include와 객체 전달
- request. 를 사용하면 include되는 파일에 자동 전달된다.
- 아래는 loginform.jsp이다. 이 파일에서 getMember()를 사용해 나온 결과를 dto에 담아서 request객체의 attribute에 set 했다. 이 값을 받는 화면 (bottom.jsp) 에서는 request.getAttribute()를 사용해서 값을 꺼낸다.


forward
- 아이디 입력해 주세요가 뜨지 않는 이유
- forward는 이전에 적힌 것들을 다 무시한다. 당연함
- id가 null이라 else 블럭에 있다. <%=filebname%>으로 이동해야 하지만 하지만 filename=null이라 이동할 페이지가 없다. 그래서 404 에러페이지가 떴다.

<jsp:setProperty /> <jsp:getProperty />
- 각각 setId(), getId()와 같다.

- setProperty를 사용할 때, param을 사용하면 parameter를 받는 것이다.
- value를 사용하는 것은 직접 값을 setting 하는 것이다.
- 만약 form에서 넘어오는 name과 setPriperty의 param이 같다면 param을 생략 가능하다.


- name과 param명이 모두 같은 상태에서 setProperty property="*" 를 입력하면 dto의 모든 프로퍼티값이 setter된다.

<jsp:useBean /> 의 작동 원리
- a.jsp, b.jsp 파일이 있다.
- useBean으로 만든 객체를 다른 서블릿 / 세션 / application 으로 전달하고 싶다.
- a.jsp에서 test 패키지의 A라는 클래스를 id는 a, scope="request"로 해서 보냈다.
- b.jsp에서 같은 이름, 클래스, scope로 받는다. 하나라도 다르게 적으면 안 된다.
- 분기 갈림 !!!
5-1. 만약 a라는 이름의 request 받은 객체가 없다! 그러면 test 패키지의 A 객체를 만든다! 그러면 이 a 객체는 다른 페이지로 request에 담겨서 넘어가겠지!
5-2. 만약 a라는 이름의 request 받은 객체가 있다! 그러면 있는 a객체를 사용한다!

이건 사용법 
이게 작동원리 jsptext : member !!


실습파일 : jsptext - webapp - include / forward / member 폴더 확인
'스타터스 백엔드 3기' 카테고리의 다른 글
[ Servlet / JSP ] 9. AJAX (0) 2023.01.10 [ Servlet / JSP ] 8. JSP el, jstl 태그 (0) 2023.01.09 유데미 스타터스 취업 부트캠프 3기 - 백엔드 7주차 (0) 2023.01.06 [ Servlet / JSP ] 5. 필터 (0) 2023.01.05 [ Servlet / JSP ] 4. 쿠키와 세션 (0) 2023.01.05