JSP

액션 - forward / Expression Language(${ } ) 사용

에어팟맥스 2022. 8. 30. 23:30

forward는 코드상 <jsp:forward> 으로 작성하여 쓰인다.  <jsp:forward> 이 코드를 forward 액션 태그라고 부른다.

 

forward 액션 태그는 하나의 jsp 페이지에서 다른 jsp 페이지로 요청 처리를 전달할 때 사용된다

 

forward는 단순 이동뿐 아니라 내가 넣은 값을 들고 다른 페이지로 전달 할 수도 있다.

 

forward 액션 태그는 실행하기 전에 출력 버퍼에 저장했던 내용을 비우고 페이지 이동을 한다. 따라서 개발자가 아무리 위에 많은 출력 코드를 작성하였다 하더라도 맨 밑에 forward 액션 태그를 만나면 앞에 출력 코드들을 버리고 바로 페이지 이동을 해버리기 때문에 앞에 적은 출력 코드들이 전부 무시되어 실행되지 않는다. 

 

출처: https://jerryjerryjerry.tistory.com/31

 

 


03_forward_calc_el_execute_01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 표준액션 중 forward 에 대해서 알아봅니다.</title>

<script type="text/javascript">

	// Function Declaration
	function goSubmit(){
		
		// 정규표현식으로 유효성 검사
		const regExp = /^[0-9]{1,5}$/; // {1,5} => 숫자가 최소 한자리부터 다섯자리까지
		
		const frm = document.myFrm;
		const num1 = frm.firstNum.value.trim();
		const num2 = frm.secondNum.value.trim();
		
		if( !(regExp.test(num1) && regExp.test(num2)) ) {
			alert("숫자로만 입력하세요!!");
			frm.firstNum.value = "";
			frm.secondNum.value = "";
			frm.firstNum.focus();
			return; // 종료
		}
		else {
			if(Number(num1) > Number(num2)) {
				alert("첫번째 입력한 숫자가 두번째 입력한 숫자 보다 적어야 합니다.!!");
				frm.firstNum.value = "";
				frm.secondNum.value = "";
				frm.firstNum.focus();
				return; // 종료
			}
		}
		
		frm.action = "03_forward_calc_el_02.jsp";
		// frm.method = "GET"; // 어떤 방식인지 / method 를 명기하지 않으면 기본은 GET 방식이다.
		frm.submit();
		
	} // end of function goSubmit(){} --------------------------------------------

</script>
</head>
<body>
	<h2>입력한 두개의 수 사이를 누적한 값 알아오기</h2>
	
	<form name="myFrm">
		<p>
			첫번째 수: <input type="text" name="firstNum" size="5" maxlength="5" /><br/>
			두번째 수: <input type="text" name="secondNum" size="5" maxlength="5" /><br/>
			<button type="button" onclick="goSubmit()">계산하기</button>
		</p>
	</form>
</body>
</html>

 

03_forward_calc_el_02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String str_firstNum = request.getParameter("firstNum");
    String str_secondNum = request.getParameter("secondNum");
    
    int firstNum = Integer.parseInt(str_firstNum);
    int secondNum = Integer.parseInt(str_secondNum);
    
    int sum = 0;
    for(int i=firstNum; i<=secondNum; i++) {
    	sum += i;
    }
    
    // 결과물은 sum 이다.
    // System.out.println("sum => " + sum);
    
    /*
       !!!! 중요 꼭 암기 !!!!
       == request 내장객체는 클라이언트( 03_forward_calc_el_execute_01.jsp ) 가 
          보내온 데이터를 읽어들이는 역할( request.getParameter("name명"); )도 있고 
          또한 어떤 결과물을 저장시키는 저장소 기능( request.setAttribute("키", 저장할객체); ) 도 있다. 
    */
    
//  request.setAttribute("firstNum", new Integer(firstNum));
//  원래는 위처럼 객체로 만들어서 저장을 해야 하지만 자바가 알아서 auto boxing(자동적으로 객체로 만들어주는 것) 해주기 때문에 아래처럼 쓸 수 있다. 
    request.setAttribute("firstNum", firstNum);
    request.setAttribute("secondNum", secondNum);
    
//  request.setAttribute("sum", new Integer(sum));
//  원래는 위처럼 객체로 만들어서 저장을 해야 하지만 자바가 알아서 auto boxing(자동적으로 객체로 만들어주는 것) 해주기 때문에 아래처럼 쓸 수 있다. 
    request.setAttribute("sum", sum);
%>
<jsp:forward page="03_forward_calc_el_view_03.jsp" />
<%--
	웹브라우저 상에서 URL 주소는 그대로 http://localhost:9090/JSPServletBegin/chap03_StandardAction/03_forward_calc_el_02.jsp 인데 
	웹브라우저 상에 보여지는 내용물은 http://localhost:9090/JSPServletBegin/chap03_StandardAction/03_forward_calc_el_view_03.jsp 의 내용이 보여진다.      
 --%>

 

03_forward_calc_el_view_03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산된 결과값을 보여주는 곳</title>
</head>
<body>
	<h3>계산된 결과값(EL 을 사용한 것) -1</h3>
	${requestScope.firstNum}부터 ${requestScope.secondNum}까지의 누적의 합은?<br>
	결과값 : <span style="color: red">${requestScope.sum}</span>
	
	<hr style="margin: 10px 0;">
	
	<h3>계산된 결과값(EL 을 사용한 것) -2</h3>
	${firstNum}부터 ${secondNum}까지의 누적의 합은?<br>
	<!-- 키값이 고유하면 requestScope. 생략 가능 -->
	결과값 : <span style="color: blue">${sum}</span>
</body>
</html>