디렉티브 태그와 함께 JSP 페이지를 구성하는 태그 중 하나인 액션태그는 JSP에서 페이지와 페이지 사이를 제어하는데 쓰이거나 자바빈즈(객체 생성)와 같은 다양한 기능을 제공하고 있다. 오늘은 JSP기능을 좀 더 확장 할 수 있는 액션태그를 사용하여 페이지를 제어하거나 변수값을 이용하여 좀 더 동적인 JSP를 작성하는 법을 알아보겠다.

액션 태그 설명
<jsp:forward ... /> 같은 서버 내에서 다른 페이지로 이동하여 해당 화면을 출력한다.
<jsp:include ... /> 외부 페이지의 내용에서 결과 값을 가져와 해당 페이지에 삽입하여 출력한다.
<jsp:useBean ... /> JSP 페이지에서 자바빈즈를 설정할 수 있다.
<jsp:setProperty ... /> 자바빈즈에서 값을 설정한다. (setter)
<jsp:getProperty ... /> 자바빈즈에서 값을 가져온다. (getter)
<jsp:param ... /> forward, include, plugin 태그에 인자를 추가한다.

 

   디렉티브 태그는 <%>로 작성되었지만 액션태그는 사용자 정의 태그처럼 작성하여 사용하게 된다. 이 외에도 다양한 태그가 존재하나 지금은 가장 많이 쓰이는 것 위주로 정리해보았다. 디렉티브는 해당 페이지 내에서 속성이나 환경을 설정하는 데 사용한다면, 액션 태그는 문자 그대로 좀 더 동적인 것에 초점이 맞춰져 있다.


   forward 액션 태그   

   forward 액션 태그는 해당 페이지에서 태그가 실행되면 page에 입력된 다른 파일의 화면을 출력한다. 여기서 주의해야 할 점은 출력버퍼에 송출할 내용을 담는 중 해당 액션이 실행되면 버퍼에 쌓인 내용물을 모두 버리게 되는데, 만약 출력 버퍼를 모두 채울만큼의 내용물이 있다면 클라이언트 화면에 송출하는 상황이 발생하여 예기치 못한 화면이 사용자에게 노출 될 수도 있으니 용량이 큰 웹을 다룰땐 forward 사용에 주의해야 한다.

 

   그래서 출력된 화면을 살펴보면 forward를 실행한 페이지의 내용물은 하나도 출력되지 않고, 바로 다음 페이지로 넘어가며 해당 jsp 파일에 있는 내용이 출려된 것을 확인할 수 있다.

 

 

   include 액션 태그   

   디렉티브 태그에서도 사용되었던 include는 액션 태그에 오면서 그 용도가 살짝 다르다. 먼저 해당 페이지에 다른 페이지의 내용을 삽입하는 것 까진 동일하나, 디렉티브 태그에서는 그저 코드 소스를 복사하여 붙여넣는 방식이었다면 액션 태그는 해당 페이지의 내용을 번역하여 나온 값을 들고와 해당 페이지에 출력하여 붙여넣는다. 즉, forward처럼 아예 이동을 하기 때문에 데이터 처리를 다른 페이지에서 처리할 수 있다. 즉, 이후 작성할 param 액션 태그를 활용하여 파라미터를 다른 페이지에 넘길 수 있는 것이 가능한데, 이렇게 되면 좀 더 동적인 웹페이지를 제작할 수 있게 된다.

 

   앞서 디렉티브 태그의 include는 어떤 문서의 구조적인 부분이 계속 반복되거나 똑같은 부분을 작성하여 붙여넣는데 용이하다면 액션 태그의 include는 다양한 변수의 값을 규칙에 맞게 처리하는 기능적인 부분을 반영하는데 사용된다.

 

 

   param 액션 태그   

   param 태그는 현재 페이지에서 발생된 값들을 다른 페이지에 전송하고자 할 때 사용되는 액션태그다. 앞서 forward와 include 태그는 지정된 파일경로로 이동한다고 했는데, 그들의 종결어미 사이에 param 태그를 사용하게 되면 이동할 때 지정된 값을 가지고 해당 페이지로 넘어갈 수 있다. 즉, 파라미터 전송이 가능한 형태가 된다. 실습에서 forward를 사용하여 넘어갈 페이지에 param 태그를 사용하여 값을 지정해보았다. name은 쉽게 말해서 변수, value는 값인데 키 : 밸류로 저장되는 맵과 유사한 방식으로 저장된다. 여기서 id는 admin, name은 함수를 사용하여 관리자라는 값을 할당했는데 여기서 바로 문자열을 쓰지 않고 URLEncoder를 쓴 이유는 JSP간에 값을 가지고 이동하다 보면 문자 같은 경우는 원 데이터가 손실 날 가능성이 크기 때문이다. 따라서 인코딩과 디코딩을 통해 해당 값을 보호처리 하는 것이 안전하다.

 

   이렇게 param으로 지정된 값들은 모두 request라는 객체에 담기게 되는데 다른 페이지에서 꺼내어 사용할 경우에는 request가 가지고 있는 get() 함수를 사용하여 꺼낼 수 있다. 값을 꺼낼 때는 맵을 이용한 것 처럼 name(key)명을 입력하면 이어진 값이 출력되게 된다. 여기서 인코딩으로 한번 감쌌던 name의 값을 다시 불러오기 위해서는 디코드 과정을 거치면 문제없이 출력되는것을 확인할 수 있다.

 

 

   useBean 액션 태그   

   자바빈즈란, 쉽게 말해서 생성된 객체를 의미한다. jsp 페이지에서 객체를 생성하는 방법은 디렉티브 태그를 통해 패키지를 import시키고 함수 부분에서 객체를 선언하듯 만들면 되지만 이는 함수 내에서 작성하기 때문에 언제든 해당 페이지를 벗어나면 사용할 수 없게 된다. 이를 보완하기 위해 생성된 객체가 언제까지 유지될 지 정하고 조금 더 쉽게 객체를 생성하기 위해 useBean액션 태그를 사용하는 것이다.

<jsp:useBean id="자바빈즈 식별 이름(참조변수)" class="자바빈즈 원본(패키지)" scope="유지 될 범위" />

 

   여기서 주의할 점은, 생성할 때 파라미터를 받지않는 기본 생성자가 있어야 useBean으로 객체 생성이 가능하다. scope는 해당 객체가 언제까지 사용될 지 예상하여 유통기한을 부여하는 것과 같은데, 사용되는 속성으로는 page(해당 페이지 내에서만 사용), request(1회 이동까지 사용), session(세션이 만료될 때까지 사용), application(서버가 닫힐 때까지 사용) 가 있다.

   jsp에서 객체 생성을 한 뒤 변수의 값을 불러오기 위해 미리 person이라는 클래스를 만들고, useBean을 통해 person이라는 변수에 해당 클래스의 주소를 저장하였다. 사용 범위를 request로 지정하여 한 번의 이동 후에도 사용할 수 있게 하였고, 당장은 이동 없이 해당 페이지에서 person.get()함수를 통해 private로 접근이 제어된 상태인 변수의 값을 호출하는 것을 확인할 수 있었다.

 

   위와 같이 생성된 객체를 이용하여 내용을 출력하는데, 처음은 원래 저장되어 있던 내용을. 두번째는 set()함수를 이용해 내용을 바꾸고, 다른 페이지의 결과 값을 붙여 넣었더니 set() 함수로 바뀐 값이 출력되어 나온 것을 확인할 수 있었다. 여기서 중요한 것은 scope인데, request(1회 이동)를 사용했기 때문에 해당 페이지에서 바꾼 값이 다른 페이지에도 적용되어 출력되었다. 여기서 범위를 page(해당 페이지)로 바꾸게 되면 exam4-7.jsp에서 생성한 자바빈즈와는 다른 객체가 되기 때문에 아무런 영향을 주지 않는 것을 알아볼 수 있다.

 

   즉, 자바빈즈를 socpe까지 동일하게 만들어야만 같은 객체로 생성이 된다는 의미이다.

 

'아이티에듀넷' 카테고리의 다른 글

2024-10-14 :: 053 내장 객체  (0) 2024.10.14
2024-10-11 :: 052 MVC 이해하기  (0) 2024.10.11
2024-10-08 :: 050 디렉티브 태그  (0) 2024.10.08
2024-10-07 :: 049 JSP 들어가기  (0) 2024.10.07
2024-10-02 :: 048 깃허브  (0) 2024.10.02

+ Recent posts