2012-05-02 2 views
0

세션에서 사용자를 로그 아웃하는 Java 컨트롤러 서블릿을 만들려고합니다. 두 가지 방법, 하나는 sendRedirect를 사용하고 다른 하나는 RequestDispatcher라는 것을 알고 있습니다. 필자는 제한된 Java 지식으로 인해 sendRedirect를 사용해야하는 도메인 외부의 페이지로 보내려고합니다.sendRedirect not redirecting

그러나 오류 302가 발생하고 페이지가 리디렉션되지 않습니다. 자습서 버전을 시도하고 작동하지만, 내 서블릿 내에서 구현할 때, 그것은 나에게 오류를 반환하고 리디렉션하지 않습니다.

누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다.

사용하는 코드는 다음과 같습니다. 내가 넷빈즈 템플릿을 사용하고 있습니다 :


protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     HttpSession session = request.getSession(false); 
     if (session == null) { 
      System.out.println("Invalid"); 
      response.sendRedirect("http://www.google.com"); 
      return; 
     } else { 
      System.out.println("Invalidated"); 

      session.invalidate(); 
      response.sendRedirect("http://www.google.com"); 
      return; 
      /* 
      String url = "/logout.jsp"; 

      ServletContext sc = getServletContext(); 
      RequestDispatcher rd = sc.getRequestDispatcher(url); 
      rd.include(request, response); 

      */ 
     } 
     /* TODO output your page here 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet LogOut</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet LogOut at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
     */ 
    } finally {    
     out.close(); 
    } 
} 

편집 : 나는 <a href> 태그를 통해 서블릿을 호출하고 있습니다. 서블릿 이름은 LogOut.java입니다.

 <div data-role="header" data-position="fixed"> 
      <h1>Menu</h1> 
      <a href="LogOut" data-theme="i">Log Out</a> 
     </div> 

doGet 및 doPost는 processRequest를 호출합니다.

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

/** 
* Handles the HTTP <code>POST</code> method. 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 
+2

'302'은 오류가 아닙니다; 리디렉션하도록 브라우저에 알리는 상태 코드입니다. – skaffman

+0

안녕하세요, 스카프 먼, 빠른 답장을 보내 주셔서 감사합니다. 나는 방화범을 통해 무엇을 찾았는지 인터넷 검색을 기반으로하므로 스스로 확신하지 못합니다. 그러나 브라우저가 방향을 바꾸지 못하게하는 요인은 무엇입니까? jsp 페이지에서 jQueryMobile을 사용했기 때문일 수 있습니까? – Rax

답변

0

응답의 표준 리디렉션은 응용 프로그램 내의 참조입니다. 내가 외부 페이지에 메타 데이터 새로 고침 간단한 HTML 페이지를 만든이 문제를 해결하려면 다음 http://www.w3schools.com/tags/tag_meta.asp
예 :
<meta HTTP-EQUIV="refresh" CONTENT="2; URL=http://www.google.be;">

가 자동 전달이 실패 할 경우 외부 페이지에 액세스하는 간단한 하이퍼 링크 확인 .

, 서블릿의 응답이 내 자신의 포워딩 페이지로 이동 한 후에 테스트

봐라 ...

+0

안녕하세요 잰, 여분의 HTML 페이지를 사용하지 않고 즉시 서블릿에서 리디렉션 할 수있는 방법이 없다는 뜻입니까? 그러나 튜토리얼을 따라 갔을 때 제대로 작동했습니다. 내 서블릿 내에서 구현하려고 한 후에 이것이 왜 발생하는지 확신 할 수 없다. – Rax

+1

'response.sendRedirect'가 올바른 방법이며 작동해야합니다. 문제를 일으키는'doPost()'또는'doGet()'에 다른 코드가있을 수 있습니다. 'processRequest'를 호출하는 코드를 제공하십시오. –

+0

안녕하세요 Hardik, 요청한 정보를 게시물에 추가했습니다. 조만간 연락 받기를 바랍니다. – Rax