WEB/JSP

10. JSP - 특정페이지로 이동방법(forward/redirect)

choi121xx 2013. 4. 19. 10:42




페이지이동방법(**)



1. 포워드(forward)

- request스코프에 담긴값이 유효하다.(request,response가 유지된다.)

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

- 포워드하는 방법

  1) pageContext.forward("이동할페이지");

  2) <jsp:forward page="이동할페이지"/>;

  3) RequestDispatcher rd = request.getRequestDispatcher("이동할페이지");

    rd.forward(request,response);



2. 리다이렉트(redirect)

- 클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동됨.

  request, response가 유지되지 않는다.(새로 만들어짐.)

- 이동된 url이 화면에 보인다.

- 리다이렉트 하는 방법

  response.sendRedirect("이동할페이지");



EX>

아이디, 비밀번호를 받아서 submit.

login.jsp  --> loginOk.jsp  --> result.jsp



login.jsp

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<form method="post" action="loginOk.jsp">

아이디<input type="text" name="id"/><br/>

비밀번호<input type="password" name="pwd"/><br/>

<input type="submit" value="로그인"/>

</form>

</body>

</html>




loginOk.jsp

; forward , redirect  하나씩 해보면 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

String id=request.getParameter("id");

String pwd=request.getParameter("pwd");

// request스코프에 값 저장하기.

request.setAttribute("id", id);

request.setAttribute("pwd", pwd);

//포워드방식으로 페이지 이동하기.

//pageContext.forward("result.jsp");


//redirect방식

response.sendRedirect("result.jsp");

%>

</body>

</html>



result.jsp

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

String id=(String)request.getAttribute("id");

String pwd=(String)request.getAttribute("pwd");

id=request.getParameter("id");

%>

<h3>request 스코프에 담긴 데이터<br/></h3>

id:<%=id %><br/>

pw:<%=pwd %><br/>

</body>

</html>



; forward 방식으로 전달하면 값은 전달되고, 주소는 result.jsp로 변경되지 않는다.


; redirect방식으로 넘기면 값은 null이다. loginOk.jsp에서 값을 넘기지 않아서.. 주소는 바뀌어 있다.

; redirect방식은 request유지하지 않기 때문에 다른 페이지로 이동하면 없어진다. 

response.sendRedirect("result.jsp?id=1"); 이렇게 찍어보면 1이 넘어간다.  




<jsp:forward> 태그 사용하기.


...

<%

String id = request.getParameter("id");

String pwd= request.getParameter("pwd");

request.setAttribute("id", id);

request.setAttribute("pwd", pwd);

//forward

//pageContext.forward("result.jsp");

// redirect

//response.sendRedirect("result.jsp?id="+id);

%>

<jsp:forward page="result.jsp"></jsp:forward>

..




<RequestDispatcher사용하기>

...

<%

String id = request.getParameter("id");

String pwd= request.getParameter("pwd");

request.setAttribute("id", id);

request.setAttribute("pwd", pwd);

//forward

//pageContext.forward("result.jsp");

// redirect

//response.sendRedirect("result.jsp?id="+id);

RequestDispatcher rd = request.getRequestDispatcher("result.jsp");

rd.forward(request, response);

%>

...




EX2>

로그인 후 ID/PWD가 맞지않으면 오류메시지 찍어주고, 맞으면 다른 페이지로 이동하기.

; post방식으로 전달

; id/pwd가 맞으면 session에 저장. 페이지 이동 후 아이디를 화면에 보여줌.

; 맞지 않으면 request에 담아서 login.jsp로 dispatch함. (forward)



login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<style type="text/css">

#error{

color:red;

font-size:10pt;

}

</style>

<%

//request스코프에 담긴 오류메시지 얻어오기.

String errMsg = (String)request.getAttribute("errMsg");

if(errMsg==null){

errMsg="";

}

%>

</head>

<body>

<form method="post" action="loginOk.jsp">

아이디<input type="text" name="id"/><br/>

비밀번호<input type="password" name="pwd"/><br/>

<div id="error"><%=errMsg %></div>

<input type="submit" value="로그인"/>

</form>

</body>

</html>




loginOk.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

String id=request.getParameter("id");

String pwd=request.getParameter("pwd");

if(id.equals("song") && pwd.equals("1234")){

session.setAttribute("id", id);

response.sendRedirect("../main.jsp");

}else{

//request에 오류메시지 담기.

request.setAttribute("errMsg", "아이디 또는 비밀번호가 일치하지 않아요.");

RequestDispatcher rd = request.getRequestDispatcher("login.jsp");

rd.forward(request, response);

}

%>

</body>

</html>



맞지않으면


맞으면