하나의 작업을 하나의 페이지에서 처리하기 어려울때 여러 페이지에 나누어 구현을 하여 처리하는것이 효과적입니다.
여러 페이지로 나눌 경우 계층적 구조로 분할합니다.
1단계 : 분할해서 수행해야 할 작업들에 대해 어떤 페이지가 그 작업을 수행할 것인지 판단 수행
2단계 : 실질적인 기능 수행 및 다음 페이지로 넘길 일 결정
기능 모듈하는데 있어 2가지 방법이 있습니다.
<jsp:forward> 액션태그와 redirect를 사용하는 방법입니다.
<jsp:forward>
페이지 연결과 관련한 모든 행위가 서버쪽에서만 이루어집니다. 흐름 제어를 위한 연결 효율은 좋지만 클라이언트와 사용자가 이러한 연결을 인지 하지 못하며 클라이언트로부터 재요청이 필요한 연결의 경우 사용하지 못합니다.
기능 분할에서의 1단계 페이지 입니다. 어떤페이지가 수행할지 결정하는 페이지입니다.
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>from-to의 to 선택을 위한 form 페이지</title></head> <body>
<%-- from-to의 form 페이지에서 to 페이지 선택을 위한 form 엘리먼트 --%>
<form action="<%= request.getContextPath() %>/from.jsp">
수행 페이지 선택 : <br/>
<select name="subject">
<option value="java">자바 프로그래밍</option>
<option value="DB">데이터베이스</option>
<option value="JSP">JSP</option>
<option value="spring">스프링</option>
</select>
<input type="submit" value="선택 완료"> </form>
</body>
</html>
이 페이지는 사용자에게 보여지는 페이지가 아니라 어떤페이지를 실행할지 연결되어지는 중간 페이지 입니다.
주의해야할 점은 해당 페이지는 브라우저에 출력이 되지 않고 <jsp:forward> 액션태그 이후로는 내용이 수행되지 않습니다.
<%@ page contentType = "text/html; charset=utf-8" %>
<%
String code = request.getParameter("subject");
String toURI = null;
if (code.equals("java")) {
toURI = "/to/java.jsp"; }
else if (code.equals("DB")) {
toURI = "/to/DB.jsp";}
else if (code.equals("JSP")) {
toURI = "/to/JSP.jsp";}
else if (code.equals("spring")) {
toURI = "/to/spring.jsp";
} %>
주의 1 : from 페이지의 출력 내용은 브라우저에 출력되지 않습니다.
<jsp:forward page="<%= toURI %>" />
주의 2 : jsp:forward 액션 태그 이후에 위치하는 내용은 수행되지 않습니다.
이러한 forward 연결은 버퍼를 사용해야 합니다. from페이지의 내용이 클라이언트에 조금이라도 출력이 될 경우 forward 액션태그는 수행되지 않기 때문입니다. 그렇기 때문에 버퍼를 이용하여 from페이지의 내용을 버퍼에 담고 forward 액션 태그시 clear 되면서 to 페이지가 출력이 됩니다.
redirect
redirect는 페이지와 페이지가 연결되는 과정에서 클라이언트가 개입이 되는연결입니다. response 객체의 sendRedirect를 사용 하면 지정한 페이지를 클라이언트에서 재요청 하도록 합니다. 이때 사용자의 개입은 없습니다. 그러나 쿠키 등 헤더의 정보도 다시 전달 되므로 효율적이지 않지만 페이지 간의 내비게이션을 구현할 때에는 이 방법을 더 많이 사용합니다.
'학습(구) > JSP' 카테고리의 다른 글
| 화면 모듈화와 소스 모듈화 (0) | 2020.09.09 |
|---|---|
| 페이지 사이의 정보공유 (0) | 2020.09.09 |
| Java Bean (0) | 2020.09.07 |
| form페이지와 action 페이지 (0) | 2020.09.03 |
| 페이지 출력 (0) | 2020.08.31 |