10. JSP - 특정페이지로 이동방법(forward/redirect)
페이지이동방법(**)
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>
맞지않으면
맞으면