차근차근/JAVA Script

자바스크립트 질문좀 할게요.

예쁜꽃이피었으면 2014. 7. 29. 00:28

http://www.okjsp.net/seq/249785

회원 정보 수정을 처리하는 jsp에서
처리후, 스크립트로

<script language="javascript">alert("수정했습니다."); </script>

<% response.sendRedirect("..\\main.jsp"); %>


이런식으로 팝업창을 띄우고 확인을 클리하면
리다이렉트로 설정한 페이지로 이동하게 하려고 했는데요.

팝업창 무시되고 바로 페이지 이동하네요...
어떤식으로 고쳐야하나요???
클릭후에 이동하게 하고 싶습니다.

 

  • 자바코드를 자바스크립트코드로 바꾸세요

 

  • <a style="WHITE-SPACE: normal; TEXT-TRANSFORM: none; WORD-SPACING: 0px; COLOR: rgb(0,0,51); FONT: small Verdana, Arial, Gulim; LETTER-SPACING: normal; TEXT-INDENT: 0px; -webkit-text-stroke-width: 0px" name="754899"></a><span style="WHITE-SPACE: normal; TEXT-TRANSFORM: none; WORD-SPACING: 0px; FLOAT: none; COLOR: rgb(0,0,51); FONT: small Verdana, Arial, Gulim; DISPLAY: inline !important; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(240,240,255); TEXT-INDENT: 0px; -webkit-text-stroke-width: 0px"></span>
  • <script language="javascript">alert("수정했습니다.");location.href='../main.jsp';</script>

 

  • 항상 모든 문제에는 원인이 있습니다. 
    결론 부터 말씀드리면 자바스크립트 코드보다 sendRedirect 명령어가 먼저 실행 되기 때문에 
    이런 질문자님께서 원하는 현상이 일어나지 않는것입니다. 

    그래서 개미배꼽님이 하신것처럼 response객체로 접근해서 페이지를 이동하기 보단 
    (response 객체를 사용하시지 말고) 
    자바스크립트 코드에 location 객체의 속성을 사용해서 페이지를 이동하게 한것입니다. 


    제가 자바를 잘 하는건 아니지만 제 생각 말씀드려볼께요. 
    jsp는 자동으로 서블릿 클래스파일로 컴파일 된다고 알고있습니다. 

    서블릿은 한줄한줄 html의 내용을 string 형식으로 응답하며 
    응답을 받은 웹 브라우져는 html 내용을 인식하여 (자바스크립트포함) 
    사용자에게 보여주게됩니다. 

    하지만 두번째 줄에 있는<% response.sendRedirect("..\\main.jsp"); %> 
    코드를 보면 

    서블릿에 있는 response객체에 직접 접근해서 명령을 내리고 있죠. 
    미리 string 형식으로 응답했던 html 코드들은 먼저 보냈지만 
    sendRedirect 명령을 만나면 무시 되어진다고 보면 됩니다. 

    여기서 sendRedirect 메소드에 대해서 잘 아셔야 됩니다. 
    저도 배운지 좀 되서 기억이 가물가물 해서 잘 모르지만, 

    결론은 reseponse 객체에 실려가는 정보들(html 코드들)은 
    처음 사용자가 요청(request)했던 정보를 처리한후 보여주는 페이지 이지만 
    sendRedirect 메소드를 요청하며 보여줘야 했던 페이지가 아니라 
    메소드 안에있는 string 형식이 알려주는 페이지를 다시 요청하는것이라고 알고있습니다. 

    그래서, 첫줄에 쓰셨던 alert()함수는 무시되어지고 
    전혀 다른 페이지 즉 두번째 sendRedirect()에 입력한 main.jsp로 그냥 가버리는거죠 


    프로그래밍에는 정답이 없습니다만, 
    위에 두분의 말이 맞는 말이 적절 합니다^^

이래서 내부적인 동작 원리도 중요합니다. 스크립트 릿은 서버단에서 파싱되는것이고 스크립트는 로컬단에서 수행되는데,, 당연히 sendredirect 가 먼서 수행되는건 당연한 일입니다. 
내부적인 동작에도 공부를 주기적으로 하시길..

  •  

    • 공부 열심히 하세요. 
      그리고 기본적으로 구현하고자 하는 부분에 대해서는 책이라도 정독 합시다. 

  • 반응형