액션(action)이란?
-- XML 기술을 이용해서 기존의 JSP 문법을 확장해준 매커니즘으로 JSP 규격서에 정의되어 있는 기술이다.
이것은 XML 태그 형태를 띄기 때문에 액션태그(action tag)라고도 부르며, 간단히 액션(action)이라고 한다.
왜냐하면 이런 태그가 어떤 동작(action)을 수행하는 역할을 하기 때문이다.
!!!! 중요 꼭 암기 !!!!
== request 내장객체는 클라이언트( 02_forward_calc_execute_01.jsp ) 가
보내온 데이터를 읽어들이는 역할( request.getParameter("name명"); )도 있고
또한 어떤 결과물을 저장시키는 저장소 기능( request.setAttribute("키", 저장할객체); ) 도 있다.
02_forward_calc_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 = "02_forward_calc_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>
02_forward_calc_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.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="02_forward_calc_view_03.jsp" />
<%--
웹브라우저 상에서 URL 주소는 그대로 http://localhost:9090/JSPServletBegin/chap03_StandardAction/02_forward_calc_02.jsp 인데
웹브라우저 상에 보여지는 내용물은 http://localhost:9090/JSPServletBegin/chap03_StandardAction/02_forward_calc_view_03.jsp 의 내용이 보여진다.
--%>
02_forward_calc_view_03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int firstNum = (Integer) request.getAttribute("firstNum");
// auto Unboxing (Integer ==> int)
int secondNum = (Integer) request.getAttribute("secondNum");
// auto Unboxing (Integer ==> int)
int sum = (Integer) request.getAttribute("sum");
// auto Unboxing (Integer ==> int)
//////////////////////////////////////////////////////////////
String str_firstNum = request.getParameter("firstNum");
String str_secondNum = request.getParameter("secondNum");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산된 결과값을 보여주는 곳</title>
</head>
<body>
<h3>계산된 결과값 -1</h3>
<%= firstNum%>부터 <%= secondNum%>까지의 누적의 합은?<br>
결과값 : <span style="color: red"><%= sum%></span>
<hr style="margin: 10px 0;">
<h3>계산된 결과값 -2</h3>
<%= str_firstNum%>부터 <%= str_secondNum%>까지의 누적의 합은?<br>
결과값 : <span style="color: blue"><%= sum%></span>
</body>
</html>
'JSP' 카테고리의 다른 글
필터(Filter) (0) | 2022.08.30 |
---|---|
액션 - forward / Expression Language(${ } ) 사용 (0) | 2022.08.30 |
서블릿 어노테이션 (0) | 2022.08.30 |
서블릿(Servlet) (0) | 2022.08.30 |
컨텍스트 패스(context path) (0) | 2022.08.30 |