JSP(2)

위수현·2023년 3월 17일
0
post-thumbnail

액션태그

  • 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>

<결과 화면>

-> 구글, 네이버, 다음을 클릭하여 해당 페이지로 이동할 수 있다.


페이지 이동

forward 방식

  • request에 담긴 값이 유효한다.(response, request가 유지된다.)

  • 이동된 url이 화면에 안보인다.(사용자는 이동했는지 알 수 없음)

    forward 하는 방법

    		pageConext.forward("이동할 페이지");
    
    	OR
    
    		<jsp:forward page = "이동할 페이지" />

redirect 방식

  • 클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동된다.
  • request, response가 유지되지 않는다.(새로 만들어짐)
  • 이동된 url이 화면에 보인다.

redirect 하는 방법

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 방식으로 실행했을 때

profile
수현

0개의 댓글