본문 바로가기
Study/중앙정보처리학원과정

40일차(2). Request SendRedirect와 <JSP:forward와 param>

by 얏옹이 2022. 12. 24.
반응형

<JSP:forward>와 <param>

 

을 알아보겠다.

 

2022.12.23 - [Study/중앙정보처리학원과정] - 40일차(1). Request SendRedirect와 <JSP:forward와 param>

 

40일차(1). Request SendRedirect와 <JSP:forward와 param>

3일동안 날 괴롭히던 이클립스(?) 오류를 드디어 복구했다... 정상적이라면 지금쯤 43일차 포스팅이 이어져야했지만 갑자기 이클립스가 객사(?)하는바람에 고치고 오느라 포스팅이 늦어졌다. 결

yat-ong.tistory.com

 

Sendredirect는 지난 1부를 참조하면 된다. 지난포스팅에서 Sendredirect로 page이동을 해주고 Parameter 값을 넘겨주는것을 확인했다면

 

forward와 sendredirect의 기능은 동일하다고 이전글에서 언급했었다.

 

여기서 그럼 Param은 무엇인가?

 

forward와 Param도 전달하고자 하는 값이 있다면 문서에 전달하는 Action Tag(액션태그) 이다.

 

Param의 기본 문법은 <jsp:param name='전달할 키' value='전달할 값'/>

 

Param과 비슷한 기능을 하는 JSP의 기본 객체는 request.setAttribute([전달할키,전달할값); 가 있다.

 

 

이번 포스팅에서는 JSP:forward로 Page이동을 시켜보겠다.

 

기존 포스팅 Page1에서 Page2를 거치지않고 forward를 이용하여 바로 page3으로 이동할것이며

Parameter값을 가지고 이동하는 코드를 작성해보았다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Page1</title>
</head>
<body>
	<h1>jsp forward와 param</h1>
	<form action="jspforward2.jsp">
		<!-- url에 user_name=입력값 으로 parameter가 넘어가게됨 -->
	이름:<input type="text" id="user_name" name="user_name" placeholder="이름"/>
	
		<!-- url에 user_pw=입력값으로 parameter가 넘어가게됨 --> 
	비번:<input type="password" id="user_pw" name="user_pw"/><br/>
	
		<!-- submit은 입력값을 가지고 form의 action을 수행시킨다 --> 
		<input type="submit" value="확인"/> 
	</form>  
</body>
</html>

 

 

<%@ 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>
	<h1>home_redirect_1222파일에서 값을 넘겨받는 페이지</h1><br/>
	<%String name = request.getParameter("user_name"); //Parameter이름을 가져와 String 타입 name 변수에 대입
		String pw = request.getParameter("user_pw"); //Parameter이름을 가져와 String 타입 pw 변수에 대입
		
		if(name.equals("kim")) { %> <!-- name이 문자열 kim일경우 --> 
			<h2>넘겨받은이름:<%=name %></h2>
			<h2>넘겨받은비번:<%=pw %></h2>
			<jsp:forward page="jspforward3.jsp"></jsp:forward> <!-- response.Sendredirect와는 달리 별도로 parameter값을 정해 주지 않았다 -->
		<% } %>
</body>
</html>

 

<%@ 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>
	<h1>Forward로 보내진 page3 </h1>
	<%String name = request.getParameter("user_name");
		String pw = request.getParameter("user_pw");
		%>
		
		<h2>넘겨받은이름:<%=name %></h2>
		<h2>넘겨받은비번:<%=pw %></h2>
		
		
</body>
</html>

 

이렇게 총 3개의 Page를 생성해주었다.

 

주의깊게 살펴봐야할것은 Page2에 별도로 파라미터값을 전달할 코드를 작성하지않았다. Forward를 이용하여 Page 이동만 하게 코드를 작성했다.

 

 

여기까지는 크게 Sendredirect와 다를바가 없다. ID를 kim으로 입력해보겠다.

 

 

주소창을 잘 살펴보자. 분명히 Page3인데 주소창에는 forward2.jsp로 되어있고, 즉 Sendredirect와는 이동된 주소값이 변하지않았다. 그리고 별도로 Parameter값을 전달하는 코드를 작성하지 않았음에도 Parameter값을 가지고 넘어온것을 확인할수 있다.

 

<jsp:forward>는 말 그대로 최초에 요청한 Parameter의 값을 지닌 상태로 Page가 이동된다.

Sendredirect는 최초에 요청한 Parameter는 수행하고, 그 뒤에 새로운 요청을 받아서 Page가 이동된다. 라고 차이점을 말할수 있겠다.

 

<jsp:param>은 forward 액션태그의 하위 속성인데, 이동되는 문서에 전달하고자 하는 값이 있을때 사용한다.

 

Page2에 Page1에서 넘겨받은 Parameter 말고 추가로 <jsp:param>을 이용하여 값을 하나 더 전달해보겠다.

 

<%@ 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>
	<h1>home_redirect_1222파일에서 값을 넘겨받는 페이지</h1><br/>
	<%String name = request.getParameter("user_name"); //Parameter이름을 가져와 String 타입 name 변수에 대입
		String pw = request.getParameter("user_pw"); //Parameter이름을 가져와 String 타입 pw 변수에 대입
		
		if(name.equals("kim")) { %> <!-- name이 문자열 kim일경우 --> 
			<h2>넘겨받은이름:<%=name %></h2>
			<h2>넘겨받은비번:<%=pw %></h2>
			<jsp:forward page="jspforward3.jsp"><jsp:param name="user_nic" value="Killer"></jsp:param></jsp:forward> <!-- response.Sendredirect와는 달리 별도로 parameter값을 정해 주지 않았다 -->
			<!-- param 액션태그로 parameter를 하나 추가해줬다 -->
		<% } else { %>
			<h2>넘겨받은이름:<%=name %></h2>
			<h2>넘겨받은비번:<%=pw %></h2>
		<%}%>
</body>
</html>

 

보면 forward 태그 뒤에 param을 추가하고 name에 키값, value에 value값을 전달하도록 코드했다.

 

page3에서 받은 Parameter를 출력해주는 부분을 조금 추가했다.

 

<%@ 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>
	<h1>Forward로 보내진 page3 </h1>
	<%String name = request.getParameter("user_name");
		String pw = request.getParameter("user_pw");
		String nic = request.getParameter("user_nic");
		%>
		
		<h2>넘겨받은이름:<%=name %></h2>
		<h2>넘겨받은비번:<%=pw %></h2>
		<h2>Param으로 넘겨받은것:<%=nic %></h2>
		
		
</body>
</html>

 

이제 kim으로 다시 로그인을 해보겠다.

 

 

Page1에서 입력값이 별도로 없었던 Paramter지만 2페이지에서 Page이동이 될때 param으로 값을 추가로 들고 이동했다.

 

따라서 Page3에서 출력을 할수 있게 된것이다. 하지만 주소창에는 표시가 되지않는다.

 

따라서 param은 일반 유저들이 볼수가 없는 값들을 이동시킬때 유용하게 사용된다.

 

 

반응형