Programming/JSP

[JSP] RequestDispatcher().forward();

Criming 2022. 10. 14. 20:21

requestDispatcher

request.getRequestDispatcher("ex5_B.jsp").forward(request, response);

내장객체 request에 속성인 requestDispatcher()는 포워드(forward)와 맞찬가지로 

현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.


예제1) forward 사용해보기 : 범위(Scope)별 변수&데이터 지정해주어 forward가 어떻게 사용되는지 이해해보기

(ex5_A)

<title>ex5_A</title>
</head>
<body>
	<%
	// 범위별 변수명, 변수데이터 지정해주기
	// setAttribute("속성이름", "속성데이터");
	pageContext.setAttribute("id", "pageId");
	request.setAttribute("id", "requestId");
	session.setAttribute("id", "sessionId");
	application.setAttribute("id", "applicationId");
		
	// B페이지에 request와 respose를 가져와 사용가능
	request.getRequestDispatcher("ex5_B.jsp").forward(request, response);
	%>
</body>

(ex5_B)

<title>ex5_B</title>
</head>
<body>
	<h2> B 페이지 </h2>
	페이지 : <%=pageContext.getAttribute("id") %> <br>
	요청 : <%=request.getAttribute("id")%><br>
	세션 : <%=session.getAttribute("id") %><br>
	애플리케이션 : <%=application.getAttribute("id") %><br>
	
	<a href="ex5_C.jsp">C 페이지로 이동</a>
</body>

(ex5_c)

<title>ex5_C</title>
</head>
<body>
	<h2> C 페이지 </h2>
	페이지 : <%=pageContext.getAttribute("id") %> <br>
	요청 : <%=request.getAttribute("id")%><br>
	세션 : <%=session.getAttribute("id") %><br>
	애플리케이션 : <%=application.getAttribute("id") %><br>
</body>

 

예시에서 브라우저가 url로 'ex5_A.jsp'를 서버에 요청하고 있다.

'ex5_A.'파일에서는 request.getRequestDispatcher("ex5_B.jsp").forward(request, response); 코드에 따라

웹 브라우저에 'ex5_B'페이지로 이동할 것을 요청하며 요청객체를 재사용 및 응답 객체를 생성 하고 있다.


예제2) forward 방식 2가지로 파라미터 넘기기

 

(loginService.jsp 코드참고)

첫째, request.getRequestDispatcher("adminPage.jsp").forward(request, response);

둘째, <jsp:forward page="userPage.jsp" />

 

(login.jsp)

<body>
<form action="loginService.jsp">
	<input type="text" name="id" placeholder="아이디" /><br>
	<input type="password" name="pw" placeholder="비밀번호"><br>
	<input type="radio" name="user" value="user"> 사용자
	<input type="radio" name="user" value="admin"> 관리자 <br>
	<input type="submit" value="로그인"/>
</form>
</body>

(loginService.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String user = request.getParameter("user");
	
	if(user.equals("admin")){
		request.setAttribute("param", "param_admin");
		request.getRequestDispatcher("adminPage.jsp").forward(request, response);
	}else{
%>
		<jsp:forward page="userPage.jsp" >
			<jsp:param value="param_user" name="param"/>
		</jsp:forward>
<%
	}
%>

(adminPage.jsp)

<body>
	<h3>관리자로 로그인 성공</h3>
	아이디 : <%= request.getParameter("id")%>
	비밀번호 : <%= request.getParameter("pw")%>
	라디오 : <%= request.getParameter("user")%>
	매개변수 : <%= request.getParameter("param")%>
</body>

(userPage.jsp)

<body>
	<h3>사용자로 로그인 성공</h3>
	비밀번호 : <%=request.getParameter("pw") %><br>
	사용자 : <%=request.getParameter("user") %><br>
	아이디 : <%=request.getParameter("id") %><br>
	매개변수 : <%=request.getParameter("param") %> <br>
	<a href="login.jsp" > 이전 </a>
</body>

(참고 사이트)

https://dololak.tistory.com/502

 

[서블릿/JSP] RequestDispatcher란. RequestDispatcher로 forward() 하기

참고글 [서블릿/JSP] JSP 리다이렉트로 페이지 이동시키기 [서블릿/JSP] JSP 기본객체 종류 [HTTP] 리다이렉트(Redirect)란? RequestDispatcher란 RequestDispatcher는 클라이언트로부터 최초에 들어온 요청을 JSP..

dololak.tistory.com

https://zester7.tistory.com/33

 

HttpServletRequest, HttpServletResponse에 대한 이해

WAS가 웹브라우져로부터 Servlet요청을 받으면 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 생성하여 저장 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체) 생성된 Http

zester7.tistory.com