記錄

JSP) include, forward, request객체 유효범위 본문

Web/JSP

JSP) include, forward, request객체 유효범위

surhommejk 2018. 3. 20. 16:40

jsp:include



>> 코드를 읽다가 <jsp:include>를 만나면 지정된 페이지로 이동하여 그 페이지를 읽고 그 페이지의 리딩이 끝나는 순간 <jsp:include>를 만나서 잠시 중단했던 페이지의 리딩을 다시 재개한다


그리고 다른 페이지를 읽게 되었을 때 기존에 사용하던 버퍼를 그대로 사용한다는 특징이 있다











<-- 이런 식으로 모듈화하면 삽입, 수정, 삭제가 매우 용이하다





jsp:include 활용 예시)

<%@ 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>
    <style type="text/css">
        table , tr , td {border: 2px solid black; border-collapse: collapse;}
    </style>
</head>
<body>
    <table style="width: 700px">
        <tr>
            <td colspan="2">
                <jsp:include page="/commonmodule/Top.jsp"></jsp:include>
            </td>
        </tr>
        <tr>
            <td style="width: 200px">
                <jsp:include page="/commonmodule/Left.jsp"></jsp:include>
            </td>
            <td style="width: 500px">
                여기가 PAGE 실제 내용 게시판
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <jsp:include page="/commonmodule/Bottom.jsp"></jsp:include>
            </td>
        </tr>
    
    </table>
</body>
</html>





jsp:forward




include와 forward의 공통점은 request 객체를 공유할 수 있다는 것이 핵심이다. 하지만 forward의 경우 태그를 만나는 순간 버퍼를 모두 비워버리고 forward 대상의 페이지를 버퍼에 새로 담아 응답을 보낸다. include와의 차이점은 include의 경우 주도권을 그대로 쥐고 있으나 forward는 주도권을 넘겨준다. 주도권을 넘겨준다는 말은 forward를 만나는 순간 이제 더 이상 forward 밑에 있는 코드는 보지 않는다는 뜻이다.


그리고 response.sendRedirect() 와의 차이점은 주소값이 변하느냐 변하지 않느냐의 차이이다. forward는 주소값을 유지함으로써 대상 페이지의 주소값을 노출시키지 않아 보안상 이점을 챙길 수 있고 response.sendRedirect()는 주소값이 노출되어 버린다.


String code = request.getParameter("code");
String viewURI = null;

if(code.equals("A")){
    viewURI = "/forward/A.jsp";
}else if(code.equals("B")){
    viewURI = "/forward/B.jsp";
}else if(code.equals("C")){
    viewURI = "/forward/C.jsp";
}
%>
<jsp:forward page="<%=viewURI%>"></jsp:forward>


이런 식으로 특정 변수가 특정 값일때 원하는 페이지를 포워드 할 수 있도록 설정해서 사용한다.






request객체 유효범위



request 객체는 원래 하나의 jsp 페이지에서만 유효하다. 하지만 해당 jsp 페이지에서 include를 사용하게 될 경우 클라이언트로부터 받은 request를 공유할 수 있다. 다시 말해, A페이지에서 B페이지를 include하고 있다면 A페이지가 받은 request 객체를 B페이지도 사용이 가능하다는 것이다.


하지만 만약 include된 페이지의 파라미터를 변경하고 싶다면 따로 파라미터를 설정해주면 된다. 그리 하면 include가 실행되고 그 페이지를 로드 할때의 파라미터는 따로 설정한 파라미터를 대상으로 처리가 된다.


<jsp:include page="Ex14_subparam.jsp">
<jsp:param value="<%=type2%>" name="aaaa"/>
<jsp:param value="1004" name="pwd"/>
</jsp:include>


이런 식으로 include 당한 페이지에 대해 파라미터를 다르게 설정하고 싶다면 include문 내부에서 설정을 해주어야 한다.

'Web > JSP' 카테고리의 다른 글

JSP) 에러페이지  (0) 2018.03.21
JSP) URL, URI, URN  (0) 2018.03.20
JSP) xml, application 객체  (0) 2018.03.20
JSP) 스파게티코드 vs out객체 활용 (예제)  (0) 2018.03.20
JSP) jsp처리과정, Buffer  (0) 2018.03.20
Comments