wrkbrs

특정페이지로 이동방법(forward/redirect) 본문

JSP

특정페이지로 이동방법(forward/redirect)

zcarc 2018. 10. 26. 16:21
페이지이동방법(**)




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>



맞지않으면





맞으면




출처