클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

JSP 내장 객체와 액션 태그 3 - response 내장 객체와 페이지를 이동하는 2가지 방식 본문

웹 · 앱 개발/JSP & Servlet

JSP 내장 객체와 액션 태그 3 - response 내장 객체와 페이지를 이동하는 2가지 방식

huenuri 2024. 8. 28. 06:24

오늘도 새벽 4시 반에 일어나서 공부를 시작해본다. 일정 관리를 하고 일기를 쓰다 보면 어느새 30분이 훌쩍 지나간다. 오늘은 건강일지도 쓰느라 시간이 더 많이 지체되었다. 그래도 이렇게 매일 일기를 쓰는 시간은 매우 중요하다. 어제 저녁에 하다만 공부를 마무리하려고 한다. 오늘도 새벽에 3시간 동안 정말 열심히 공부해볼 것이다.


 

 

 

 

페이지 강제 이동하기

 

 

강제 이동을 하려니까 연결이 되지 않는다는 메시지가 떴다. 하지만 네이버나 다른 사이트로는 이동이 잘 된다.

로그인 처리를 위해서는 로그인 성공 실패에 따라 서로 다른 페이지로 이동해야 하기 때문에 리다이렉트 기능을 사용해야 한다. 다음 예제를 통해 이 부분을 학습해보기로 하자.

 

여기서는 로그인 처리를 하지 못하기에 강제 이동되어 문제가 발생하고 있다.


 

 

 

 

로그인 인증 처리하기

1. 아이디와 암호를 입력 받는 로그인 폼을 작성한다.

 

 

 

2. 아이디와 암호 입력 후 로그인이 성공했을 때는 04_main.jsp로 실패했을 때는 다시 로그인 폼으로 돌아가도록 하는 로그인 인증 처리 페이지를 작성한다.

 

 

 

3. 로그인 성공시 제공되는 main 코드를 작성한다.

 

 

JSP에서 다른 페이지로 이동하기 위한 방법은 다음과 같은 두 가지가 있다.

  1. 리다이렉트 방식
  2. 포워드 방식

리다이렉트 방식은 response 객체의 sendRedirect()로 페이지를 이동하는 방법을 말한다. 이 방식은 브라우저의 URL을 변경하도록 하여 페이지를 이동하는 방식으로 request와 response 객체가 유지되지 않는다.

 

 

리다이렉트 방식은 response 객체의 sendRedirect() 메소드를 사용하여 페이지를 이동하는 것이다. 이번에는 포워드 방식으로 페이지를 이동해 보기로 하자.

forward() 메소드는 requestDispatcher 객체로 접근해야만 호출이 가능하다. requestDispatcher 객체는 request 객체의 getRequestDispatcher() 메소드를 호출하여 얻어낸다. 이렇게 얻어낸 requestDispatcher 객체로 forward() 메소드를 호출하면 getRequestDispatcher() 메소드를 매개 변수로 지정한 페이지로 이동된다.

포워드 방식은 서버 상에서 페이지가 이동되기 때문에 브라우저는 알아채지 못하고 URL도 변경되지 않는다.

 

 

포워드 방식으로 페이지를 이동하면 클라이언트의 웹 브라우저의 주소란에 보이는 URL과 실제 웹 브라우저에서 로드하고 있는 문서가 서로 다르므로 사용자는 내부적으로 어떤 일들이 일어나고 있는지 감지할 수 없다.

sendRedirect()에서는 쿼리 스트링 형태로 데이터 전송을 했다면 forward() 메소드로 페이지를 이동하면서 데이터를 전송하고 싶을 경우에는 기존의 request 객체가 그대로 유지되기 때문에 setAttribute() 메소드로 request 객체에 속성 값으로 저정해서 보내준다.

request.setAttribute("age", 20);

 

반면 이동한 페이지에서 속성 값을 얻어와서 사용하려면 getAttribute() 메소드의 매개 변수로 속성 이름을 지정해야 한다. getAttribute() 메소드는 리턴 타입이 Objecty형이므로 정수형 변수에 저장하려면 cast 연산자를 이용해야 한다.

 


 

 

 

성년만 입장 가능한 사이트 만들기

1. 나이를 입력할 수 있는 화면을 작성한다.

 

 

 

2. 입력 받은 나이가 19세 미만이면 페이지 이동이 불가능하고 나이가 20세 이상이면 다음 페이지로 이동하는 코드를 작성한다.

 

왜 여기서 노란줄이 뜨는지 모르겠다. 30분이 넘도록 자료를 찾으며 고민해보았으나 해결할 길이 없어서 그냥 넘어가기로 했다.

 

 

 

이제 드디어 해결했다. 이 문제는 스크립트 코드의 위치를 잘못 썼기 때문이었다. 앞부분에 써도 되는지 알았는데 스크립트 태그는 바디 태그 안에 있어야 하는 것 같다.


 

 

 

 

3. 성년일 경우 입장 가능한 코드를 작성한다.

 

 

 

19세가 되지 않자 이런 메시지 창이 뜨고 있다.

 

 

 

19세가 넘으니 입장이 가능하게 되었다. 그리고 창은 설정한대로 분홍색이 되어 더 예쁘게 보인다.

 


학습을 마치고

이렇게 해서 response 내장 객체에 대해서 학습해보았다. 분량이 상당히 많고 책의 내용도 요약할 게 많았다. 그리고 코드에서 오류가 생겨서 그 문제를 연구하는데 한참의 시간을 보냈지만 나름 의미있는 작업이었다. 난 작은 경고창도 무시하지 않고 모두 해결하는 편이다.

이런 식으로 공부하니 배우는 것이 정말 많고 내 코드는 단 하나의 경고도 없이 잘 돌아가게 되었다.

 

아직 공부할 게 많은데 공부할 시간이 이제 2시간밖에 남지 않아 정말 아쉽다.