수업/정리

220307 액션태그_include, 자바빈_useBean

jumphare 2022. 3. 7. 19:29

 * 액션 태그 : 스크립트, 주석, 디렉티브와 함께 jsp 페이지를 이루는 요소
   : 페이지 사이의 제어, 이동시키거나 (forward)
   : 다른 페이지 실행 결과를 현재 페이지에 포함시키거나 (include)
   : 자바빈을 jsp 페이지에서 사용할 수 있는 기능을 제공 (useBean)

   1. <jsp: forward> : 페이지의 흐름을 제어할 때 (현재 페이지에서 다른 페이지로 이동시킬 때) 사용
   2. <jsp: include> 페이지를 모듈화(페이지 불러오기)할 때 사용

      - 일반적인 사용
         <jsp: include page = "포함될 페이지" flush = "true | false" />
         <jsp: include page = "포함될 페이지" flush = "true | false"></jsp: include>

      - 매개변수 존재할 때
         <jsp: include page = "포함할 페이지" flush = "true | false">
            <jsp: param name = "pName1" value = "var1"/>  //name="변수명"
            <jsp: param name = "pName2" value = "var2"/>  //value="값"
         </jsp: include>

      ※ flush 속성: 포함될 페이지로 이동할 때 현재 페이지가 지금까지 출력 버퍼에 저장된 결과를 어떻게 처리할 것인지 결정하는 것
          true: 지금까지 버퍼에 저장한 내용을 출력(플러시)
          false: 출력하지 않음 (일반적으로 지정)

      - include 디렉티브와의 차이점
        * include 디렉티브: 단순하게 특정 소스의 내용을 텍스트로 포함, 주로 조각 코드를 사용할 때 사용
         -> 디렉티브 태그를 이용하는 경우, 호출한 파일-호출시킨 파일이 하나의 파일처럼 동작
         <%@ include file = "포함될 페이지명" %> (ex. <%@ include file = "header.jsp"%>
        * <jsp: include> 액션 태그페이지(html, jsp, Servlet)의 처리결과까지 포함, 페이지를 모듈화할 때 사용(템플릿 페이지 등), 매개변수 전달 가능

즉 디렉티브 태그는 메인에 붙여서 메인을 완성시키는 쓰임(자바클래스 하나의 파일처럼)인데 액션 태그는 메인에서 불러오되 그 개개의 파일이 각자 동작을 처리할 수 있고 그 결과를 가져올 수 있음(매개변수, 모듈화)

      - java Servlet 파일 저장 위치
        * include 디렉티브한 개의 파일로 java Servlet 파일 생성
        * include 액션태그각각의 파일이 java Servlet 파일로 생성 (모듈화)


 ※★★★ 자바빈(JavaBean) : 자바로 작성된 컴포넌트 클래스
   - 장점
      1. 폼 데이터 처리에 용이 ---> 폼에서 넘어오는 많은 데이터를 저장하고 전달할 수 있음
      2. 재사용성 ★---> 여러 jsp 파일에서 사용할 수 있음
      3. 컴포넌트 기반 구현 ---> jsp, javaBean(DTO), DTO 클래스 분리-각 컴포넌트 별로 기능을 수행

   - 작성법
      1. 자바빈의 멤버변수=property(프로퍼티)
      2. 프로퍼티: 값을 저장하기 위한 필드, private로 선언 (정보 은닉)
        - jsp의 내용을 db에 저장하거나 db에 저장된 내용을 jsp에 출력할 때 중간 데이터 저장소로 사용
        - setXX() 메소드로 값을 저장하고, getXX() 메소드로 호출 (이때 XX=프로퍼티명, 첫글자는 대문자)
        - 하나의 프로퍼티 당 한 쌍의 setter, getter 메소드가 존재
        - setter, getter 메소드는 주로 public 접근 제어자를 사용
      3. 생성자는 거의 사용하지 않고, set, get 메소드를 이용해 매개변수를 프로퍼티로 전달할 것.

     +) jsp 모델1 아키텍쳐
         폼 -> jsp page로 request -> javaBean(DTO)에 중간 저장된 값을 DAO로 넘김 ->
         business logic(DAO)로 db에 연동하고 data store 접근해 정보 가져옴 ->
         javaBean(DTO)에서 중간 저장하고 page로 넘김 -> jsp page에서 폼으로 response

     +) 패키지의 java Resources - src에 javaBean 패키지-SimpleBean.java 클래스 생성!
         (.java 파일은 어차피 webcontent에서 쓸수 없기 때문에... src로 옮겨줘야함
         private String msg 만든 후 source-generate getter and setter -> 둘 다 만들기
       ※ 중요!!! 추가로 매개변수를 더 가져올 경우 여기에 변수+get,set 다 추가해줘야 함!!!


★★★ 자바빈 액션태그
   3. <jsp: useBean> : 자바빈을 사용할 때
      <jsp: useBean id="" class="" scope=""/> : 자바빈 객체 생성
      (id=객체명, class=속성명(패키지 포함)
       scope=유효범위(page(default),request,sesstion,application))

   4. <jsp: setProperty> : 자바빈의 속성값을 저장할 때
      <jsp: setProperty name="" property="" value=""/> : 생성된 자바빈 객체에 프로퍼티 값 저장
      ex.
      <input type="text" name="msg" size="20" maxlength="30"> 로 받은 텍스트를 받아올 때
      <jsp:setProperty name="sb" property="msg" />
       ---> input의 name을 property와 일치시켜야 함
            input name="msg"의 값이 property="msg"를 통해 객체명이 "sb"인 property 변수에 저장됨

     +) 매개변수마다 하나하나 set으로 불러와야 하나요?
      ---> <jsp:setProperty name="sb" property="*"/> 이걸 사용하면 sb 객체에 모든 property 값을 저장할 수 있음 (name값이 일치하는 모든 메소드 값을) 


   5. <jsp: getProperty> : 자바빈의 속성값을 읽어올 때
      <jsp: getProperty name="" property=""/> : 자바빈 객체에 저장된 프로퍼티 값을 가져옴
      ---> name="sb"인 property 변수에 저장된 값을 가져오는 것 (위의 예시에서 input name="msg"의 값이 가져와짐)

   +) 좀 더 간단하게? 가져오는 방법?
      <%= sb.getMsg() %> 이렇게 하면.. 좀 더 간단하게 출력할 수 있다
      원래 
      <%@ page import="javaBean.SimpleBean" %>
      <% SimpleBean sb1=new SimpleBean(); %> 
      이렇게 객체를 생성해두고 출력하는 게 정석이지만 <jsp:useBean>이 객체를 생성하기 때문에 이걸로 생성된 객체는 그냥 사용할 수 있음~!
      


   6. <jsp: plug-in> : 애플릿을 사용할 때 (지금은 애플릿을 사용하지 않음)