3일동안 날 괴롭히던 이클립스(?) 오류를 드디어 복구했다... 정상적이라면 지금쯤 43일차 포스팅이 이어져야했지만 갑자기 이클립스가 객사(?)하는바람에 고치고 오느라 포스팅이 늦어졌다.
결과적으로 오류가 난 이유는 몰라도 해결은 했고. 해당 오류를 수정해 나가는 과정은 시간이 되면 정리해서 포스팅 하겠다.
sendRedirect 와 JSP:forward
우리는 수많은 페이지 이동을 통해 정보를 서버와 주고 받고 또한 넘겨주고 하며 살아가고 있다. 예를들어서 우리가 어느 홈페이지에 가서 회원가입을 하고, 로그인을 하고 이러한 행동 하나하나 사이에 Parameter가 Page가 이동되는동안 함께 이동되며 그 Parameter를 가지고와 전환된 Page에서 사용자의 정보를 뿌려주거나, 장바구니의 목록을 보여주거나 등등
넘기고 넘겨받은 Parameter는 각각의 사용처에서 보여주고, 저장되며 사용된다.
이렇게 Page 전환을 하기 위해서 사용되는 두 코드가 바로
sendRedirect와 JSP:forward 이다.
이 두 코드는 동일한 기능을 가지고 있다. 바로 Page 전환이다. Page를 전환할때 sendRedirect로 보내주거나, Forward 태그를 이용하여 Page를 전환해준다.
그럼 이 둘의 차이는 어떤 차이가 있을까?
먼저 첫번째로는 sendRedirect는 Javascipt 언어이다. JSP:foward는 HTML에서 사용하는 태그이다.
두번째로는 URL 경로가 변경되느냐 안되느냐의 차이가 있다.
forward는 웹브라우저에서 최초로 호출한 Page만 보여주고, 이동한 페이지의 URL 정보는 보여지지 않는다.
sendRedirect는 지시한 URL로 이동되는 경로도 함께 보여주고, URL 값도 변하게 된다.
세번째로는 객체의 재사용 여부이다.
forward는 객체의 재사용이 가능하다. forward에 의해 실행되는 Page는 request와 response 객체를 공유한다.
sendRedirect는 객체의 재사용이 불가능하다. 새롭게 request와 response를 생성하여 새 Page에 전달한다.
이런 차이점이 있기때문에 웹개발을 할때 두 차이점을 잘 이용하여 적재적소에 알맞는 코드로 적용해야한다.
게시판을 만든다고 가정해보자. 회원가입, 글쓰기 같은 DB에 직접적으로 변화를 준다면, Request와 Response는 재사용이 되면 무언가 오류가 발생할 가능성이 크다. 따라서 Redirect가 적절하다.
하지만 공지사항 게시판같은 별도의 조회만 하는 Page라면 JSP:forward가 적절하다.
Page 3개를 만들어주겠다.
Page1에서 값을 넘겨받아 Page2에 뿌려주고, 조건식으로 조건이 일치하면 Page2를 거치지 않고 Page3으로 이동되게 할것이다.
먼저 sendRedirect를 이용한 Page이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>SendRedirect와 jsp:forward</h1>
<form action="home_redirect2.jsp">
이름:<input type="text" id="user_name" name="user_name" placeholder="이름"/>
비번:<input type="password" id="user_pw" name="user_pw"/><br/>
<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");
String pw = request.getParameter("user_pw");
if(name.equals("홍길동")) {
response.sendRedirect("home_redirect3.jsp");
}
%>
<h2>넘겨받은이름:<%=name %></h2>
<h2>넘겨받은비번:<%=pw %></h2>
</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>sendRedirect로 보내진 page3 홍길동만 올수있다</h1>
</body>
</html>
이렇게 총 3페이지를 만들어주었다.
첫번째 페이지이다. 확인을 누르게되면 Page2로 넘어간다
URL을 살펴보면 user_name이 현재 한글이라 코드로 표시되는데 김삿갓에 user_pw는 123으로 표기된다
그리고 현재 이동된 Page의 이름을 나타내주고 있다.
Page2에서 if 조건식을 달아서 이름이 "홍길동" 이면 Page2가 아닌 다른 Page로 이동되게 설정해놨다. 다시 돌아가서 이름에 "홍길동"을 입력해보자.
Page3에 URL을 보자. Parameter값이 전달된게 없다. 이는 sendRedirect로 Page2를 거치면서 별도로 작업을 해줘야 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>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일경우
response.sendRedirect("home_redirect3.jsp?user_name="+name+"&user_pw="+pw); //강제 Page변경
}
%>
<h2>넘겨받은이름:<%=name %></h2>
<h2>넘겨받은비번:<%=pw %></h2>
</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>sendRedirect로 보내진 page3 </h1>
<%String name = request.getParameter("user_name");
String pw = request.getParameter("user_pw");%>
<h2>넘겨받은이름:<%=name %></h2>
<h2>넘겨받은비번:<%=pw %></h2>
</body>
</html>
정상적으로 page이동과 Parameter가 잘 넘어오는것을 확인할수 있다.
JSP:forward는 2부에서 포스팅하도록 하겠다.
'Study > 중앙정보처리학원과정' 카테고리의 다른 글
41일차. MySQL 설치 (0) | 2022.12.26 |
---|---|
40일차(2). Request SendRedirect와 <JSP:forward와 param> (1) | 2022.12.24 |
39일차. JSP function 과 String의 Method (0) | 2022.12.19 |
38일차. JSP Output, 변수선언(variable) (0) | 2022.12.18 |
37일차. JSP getParameterValues, getParameterNames, getParameterMap (0) | 2022.12.15 |