부리부리

JSP 페이지 이동 5가지 방법 및 특성 본문

jsp

JSP 페이지 이동 5가지 방법 및 특성

구리불주먹 2019. 2. 20. 17:20
반응형
SMALL

J_avaScript를 이용

/*window.open*/, location.href, location.replace 등을 이용할수 있습니다

 

login_process.jsp

<% if (a == null) { %>

      <script>location.href = "admin.jsp"; </script>

<% } else { %>

      <script>alert(‎'권한이 없어요!'); window.history.back(); </script>

<% } %>

         

특징적인부분은 브라우져의 주소창이 변경되며

(이말은 즉슨 클라이언트가 다시 admin.jsp를 서버에 요청한다는 말입니다)

login_process.jsp 에서 jsp가 다 실행되고 브라우져에 out put된 html 및 j_avascript들만으로

실행된 코드들이라는 것입니다

 

response.sendRedirect를 이용

login_process.jsp

<% if (a == null) {

          response.sendRedirect("admin.jsp");

     } else {

          response.sendRedirect("login.jsp");

     }

 

     a = "test 입니다";

     System.out.println(a);

%>

 

이 코드에서 a가 출력될까요 안될까요?

출력 됩니다.

sendRedirect가 되더라도 밑에 jsp 코드들은 모두 실행 된다는 말입니다

response.sendRedirect는 기본적으로 모든 로직들을 다 처리한 후 코드 맨 마지막 부분에

사용하는 것이 올바른 방법입니다

만약 그렇지 못한 경우는 response.sendRedirect 다음 바로 return; 이라는 코드를 집어 넣어야 합니다

 

response.sendRedirect은 HTTP 헤더정보를 변경하여 redirect시키기 때문에 역시 브라우져의 주소창이 변경되며 sendRedirect가 실행되기전 html이나 xxxxjavascript로 out put되는 코드들은 모두 실행되지 않습니다.

query parameter로 데이터를 달아서 넘길수는 있지만 다량의 object 데이터를 request에 담아 넘길수는 없음으로 모든 처리가

완료 된 후 단순 페이지 이동에만 쓰이는것이 좋다.

http://www.... 이렇게 full 경로로도 redirect가 가능하다.

예)  response.sendRedirect("http://10.240.10.110:8080/jsp/return.jsp");

 

 

request.getRequestDispatcher().forward(Request, Response)를 이용

 

제어권을 완전히 옮긴다.

단일 커넥션에서 서버 내에서 이루어지기 때문에, 클라이언트의 주소창에는 변화가 없다.

결과값을 request.setAttribute()하여 담아 넘길 수 있음으로 결과 데이터를 다음 페이지에서 보여줘야 하는 경우에 유용하다.

 

예) servlet에서 요청을 받고 결과를 특정 jsp로 넘길 때..

항상 foward page는 "/" 로만 시작 할수 있음으로 http://www... 이런식으로는 리턴이 불가능하다.

getServletContext().getRequestDispatcher("/jsp/return.jsp");

 

 

④ forward 이용

jsp 태그의 <jsp:forward> 나 servlet의 RequestDispatcher.forward 를 이용할수 있습니다

 

login_process.jsp

<% if (a == null) { %>

          <jsp:forward page="admin.jsp"/>

<% } else { %>

          <jsp:forward page="login.jsp"/>

<% }

 

     a = "test 입니다";

     System.out.println(a);

%>

 

그럼 위의 코드의 경우 a가 출력 될까요 안될까요?

정답은 출력 안됩니다. 바로 forward 되어 버립니다.

클라이언트로 응답주지 않고 바로 서버측에서 admin.jsp로 이동하기 때문에

주소창이 바뀌지 않고 그로인해 브라우져에 출력되는 응답속도 또한 사용자가 보기에는

응답이 빠른 장점이 있습니다

 

하지만 forward 이후 JSP 코드들이 실행되지 않는것 사실이지만 만약 finally절이 있는경우

finally절은 실행 됨으로 확실히 알아둡시다.

 

⑤ meta 태그 이용

마지막으로 meta 태그를 이용할 수도 있습니다.

 

<META http-equiv=refresh content="0;url=admin.jsp">



▶setAttribute / getAttribute 를 사용하는 방법















반응형
LIST

'jsp' 카테고리의 다른 글

tiles  (0) 2019.03.27
20190213 jsp(저장경로)  (0) 2019.02.18
20190218 JSP  (0) 2019.02.18
WEB APPLICATION 구조  (0) 2019.02.11
JSP다운  (0) 2019.02.11