forward Action Tag
다른 페이지로 프로그램의 제어를 이동시킬 때 사용하는 액션 태그이다
JSP 페이지 내에서 forward 액션 태그를 만나게 되면, 그 전까지 출력 버퍼에 저장되어 있던 내용을 제거하고
forward 액션 태그가 지정하는 페이지로 이동한다
forward 액션 태그의 page 속성은 이동할 페이지명을 기술하고 상대경로, 절대경로로 지정할 수 있다
<jsp:forward page="a.jsp"/>
<jsp:forward page="a.jsp"></jsp:forward>
=> 서블릿에
if(true) {
_jspx_page_context.forward("a.jsp");
return;
}
이라고 삽입되어 있음
forward 액션 태그에서 포워딩되는 페이지에 파라미터 값을 전달할 수 있다
<jsp:forward page="a.jsp">
<jsp:param name="paramName1" value="var1"/>
<jsp:param name="paramName2" value="var2"/>
</jsp:forward>
넘어온 파라미터는 아래와 같이 받을 수 있다
<%
String name = request.getParameter("paramName1");
%>
실행 코드
forward_login1.jsp
실행 결과
실행 내용
forward_login1에서 userid와 passwd가 null인지 확인하고 null이라면
forward 액션 태그로 forward_login2에 제어권을 넘긴다
forward_login2에서 userid가 null인지 확인하여
아이디, 암호, 전화번호를 입력받게 한 후 form 결과를 forward_login1에 넘긴다
forward_login1에서 form 값을 넘겨 받았으므로 userid와 passwd가 null이 아니기 때문에
forward 액션 태그로 파리미터 값 snum과 tel을 포함하여 다시 forward_login2로 제어권을 넘긴다
마지막으로 userid가 null이 아니므로 아이디, 암호, 전화번호, 학번을 브라우저에 출력 후 실행을 종료한다
include Action Tag
현재 JSP 페이지에서 다른 페이지를 포함하는데 사용한다
include 액션 태그는 include 디렉티브(<%@ include>)와 같이 다른 페이지를 현재 페이지에 포함시킬 수 있는 기능을 한다
include 디렉티브는 단순하게 소스의 내용이 텍스트로 포함되지만
include 액션 태그는 포함시킬 페이지의 처리 결과를 포함시킨다는 점이 다르다
a.jsp 파일에서 b.jsp 파일을 <jsp:include>를 이용하였을 경우 그 소스가 복사되는 것은 include 지시자이고,
프로그램의 실행제어가 넘어갔다가 되돌아 오게 되는 것은 include 액션 태그이다
include 디렉티브는 주로 조각 코드를 삽입할 때 사용되고, include 액션 태그는 페이지를 모듈화할 때 사용한다
<jsp:include page="a.jsp" flush="false"/>
-page 속성은 현재 페이지에 결과가 포함될 페이지명이 되며, 상대 경로를 쓰거나 절대 경로를 사용한다
-page 속성의 값은 표현식을 사용할 수 있다(include 디렉티브는 안됨)
<%
String content = request.getParameter("name");
%>
<jsp:include page="<%= content%> flush="false"/>
-flush 속성은 포함될 페이지로 제어가 이동될 때 현재 포함하는 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리하는 방법을 결정한다
-flush 속성의 값을 "true"로 지정하면 포함될 페이지로 제어가 이동될 때 현재 페이지가 지금까지
버퍼에 저장한 내용을 웹 브라우저에 출력하고 버퍼를 비운다
-flush 속성은 일반적으로 "false"로 지정하는 것이 좋다
"true"로 지정하면 일단 출력 버퍼를 웹 브라우저에 전송하게 되는데 이때 헤더 정보도 같이 전송된다
헤더 정보가 일단 웹 브라우저에 전송이 되고 나면 헤더 정보를 추가해도 결과가 반영되지 않는다
<jsp:include page="<% pageName %>" flush="false">
<jsp:param name="name" value="<%= name %>" />
<jsp:param name="pageName" value="<%= pageName %>"/>
</jsp:include>
-<% pageName %>페이지에 name 과 pageName을 파라미터로 전송한다
include 액션 태그의 장점은 코드의 재사용성에 있다
모든 페이지에 머리글 및 바닥글 페이지를 포함하는 등 여러 페이지를 사용할 수 있으므로 많은 시간이 절약된다
■include Directive와 include Action Tag의 차이점
include Directive | include Action Tag | |
---|---|---|
처리 시간 | jsp 파일을 자바 소스로 변환할 때 처리 | 요청 시간에 처리 |
기능 | 현재 파일에 삽입 | 별도의 파일 요청 처리 흐름을 이동 |
데이터 전달 방법 |
페이지 내에 변수를 선언한 후, 변수에 값 저장 |
request 기본 객체나 <jsp:param>을 이용한 파라미터 전달 |
용도 | 다수의 jsp 페이지에서 공통으로 사용되는 코드나 저작권 같은 문장을 포함 |
화면의 레이아웃의 일부분을 모듈화할 때 주로 사용 |
- include Directive는 jsp 파일을 직접 삽입하기 때문에 삽입할 파일과 삽입시키는 파일에 같은 변수가 있다면
중복에러가 발생하지만 include Action Tag는 파일을 직접 삽입시키는 것이 아닌 프로그램의 실행 제어가 넘어가
결과값을 갖고 되돌아 오기 때문에 같은 이름의 변수를 사용해도 에러가 발생하지 않는다
■include Action Tag와 forward Action Tag의 차이점
- include Action Tag : page 속성에 지정된 페이지의 처리가 끝나면 다시 현재 페이지로 돌아와 처리를 진행한다
- forward Action Tag : page 속성에 지정된 페이지로 제어가 넘어가면
현재 페이지로 다시 돌아오지 않고 이동된 페이지에서 실행을 종료한다
실행 코드
login.jsp
loginhandle.jsp
실행 결과
아이디를 입력하지 않았을 때
실행 내용
login.html에서 로그인 정보를 입력하여 login.jsp로 보낸다
받은 곳에서 userid가 비어있는지 확인하여 비어있다면 기본값을 넘겨주고 비어있지 않다면 그냥 loginhandle.jsp로 넘긴다
loginhandle.jsp에서 userid가 guest라면 null일 때와 같이 회원이 아니라는 메시지를 띄우며 아이디를 추천해준다
guest가 아니라면 내가 입력한 정보들이 보이게 한다
'JSP' 카테고리의 다른 글
out과 exception 내장 객체 (0) | 2020.07.03 |
---|---|
useBean 액션 태그와 setProperty, getProperty 액션 태그 (0) | 2020.07.02 |
JSP의 Action Tag (0) | 2020.06.29 |
JSP의 request와 response (0) | 2020.06.28 |
JSP의 내장 객체 (0) | 2020.06.28 |