ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 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 /> 의 작동 원리

    1. a.jsp, b.jsp 파일이 있다.
    2. useBean으로 만든 객체를 다른 서블릿 / 세션 / application 으로 전달하고 싶다.
    3. a.jsp에서 test 패키지의 A라는 클래스를 id는 a, scope="request"로 해서 보냈다.
    4. b.jsp에서 같은 이름, 클래스, scope로 받는다. 하나라도 다르게 적으면 안 된다.
    5. 분기 갈림 !!!

    5-1. 만약 a라는 이름의 request 받은 객체가 없다! 그러면 test 패키지의 A 객체를 만든다! 그러면 이 a 객체는 다른 페이지로 request에 담겨서 넘어가겠지!

    5-2. 만약 a라는 이름의 request 받은 객체가 있다! 그러면 있는 a객체를 사용한다!

    이건 사용법

     

     

    이게 작동원리

     

     

     

     

    jsptext : member !!

     

     


    실습파일 : jsptext - webapp - include / forward / member 폴더 확인

     

     

Designed by Tistory.