JSP 태그 (3)

손영태·2022년 1월 24일
0

Action Tag

  • 서버(tomcat)나 클라이언트(크롬 등)에게 어떤 행동을 하도록 명령
  • 페이지와 페이지 사이를 제어한다.
  • 다른 페이지의 실행 결과 내용을 현재 페이지에 포함한다.
  • 자바 빈즈 처리
  • 태그의 마지막은 반드시 />로 마무리 한다.
  • 액션태그는 다이렉티브태그 처럼 위에 따로 page나 taglib을 설정하지 않고 사용할 곳에 <jsp:~ />로 표시한다.

종류

  1. forward
  2. include
  3. param
  4. 자바 빈즈 - useBean, setProperty, getProperty

forward

forward는 페이지 흐름 제어를 한다.
[a.jps]

<jsp:forward page="b.jsp" />

위처럼 a.jsp에서 실행을 시키면 a에 어떤 내용이 있는지는 중요하지 않음.
바로 b.jsp에 있는 내용이 출력되고 url은 a.jsp로 출력되는 것이 특징이다.

[forward02.jsp]

<jsp:forward page="/ch04/forward02_data.jsp">
<jsp:param name="dan" value="5" />
</jsp:forward>

위처럼 forward로 페이지를 출력할때 <jsp:param name="dan" value="5" />로 넘겨 줄 수 있다. 넘어간 파라미터는 두가지로 받을 수 있다.

첫번째

<% Integer num = Integer.parseInt(request.getParameter("dan"));%>
<%=num %>

두번째

${param.dan }

첫번째 방법과 두번째 방법이 있는데 첫번째는 request객체를 통해서 name값이었던 dan을 파라미터로 받는 방법과 두번째는 ${}안에 'param.name명' 형식으로 출력하여 value값을 받는 방법이다.

여기서 첫번째 방법으로 하여 앞에서 배웠던 taglib을 사용하면..

<c:set var="num" value="<%=num %>" />

'${num}'형식으로 사용할 수 있다.

include

include는 jsp페이지 내에 다른 페이지를 출력하는 것이다. forward와 다른 점은 forward는 페이지를 호출하면 현재페이지의 내용은 뭐가 있든지 알 수 없지만 include는 페이지 사이에 들어가면 중간에 출력하여 보여주고 이어서 현재페이지 내용들을 보여준다.
외부 파일로는 jsp, html, 서블릿페이지가 있다.


includeAction03.jsp

<h2>include 액션 태그</h2>
<jsp:include page="includeAction04.jsp" flush="false">
	<jsp:param name="date" value="<%=new Date() %>" />
</jsp:include>
<p>----------------------</p>

*flush는 'false'로 지정하는 것이 일반적이다. 만일 true로 지정하게 되면 출력 버퍼의 내용을 웹브라우저에 전송하는데 헤더 정보도 같이 전송이되어 헤더정보를 후에 추가시 결과가 반영되지 않아 일반적으로 false를 지정해준다.


includeAction04.jsp

<p>오늘은 몇일? 그리고 지금 시간은?</p>
<p><%=(new Date()).toLocaleString() %></p>
<p>Today is : <%=request.getParameter("date") %></p>

위에 두 jsp중에 위에 includeAction03.jsp를 실행 시키면 중간에 includeAction04.jsp가 나오는 것을 아래 출력 화면에서 볼 수 있다.

*** 여기서 나는 의문점을 갖는 것이 있었다. 디렉티브태그의 <%@ include.. %>와 현재 액션 태그의 <jsp:include..>의 차이를 알 수 없었다. 그래서 똑같은건가라는 의문이 들었다. 궁금해서 검색해보니 디렉티브의 include는 소스가 실행 되긴 전에 include가 되어 변수를 같이 사용할 수 있고 대신 동적으로 페이지 할당을 할 수 없다고 한다. 반면에 액션태그 include는 변수를 같이 사용 할 수 없고, 실행 중에 동적으로 페이지가 할당이 가능하다고 한다.

param

param 태그는 앞에 forward할때 잠깐 나왔지만 다시 한번 설명을 하면 forward나 include, plugin에 파라미터를 넘겨주고 싶을 때 사용이 된다. 다시말하면 단독으로는 사용 할 수 없다는 것을 의미한다.

forward예시는 앞에 있었으니 include예시를 작성하겠다.


param02.jsp

<h3>param 액션 태그</h3>
<jsp:include page="param02_data.jsp">
	<jsp:param name="title" value='<%=URLEncoder.encode("오늘의 날짜와 시각") %>' />
	<jsp:param name="date" value="<%=Calendar.getInstance().getTime() %>" />
</jsp:include>
<h3>param 액션 태그</h3>

param02_data.jsp

<p><%=URLDecoder.decode(request.getParameter("title")) %></p>
<p><%=request.getParameter("date") %></p>

param02.jsp를 실행하고 include태그 안에 param값을 넣어서 param02_data.jsp를 포함한다. 파라미터 값은 name값으로 가져와 value값을 얻는다.

*** 한글이 깨지는 것을 방지하기 위해서 파라미터를 보내줄때 encoding하고 받을때 decoding을 했다.

0개의 댓글