본문 바로가기
웹개발/jsp

페이지 이동시키는 방법(forward, redirect 차이)

by heavenLake 2022. 2. 17.
반응형

 

 

출처사이트 : https://maribel.tistory.com/m/40

 

 

1. response 객체

  • response.sendRedirect("이동할_페이지명");
  • ex) response.sendRedirect("http://www.daum.net");    //외부 사이트로 이동
  • ex) response.sendRedirect("./req.jsp");    //내부 파일의 상대경로를 지정하여 이동
  • URL창이 이동할 페이지로 전환되면서 이동
  • 데이터를 서로 공유할 수 없음

2. forward 액션태그

  • <jsp:forward page="이동할_페이지명" />
  • 외부 사이트로 이동 안됨
  • 자기 프로젝트의 다른 페이지로만 이동 가능
  • URL창이 이동할 페이지로 전환되지 않음
  • 데이터를 공유하면서 페이지 이동 가능

3. 자바스크립트

  • location.href="이동할_페이지명"
  • location.replace("http://~이동할_페이지명")
  • history.back() --> 이전 페이지로 이동
  • history.go(-1) --> 이전 페이지로 이동
  • history.forward() --> 다음 페이지로 이동

 

 

 

출처사이트 : https://installed.tistory.com/m/entry/8-JSP-%ED%8A%B9%EC%A0%95%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A1%9C-%EC%9D%B4%EB%8F%99%EB%B0%A9%EB%B2%95

 

  

 

 

1. 포워드(forward)

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

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

- 포워드하는 방법

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

  2) ;

  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

 

 

 

 

 

 

 

아이디

비밀번호

 

 

 

 

 

 

loginOk.jsp

; forward , redirect  하나씩 해보면 

 

 

 

 

 

 

<%

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");

%>

 

 

 

 

result.jsp

 

 

 

 

 

 

<%

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

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

 

id=request.getParameter("id");

%>

request 스코프에 담긴 데이터

id:<%=id %>

pw:<%=pwd %>

 

 

 

 

; 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"%>

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"%>

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>

 

 

 맞지않으면

 

 맞으면

 

 

 

 

 

 

 

 

 

반응형

댓글