jsp 페이지에서 동일한 내용이라도 자바 코드를 기술하기 보다는 태그를 기술하는 것이 지저분하지 않고 깔끔하게 코딩할 수 있어 가독성 높은 소스코드를 작성할 수 있다. 코드 양을 대폭 줄일 수 있다.
페이지와 페이지 사이를 제어하거나 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나 자바 빈즈(객체)등의 다양한 기능을 제공한다.
액션 태그는 XML 문법을 따른다. 즉 시작 태그와 함께 반드시 종료 태그를 포함해야 한다.
액션 태그의 기본 형식
<jsp: ... 속성: 값 > 내용 </jsp>
내용이 없는 액션 태그의 형식
<jsp: ... 속성:값 />
- forward(<jsp:forward />)
-> 다른 페이지로의 이동, 페이지 흐름 제어- include(<jsp:include />)
-> 외부 페이지의 내용을 포함하거나 페이지 모듈화- param(<jsp:param />)
-> 현재 페이지에서 다른 페이지에 대한 정보를 전달할 때 사용- useBean(<jsp:useBean />)
-> 빈(bean)을 생성하고 사용하기 위한 환경을 정의하는 액션태그- setProperty(<jsp:setProperty />)
-> 빈(bean)에서 속성 값을 할당- getProperty(<jsp:getProperty />)
-> 빈(bean)에서 속성 값을 얻어올 때 사용
<예제>
1) controller.jsp
<%@ 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>
</head>
<body>
<%
String site = request.getParameter("site");
String resultURI = "";
if(site.equals("naver")){
resultURI = "forward_naver.jsp";
} else if(site.equals("google")){
resultURI = "forward_google.jsp";
} else if(site.equals("daum")){
resultURI = "forward_daum.jsp";
}
%>
<jsp:forward page="<%=resultURI %>"/>
</body>
</html>
2) forward_daum.jsp
<%@ 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>
</head>
<body>
<script>
window.open("https://www.daum.com","_self");
</script>
</body>
</html>
3) forward_google.jsp
<%@ 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>
</head>
<body>
<script>
window.open("https://www.google.com","_self");
</script>
</body>
</html>
4) forward_naver.jsp
<%@ 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>
</head>
<body>
<script>
window.open("https://www.naver.com","_self");
</script>
</body>
</html>
5) forward_test.jsp
<%@ 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>
</head>
<body>
<form action="controller.jsp">
<select name="site">
<option value="naver">네이버</option>
<option value="google">구글</option>
<option value="daum">다음</option>
</select>
<input type="submit" />
</form>
</body>
</html>
<결과 화면>
-> 구글, 네이버, 다음을 클릭하여 해당 페이지로 이동할 수 있다.
request에 담긴 값이 유효한다.(response, request가 유지된다.)
이동된 url이 화면에 안보인다.(사용자는 이동했는지 알 수 없음)
pageConext.forward("이동할 페이지");
OR
<jsp:forward page = "이동할 페이지" />
response.sendRedirect("이동할 페이지");
< 가장 큰 차이 >
요청 url이 남아있나(forward) 남아있지 않나(redirect)의 차이
파라미터가 그대로 넘어오나(forward) 안넘어오나(redirect)의 차이
<예제>
1-1) Object.jsp
<%@ 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>
</head>
<body>
<form action="object_ok.jsp" name="joinForm">
<fieldset>
<legend>개인정보</legend>
<input type="text" name="username">
<input type="text" name="userbirth">
<input type="button" value="확인" onclick="sendit()">
</fieldset>
</form>
<script>
// validation check
// username, userbirth, 빈값 처리,
// 둘 다 빈값이 아닐 경우 submit()요청 - object_ok.jsp로 연결
function sendit(){
let joinForm = document.joinForm;
let nameTag = joinForm.username;
let birthTag = joinForm.userbirth;
if( nameTag.value == "" ){
alert("이름을 입력하세요");
nameTag.focus();
return false;
}
if( birthTag.value == "" ){
alert("생일 정보를 입력하세요");
birthTag.focus();
return false;
}
joinForm.submit();
}
</script>
</body>
</html>
1-2) Object_ok.jsp(forward)
<%@ 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>
</head>
<body>
<%
String username = request.getParameter("username");
String userbirth = request.getParameter("userbirth");
// 페이지이동
pageContext.forward("object_result.jsp");
%>
</body>
</html>
1-2) Object_ok.jsp(redirect)
<%@ 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>
</head>
<body>
<%
String username = request.getParameter("username");
String userbirth = request.getParameter("userbirth");
// 페이지이동
response.sendRedirect("object_result.jsp");
%>
</body>
</html>
1-3) Object_result.jsp
<%@ 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>
</head>
<body>
<%=request.getParameter("username") %>님 어서오세요
<%=request.getParameter("userbirth") %>
</body>
</html>
<결과 화면>
1) Object_ok.jsp 파일에서 forward 방식으로 실행했을 때
2) Object_ok.jsp 파일에서 redirect 방식으로 실행했을 때