course 2021/JSP

JSP07 - 06forward

코딩하는토끼 2021. 11. 17. 19:14

이 폴더는 모두 main 과 other 가 쌍으로 작성되었다

01

이번에는 include 가 아닌 forward 액션태그

<jsp:forward page="이동할페이지 경로"></jsp:forward>

<jsp:forward page="01other.jsp"></jsp:forward> 이렇게 main 파일에 other 가 쓰였음

main 을 실행했으나, main 코드는 하나도 실행되지 않았고, other 코드만 실행됨 (페이지소스보기에서도 other 만 뜬다, 주소창에는 main이 뜬다 - 요청이 main 이라는 뜻)

forward 만나기 전의 코드는 forward 를 만나는 순간 모두 사라지고, 

other 를 출력하러 감! 그 후에 main 으로 다시 돌아오지 않으므로 forward 이후의 (html)코드 또한 출력되지 않는다!

요청 - from.jsp - forward- to.jsp - 페이지에 전달

from 에서 forward 실행

from 이 아닌 to 가 생성한 결과를 페이지에 띄우게 됨

from 에서 사용한 request, response 객체가 to 에 그대로 전달됨

02

딱히 내용 없음. 걍 main 에 html 코드 다 사라지고 import, forward 만, 그리고 사라진 html 코드를 other 에 작성함

이 아래 파일들 다 그렇게 작성함

03

request.getParameter

other 에서 param1: <%= request.getParameter("param1") %> 코드를 작성함

param1 의 값을 전달받음

주소창 (main) 에 쿼리스트링으로 param1 값을 써주면 (/03main.jsp?param1=value) 이 값을 받아서 페이지(other)에 표시됨 

→ 같은 request 객체를 쓰기 때문, 공유하기 때문!

? attribute 를 쓰면 다른곳에서도 쓸 수 있다 - 왜? 다른 곳? 뭘로 전달하는거지 아그냥 name? 이전 게시물 참고하기

04

다를거없음. 또 request.getParameter

05

이번에는 param 을 forward 안에 작성 (액션태그, 이전 include 안에 param 썼던거 -03module 폴더 - 참고)

param 은 데이터전달 목적으로 쓰임

이번에는 값이 전달되며, 따라서 쿼리스트링으로 써주지 않아도 초기값이 null 이 아닌 전달받은 값으로 표시됨

other 에서 역시나 request.getParameter 로 값을 받아 반환

 

06

배열 + attribute

main 에서

배열(list)에 4개의 원소를 저장, request.setAttribute 로 items 라는 변수에 배열(list) 저장하여 전달!

other 에서

새로운 배열 items 에 문자열로(attribute 는 반드시 형변환) 전달받은 items 를 저장 (getAttribute)

* 배열을 문자열로 반환? Arrays.toString(배열명) → [ ] 안에 반환

!!! 근데 forward 는 main 출력 안한댔는데?! 출력은 안하는데 자바 코드는 돌아가고 적용됨!

 

07

form, process, view1normal, view2vip 네개의 파일

form 에서 로그인 창 띄움, 입력값에 따라서 view1normal 띄울지, view2vip 띄울지 process 파일에서 처리

1) form

<form action="07process.jsp" method="post">
id : <input type="text" name="userid" value="iamnormal"> <br>
pw : <input type="password" name="userpw"> <br>
<input type="submit" value="로그인">
</form>

form 태그에 action 속성 값으로 process 파일(경로) 작성 → process 파일로 id, password 가지고 감 (전달)

2) process

<%
String userid = request.getParameter("userid");

if (userid.equals("iamnormal")) {
%>


	<jsp:forward page="07view1normal.jsp" />


<%
} else if (userid.equals("iamvip")) {
%>


	<jsp:forward page="07view2vip.jsp" />


<%
}
%>

getParameter 로 아이디를 전달받아 (action 으로 전달받았음), 이 아이디가 iamnormal 이면 view1normal 로 forward, iamvip 면 view2vip 로 forward

 

08

아이디에 따라 다른 파일로 포워딩하는 07 과 동일한데,

이번에는 포워딩될 파일이 WEB-INF 안에 있음 (절대경로, /WEB-INF 부터 작성)

META-INF, WEB-INF 는 밖에서 접근할 수 없음 (즉, 주소창에 임의로 경로를 작성해서 뜨도록 할 수있는 07과는 다름. 로그인해야 뜸)

실행 당연히 잘 됨

09

main, pagea, pageb(이 파일은 web-inf 안에) 

main 실행하면 처음에 오류 뜨는데 일단 무시, 쿼리 스트링으로 ?code=a 하면 pagea 파일로, ?code=b 하면 pageb 파일로 포워딩됨

일단 main 에서 code 는 getParameter 로 전달해줌

pagea, pageb 코드는 볼거없음

10

09 와 달리 Parameter 가 아닌 Attribute 로 전달함

pagea, pageb 모두 같은 폴더에 있으며, style css 꾸몄음

main - code 가 food 면, 배열 obj 전달하고 pagea 로 포워딩,

code 가 song 이면, 어레이리스트 o 를 전달하고 pageb 로 포워딩,

전달은 attribute 로

pagea, pageb 에서는 전달받아서 리스트로 내용 출력