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>