ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 표준 액션태그와 JSP 자바빈즈
    Servlet 2019. 3. 4. 13:52

    JSP 내장 객체는 컨테이너가 자바 소스로 변환 할때 미리 인스턴화 되고 초기화되어서 

    JSP페이지 내에서 바로 사용할 수 있다.

    따라서 서블릿 코드를 작성 할때보다 훨씬 간결하게 API를 이용하여 JSP페이지를 작성 할 수있다.

    XML기반 JSP 태그도 내장객체와 동일한 장점이있다.

    XML 기반 JSP 태그는 JSP페이지 작성 시 자주 사용하는 기능을 미리 구현해 놓고 XML문법 형태로 실행 할 수 있다.


    JSP 에서 XML 기반 태그는 두가지 있다.


    1. 많이 쓰이는 기능을 JSP 스펙으로 이미 정의 한 다음 컨테이너마다 동일하게 구현 해놓은 '표준 액션 태그' 이다.

    표준액션 태그는 액션 태그명과 속성 그리고 하위 요소들이 정해져 있고 수행되는 기능도 정해져있다.

    특별한 선언 없이 jsp라는 접두어를 붙여 태그명만 명시하면 컨테이너가 인식해서 수행한다.

    2. 커스텀 태그 개발자가 개발해서 사용하는태그 (거의 안쓰임 )



    표준액션태그

    표준 액션 태그는 미리 정해진 기능들을 JSP스펙에 명시함으로써 모든 컨테이너가 동이하게 구현하는 태그이다.

    모든 JSP 컨테이너에서 기본으로 제공하고 있어서 기본 액션 태그라고도 한다. 


    표준 액션 태그 종류 

    컨테이너에서 표준으로 제공하는 액션태그는 다음과 같다.

    - jsp:attribute

    - jsp:body

    - jsp:element

    - jsp:fallback

    - jsp:forward

    - jsp:getProperty

    - jsp:include

    - jsp:output

    - jsp:param

    - jsp:params

    - jsp:plugin

    - jsp:setProperty

    - jsp:useBean


    <jsp:forward>


    forward표준 액션 태그는 서블릿에서 RequestDispatcher 객체의 forward() 메소드 기능을 실행한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h3>example14</h3>
        <jsp:forward page="test.jsp"/>
    </body>
    </html>
    cs


    웹브라우저가 "example14"를 출력한다. 이부분은 출력되지 않난다.

    같은 디렉터리에 있는 test.jsp 페이지로 이동한후 test.jsp 페이지의 실행 결과가 클라이언트로 응답된다.

    그래서 example.jsp 에서 출력한 내용으 클라이언트가 받지 못한다.


    <jsp:include>

    include 표준 액션 태그는 서블릿에서RequestDispatcher 객체의 include( ) 메소드 기능을 실행합니다.
    다른 페이지를 현재 페이지에 포함 하고자 할 때 사용하는 태그이다.
    그런데 JSP 페이지 작성시 다른 페이지를 포함하는 방법이 또하나 있다. 그것은 include 지시자
    <%@ include file =" " %> 를 이용하는 방법이다. include 표준 액션 태그와 include 지시자 둘다 다른 페이지를 포함 하는 기능은
    맞지만 , 약간 다르게 동작한다.


    지시자로 포함하면 JSP 파일에서 자바 소스로 변환 될때 B 페이지가 포함된다. 소스가 포함된후 컴파일 되어

    클래스파일이 만들어 진다. A.jsp 파일에

    <jsp:include page="B"> 방식으로 파일을 포함하면 JSP파일에서 자바소스로 변환 될때 포함되는 지시자와 달리 

    실행 될때 포함됨 

    따라서 동적으로 포함 하려면 incldue 표준 액션 태그를 사용한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h3>==include 전 </h3>
    <jsp:include page="test.jsp"></jsp:include>
    <h3>==include 후 </h3>
    </body>
    </html>
    cs


    JSP 자바빈즈


    JSP 자바 빈즈란, JSP의 표준 액션 태그로 접근 할 수 있는 자바 클래스로서 값을 가지는 속성과 값을 설정하는 메소드 값을 추출하는 메소드로 이루어저 있다.

    자바빈즈의 장점

    1. 폼데이터 처리에 용이
    - 자바빈즈를 지워하는 액션태그로 한번에 클라이언트로부터 전달된 데이터를 추출가능함 
    2. 자바빈즈 활용범위 확장 용이
    - 여러 페이지에서 사용하는 데이터는 자바빈즈를 이용하여 여러범위에서 사용할 수 있다.
    3. 컴포넌트 기반 구현 가능
         - 비즈니스로직을 컴포넌트로 만들어 활용하면 컴포넌트 재활용을 통해 웹 애플리케이션을 효과적으로 구현가능


    JSP 자바빈즈 개발 규약

    (1) 패키지화

    JSP 페이지에서 자바빈즈를 사용할 때 기본 패키지에 있으면 인식이 안 된다.
    그래서 반드시 패키지화가되어 있어야한다 . 
    기본 패키지라는 것은 웹 애플리케이션에서 클래스 파일이 기본 디렉터리에 있는 것 을 의미 


    (2) 기본 생성자 존재



    (3) 멤버 변수 접근자는 private로 선언


    (4) gettter 메소드


    (5) setter 메소드


    (6) getter와 setter 접근자 public 선언


    (7)직렬화 구현 (선택사항)

    java.io.Serialiazable 클래스를 상속하여 객체 직렬화가 가능하도록 한다.

    객체 직렬화

     객체 직렬화란, 객체 정보를 기본형 데이터와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환 시켜 입출력 하는것이다. 
    이것은 자바 객체의 내용을 파일이나 DB 테이블에 저장했다가 피룡할 때 다시 복원 할 수있다.
    객체를 일런의 바이트 스트림으로 변환하여 출력하는 것을 마샬링이라고한다. 출력된 내용을 읽고 다시 자바 객체를 만들어내는 과정을 언마샬링이라고 하는데 객체의 직렬화는 Serializable을 상속해야만 가능하다.

    빈즈생성하기 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package com.edu.beans;
     
    public class HelloBeans {
        private String name;
        private String number;
        
        public HelloBeans() {
            this.name = "이름이 없습니다";
            this.number = "번호가 없습니다";
            
        }
     
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getNumber() {
            return number;
        }
        public void setNumber(String number) {
            this.number = number;
        }
        
        
    }
     
    cs


    JSP 자바빈즈 사용




    HelloBean hello = new HelloBean();

    <jsp:useBean class ="HelloBean" id ="hello">

    위 두 코드는 같은 기능을 처리하는 명령어이다.


    hello.getName();

    <jsp:getProperty property ="name" name="hello">

    위 두 코드 역시 같은 기능을 처리 

    hello.setName("Amy");

    <jsp:setProperty property="name" name="hello" value="Amy">

    멤버변수이름을 property

    참조변수 명을 name

    값을 value


    <jsp:useBean>

    자바빈즈 클래스의 객체를 생성하거나 이미 생성된 객체를 추출하는 기능을한다.
    객체를 생성할 것인지 이미 생성된 객체를 추출할 것은 인지는 <jsp:useBean> 태그의 scope속성과
    관련이 있다.

    <jsp:useBean> 액션 태그로 객체가 생성되면 주어진 자바빈즈 클래스에서 기본 생성자만 호출된다.

    id 속성 


    id 속성은 주어진 페이지에서 자바빈즈 객체를 식별 할 수있는 유일한 명칭을 지정해줄 때 사용한다.
    하나의 JSP페이지에서 여러개의 자바빈즈 객체를 정의 할 수있으며 , 이때 id속성의 값을 가지고 각각의 객체를 구분한다.
    id 속성의 값은 JSP 페이지에서 자바 소스로 변환될 때 자바빈즈 객체를 참조하는 참조형 변수가 되므로 다음 규칙을 적용해서 
    작성하여야한다.

    - 유일한 값으로지정
    - 대소문자 구분
    - 영문자 숫자, _문자로 시작해야 함

    <jsp:useBean class="com.edu.beans.HelloBeans" id="hello1">
    <jsp:useBean class="com.edu.beans.HelloBeans" id="hello2">

    class 속성


    사용하려는 객체의 실제 클래스 명을  패키지와 함께 지정

    type 속성


    자바빈즈 클래스의 객체에 접근할때 어떠한 타입으로 접근할것인지 지정

    이 속성이 생략되면 주어진 자바빈즈 클래스의 타입으로 접근하지만 , 부모 type으로 접근하게 되면
    부모타입으로 지정됨 ,빈 객체는 JSP 컴파일 단계에서 바로 이 속성으로 지정되는 클래스 타입으로 변환된다.


    scope 속성


    scope 속성값으로 page, request,session 그리고 application 중 하나를 지정할 수 있다.

    이 속성을 생략하면 page로 지정된다.

    page : 하나의 JSP페이지에서만 사용

    request : 요청이 처리되는 동안 forward,include 된 페이지 간에 사용

    session : 클라이언트 단위로 사용

    application : 웹 애플리케이션 단위로 사용


    <jsp:getProperty>


    <jsp:useBean> 액션 태그 객체를 생성한 후 자바빈즈의 속성 값을 추출하면, 즉 getter 메소드를 호출하여 필요한 기능을 수행

    그 결과를 추어진 위치에 출력할 때 사용하는 태그 로서 , JSP 페이지 내의 어느곳에서든지 사용 할 수 있다.


    <jsp:getProperty property ="name" name="hello">

    name 속성

    useBean 태그에 정의해 놓은 id 속성과 동일하게 지정



    property 속성

    값을 추출하려는 자바빈즈 객체의 멤버 변수 이름을 지정



    <jsp:setProperty>


    name 속성

    useBean 태그에 정의해 놓은 id 속성과 동일하게 지정


    property 속성

    값을 수정하려는 자바빈즈 객체의 멤버 변수 이름을 지정


    value 속성

    자바 빈즈 객체의 속성을 변경하려는 값을 지정

    param 속성


    param 속성에 할당된 값과 같은 name의 값을 자바빈의 속성값을 설정한다.
    <jsp:setProperty property="name" name="hello" param="irum">

    위코드를 일반 자바 코드로 작성하면 다음과 같다 

    hello.setName(request.getParamert("irum"));

    설정값 생략

    변경하려는 값을 지정하지 않으면 질의문자열에서 멤버변수와 같은 name을 찾아 자동으로설정한다.

    <jsp:setProperty property="name" name="hello" />

    위의 표준 액션 태그를 일반 자바 코드로 작성하면 다음과 같은 결과이다.

    hello.setName(request.getParameter("name"));

    Property ="*"

    클라이언트로부터 입력받은 질의 문자열을 추출하여 자바빈즈 객체에 추출된 값을 바인딩 하는데 편리하다.

    값을 하나씩 안빼고 이것만 있으면 알아서 바인딩해줌



    활용 예제


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <jsp:useBean class="com.edu.beans.HelloBeans" id="hello"/>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name="hello"/><br>
        
        <jsp:setProperty property="name" name="hello" value="Amy"/>
        <jsp:setProperty property="number" name="hello" value="12345"/>
        <hr>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name= "hello"/><br>
    </body>
    </html>
    cs

    이름이 없습니다
    번호가 없습니다

    Amy
    12345


    기존파일에 setProperty 수정

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <jsp:useBean class="com.edu.beans.HelloBeans" id="hello"/>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name="hello"/><br>
        
        <jsp:setProperty property="name" name="hello" param="a"/>
        <jsp:setProperty property="number" name="hello" param="b"/>
        <hr>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name= "hello"/><br>
    </body>
    </html>
    cs


    http://localhost:8081/edu/example17.jsp?a=John&b=6969

    브라우저에서 a와 b를 전달 

    이름이 없습니다
    번호가 없습니다


    John
    6969



    다시 setProperty 태그만 수정 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <jsp:useBean class="com.edu.beans.HelloBeans" id="hello"/>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name="hello"/><br>
        
        <jsp:setProperty property="*" name="hello"/>
        
        <hr>
        
        <jsp:getProperty property="name" name="hello"/><br>
        <jsp:getProperty property="number" name= "hello"/><br>
    </body>
    </html>
    cs


    http://localhost:8081/edu/example17.jsp?name=Tom&number=99999

    원래 변수의 값대로 질의 문자열을 전송


    이름이 없습니다
    번호가 없습니다


    Tom
    99999

    'Servlet' 카테고리의 다른 글

    데이터베이스  (0) 2019.03.04
    표준 액션 태그와 JSP 자바빈즈 요약  (0) 2019.03.04
    내장객체 요약  (0) 2019.03.04
    내장 객체  (0) 2019.03.03
    JSP프로그래밍 정리  (0) 2019.03.03
Designed by Tistory.