JSP_2강_6_★★★★JSP 페이지 이동(forward, redirect)★★★★

열라뽕따히·2024년 3월 14일

JSP

목록 보기
12/43

JSP 페이지 이동 : forward, redirect

  • 웹 애플리케이션은 여러 기능을 합쳐 하나의 프로그램을 실행하는 구조로 되어 있음.
    회원관리 기능, 게시판 관리 기능, 주문 관리 등에 대해 각각의 서블릿이 기능을 수행하게 되어 있음.
  • 이 때 프로그램을 실행하다 보면 서블릿끼리 또는 서블릿과 JSP를 연동해서 작업을 해야 하는 경우가 생길수 밖에 없음. 예를 든다면 쇼핑몰의 경우 상품 관리 서블릿에서 조회된 상품을 화면에 표시하는 JSP 페이지는 각각 따로 존재하게 되어 있음.
    ★★★ 따라서 사용자가 상품 조회를 요청하면 상품 관리 서블릿은 데이터베이스에서 해당 상품에 대한 상품 정보를 조회한 후 다시 JSP에게 해당 상품 정보를 전달하여 상품 정보를 표시해주어야 함. ★★★
    이러한 페이지 이동은 필수적이라고 보면 됨.
  • 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 함.
  • 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있음.
  • 요청에 정보를 포함시켜 다른 서블릿에게 전달 할 수 있음.
  • ★★★서블릿에서 JSP 페이지로 데이터를 전달하는 데 사용이 됨.★★★

1. ★★★forward 이동 방식★★★

  • request의 영역(scope)에 담긴 값이 유효함.
  • 이동된 화면이 url 창에 안 보인다. (사용자는 이동했는지 알 수 없음)
  • 주로 정보(키)를 넘겨줄 때 사용함(중요).
  • RequestDispathcer 객체를 사용함.
    ==> forward() 메서드를 사용.
  • 형식)
RequestDispatcher rd = request.getRequestDispatcher("이동위치");
rd.forward(request, response);

2. redirect 이동 방식

  • 클라이언트가 새로 페이지를 요청하는 것과 같은 방식으로 페이지가 이동이 됨.
  • 웹 브라우저에게 재요청하는 방식임.
  • 일반적으로 변수 값을 넘겨줄 때 사용함(중요).
  • request, response 값이 유효하지 않음.
  • 이동된 페이지가 url 창에 나타남.
  • 형식) response.sendRedirect("이동위치");






Ex06.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>
		 
		 <div align = "center">
		 	<hr width = "30%" color = "red">
		 		<h2>페이지 이동 관련 내용</h2>
		 	<hr width = "30%" color = "red">
		 	<br/> <br/>
		 	
		 	<h3>페이지 이동(forward)</h3>
		 	<form method = "post" action = "Ex06_01.jsp">
		 			<p>아이디 : <input type = "text" name = "id"></p>
		 			<p>비밀번호 : <input type = "password" name = "pwd"></p>
		 			
		 			<input type = "submit" value = "로그인">
		 	</form>
		 	
		 	<br/>
		 	<hr width = "30%" color = "red">
		 	<br/>
		 	
		 	<h3>페이지 이동(redirect)</h3>
		 	<form method = "post" action = "Ex06_02.jsp">
		 			<p>아이디 : <input type = "text" name = "id"></p>
		 			<p>비밀번호 : <input type = "password" name = "pwd"></p>
		 			
		 		    <input type = "submit" value = "로그인">
		 	</form>
		 
		 </div>

</body>
</html>

=============================실행=============================




Ex06_01.jsp 생성


=============================코드=============================

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

		String user_id = request.getParameter("id").trim();
		String user_pwd = request.getParameter("pwd").trim();
		
		/*
			원래는 DB의 회원 관리 테이블 폼에서 입력한 아이디와 
			입력한 비밀번호가 일치하는지 확인을 하여 회원이면 메인 페이지로 이동
		*/
		
		String db_id = "hong";
		String db_pwd = "1234";
		
		if(user_id.equals(db_id)){
			// 아이디가 존재하는 경우
			if(user_pwd.equals(db_pwd)){
				// 회원인 경우 ==> 메인 페이지로 이동 => 페이지 이동
				
				// 특정한 정보를 넘겨주고 싶은 경우
				request.setAttribute("Name", "홍길동");
				request.setAttribute("Phone", "010-1111-1234");
				
				RequestDispatcher rd = request.getRequestDispatcher("Ex07.jsp");
				
			 // 실제 페이지 이동
				rd.forward(request, response);  
			}else {
				// 아이디는 일치하나 비밀번호는 다른 경우
			}
		}else { 
		   // 아이디가 테이블에 없거나 아니면 아이디가 잘못 입력된 경우
			
		}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>




아이디와 비밀번호가 일치했을 때 넘어가는 페이지를 만들자!

Ex07.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>

		<div align = "center">
			<hr width = "30%" color = "marmoon">
				<h3>메인 페이지</h3>
			<hr width = "30%" color = "marmoon">
			<br/> <br/>
			
			<h3>
				<%=request.getAttribute("Name") %> 님 환영합니다! <br/>
				연락처 : <%=request.getAttribute("Phone") %>
			</h3>
			
			<h4>
				입력받은 아이디 : <%=request.getParameter("id").trim() %> <br/>
				입력받은 비밀번호 : <%=request.getParameter("pwd").trim() %> 
			</h4>
		
		</div>

</body>
</html>

=============================실행=============================

Ex07의 경로가 보이지 않음! 보안성이 좋다는 뜻~!




redirect 방식을 사용할 Ex06_02.jsp 도 생성하자!


=============================코드=============================

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

		String user_id = request.getParameter("id").trim();
		String user_pwd = request.getParameter("pwd").trim();
		
		/*
			원래는 DB의 회원 관리 테이블 폼에서 입력한 아이디와 
			입력한 비밀번호가 일치하는지 확인을 하여 회원이면 메인 페이지로 이동
		*/
		
		String db_id = "hong";
		String db_pwd = "1234";
		
		if(user_id.equals(db_id)){
			// 아이디가 존재하는 경우
			if(user_pwd.equals(db_pwd)){
				// 회원인 경우 ==> 메인 페이지로 이동 => 페이지 이동
				
				// 특정한 정보를 넘겨주고 싶은 경우
				request.setAttribute("Name", "홍길동");
				request.setAttribute("Phone", "010-1111-1234");
				
				// 페이지 이동
				response.sendRedirect("Ex08.jsp");
				
			}else {
				// 아이디는 일치하나 비밀번호는 다른 경우
				System.out.println("비밀번호가 틀립니다!");
			}
		}else { 
		   // 아이디가 테이블에 없거나 아니면 아이디가 잘못 입력된 경우
		   System.out.println("아이디가 틀리거나 회원이 아닙니다!!");
			
		}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>



Ex08.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>

	<div align = "center">
				<hr width = "30%" color = "marmoon">
					<h3>메인 페이지</h3>
				<hr width = "30%" color = "marmoon">
				<br/> <br/>
				
				<h3>
					<%=request.getAttribute("Name") %> 님 환영합니다! <br/>
					연락처 : <%=request.getAttribute("Phone") %>
				</h3>
				
				<h4>
					<%-- null 값이 넘어오기 때문에 error 
					입력받은 아이디 : <%=request.getParameter("id").trim() %> <br/>
					입력받은 비밀번호 : <%=request.getParameter("pwd").trim() %> 
					--%>
				</h4>
			
			</div>

</body>
</html>

redirect 방식

로그인 클릭!

0개의 댓글