먼저 Redirect 와 Forward 의 차이를 알아보겠다.
JSP환경에서 이들은 한 페이지에서 다른 페이지로 전환될 때의 기능에 차이점을 지닌다.
- Redirect
예시로 들자면 클라이언트가 a에게 무언가 요청했을 때, a는 b에게 가보라고 명령을 한다.
그 명령을 'Redirect'고 할 수 있으며
클라이언트가 지닌 웹페이지는 그 명령에 따라 b에게 가서 결과를 가져온다.
이에 따라 웹페이지의 URL도 바뀌며 (a에서 b로)
b에게 다시 요청을 한 것이기에 객체도 다시 생성한다.
++
데이터베이스에 insert,delete,update를 할 때 redirect 해야 한다.
또한 밑에 나올 세션이 변경(세션안에 무언가 입력,수정,삭제)될 때에도 리다이렉트 해야 한다.
test1.jsp에서 클릭 시 test1_ok로 가도록 하였다.
test1_ok.jsp는 위에 예시로 들었을 때 a라고 할 수 있다.
test1_ok.jsp이다.
getParameter로 데이터를 받으며 request에 담겨오는 데이터들은 무조건 데이터 타입이 String이다.
자바 입장에서는 갑자기 들어온 데이터가 어떤 타입인지 모르니 Object로 받으므로 형변환을 해준다.
msg에 '방가방가'라는 값을 넣었다.
클라이언트에게 response에 담아서 명령을 주며
다음 페이지까지만 유효하기 때문에 1:1로만 전해진다. (=life cycle)
sendRedirest로 명령을 주면서 이게 실행되는 순간 test1_s로 빠지기 때문에 이 밑의 코딩들을 실행되지 않는다.
결과를 보여줄 test1_s.jsp이다.
사진에 첨부하진 않았지만 body영역에 결과를 입력해주면, 그 결과가 웹페이지에 출력된다.
test1_s에선 setAttribute를 getAttribute로 받으며 마찬가지로 오브젝트였던 타입을 String으로 형변환하였다.
- Forward
Forward는 보안 기능이 탁월하다.
마찬가지로 예시를 들자면,
클라이언트가 a에게 10+20 연산을 해달라고 요청했을 때
하는 법을 모르는 a는 b에게 추가로 요청하여 결과를 받은 다음, 클라이언트에게 전달한다.
클라이언트 입장에서는 a가 준 결과에 대해 a가 직접 했는지 혹은 b에게 요청을 한건지 모른다.
단순히 결과만 받기 때문이다.
즉, 웹페이지가 b의 화면일지라도 URL은 a인 것이다.
URL이 바뀌는 위의 Redirect와 달리 Foward는 처음에 요청한 jsp가 그대로 표시된다.
test / test_for / test_s 총 3파일을 통해 forward를 하였으며, 대표적인 코딩을 가져왔다.
(사진 밑의 설명란에 파일명 참고)
먼저 test.jsp에서 클릭 시 test1_for로 가도록 하였으며
예시에서 a라고 할 수 있는 test1_for에서는 forward를 통해 b라고 할 수 있는 test1_s파일로 가게 하였다.
test1_s에서는 데이터를 받으며 오브젝트였던 타입을 String으로 형변환하였으며
추가로 body부분에서 결과를 입력하였다.
즉, 결과는 test1_s에서 만들어졌지만 결과 페이지의 url은 처음에 요청받은 test1_for로 나타난다.
이것이 forward이다.
하나의 페이지에서 다른 페이지로 전환하는 방법은 총 4가지가 있다.
그 중에 2가지 방법을 먼저 설명하겠다.
첫번째 방법은 getParameter이다.
form 방식이 post이던 get이던 상관없이 모두 getParameter로 받는 것이다
두번째 방법은 session이다.
- Session
session이란 모든 파일들이 공용으로 사용할 수 있는 메모리 공간이다.
이 곳에 데이터를 올리면 다른 곳에서도 쓸 수 있다.
세션에 데이터를 올리는 방법은 setAttribute로 가능하다.
올린 데이터 타입은 object이며, 다른 곳에서 데이터를 받을 때 downcasting하여 형변환한다.
또한 받은 데이터를 변경하던 삭제 등을 할 때에 redirect를 해야 한다.
2월10일
'개발 교육 TIL > front-end' 카테고리의 다른 글
[JSP] 입력 - 결과창 웹페이지 만들기 (성적처리 프로그램) (0) | 2022.02.19 |
---|---|
[JSP] hidden, 액션 태그 (0) | 2022.02.19 |
[JSP] form형식(get/post방식), 연산 프로그램 (0) | 2022.02.16 |
[JSP] JavaScript (var, typeof, function, 배열) (0) | 2022.02.16 |
[HTML] 태그 정리 - 글꼴 태그, 테이블 태그, form 태그, 목록 태그 등 (0) | 2022.02.14 |