2012-08-25 5 views
1

Eclipse JUNO IDE와 tomcat 7.0을 사용하고 있습니다.디스패처가 서블릿에서 사용될 때 JSP 페이지를 새로 고치는 방법은 무엇입니까?

웹 응용 프로그램이 있습니다. 응용 프로그램에서 내가 가진 :

  1. 서블릿

  2. JSP 페이지

  3. HTML - 메인 페이지. 메인 페이지에서

나는 (I는 서버에서 데이터를 얻을 필요가 있기 때문에)를 제출 버튼을 클릭하고 서블릿이 일치하는 JSP 페이지로 리디렉션 될 때 서블릿로 리디렉션 양식을 가지고있다. 이제 jsp 페이지를 새로 고칠 때 서블릿이 요청에 NULL을 가져옵니다. 그래서 내 질문 어떻게 다시 제출하는 것입니다? 서버에서 새 데이터를 표시하려고하기 때문입니다.

참고 : 서블릿은 소켓으로 서버와 통신하므로 사용자가 일부 제출 버튼을 누르면 요청이 서블릿으로 리디렉션되고 서블릿은 서버에 요청 을 리디렉션하여 필요한 데이터를 가져옵니다. 서블릿이 데이터를 받았습니다 자 할 때, 그것은 JSP 페이지에 데이터를 전송, 그리고 JSP 페이지는 여기에 HTML

if (request.getParameter("submit").equals("Show Taxis at Driving")) 
    { 
      requests.add("driving"); 
      to_server.writeObject(requests); 
      to_server.flush(); 
      requests.removeAllElements(); 

      try{ 
       driving = (Vector)from_server.readObject(); 
       request.setAttribute("driving", driving); 
       //request.getRequestDispatcher("/WEB-INF/driving_page.jsp").forward(request, response); 
       RequestDispatcher disp = getServletContext().getRequestDispatcher("/WEB-INF/driving_page.jsp"); 
       disp.forward(request, response); 
      }catch(ClassNotFoundException e) 
      { 
       e.printStackTrace(); 
      } 
    } 
    else if (request.getParameter("submit").equals("Add Passenger to Taxi")) 
    { 
     requests.add("taxis"); 
     requests.add("passengers"); 
     to_server.writeObject(requests); 
     to_server.flush(); 
     requests.removeAllElements(); 

     try { 
      taxis_waiting = (Vector)from_server.readObject(); 
      passengers = (Vector)from_server.readObject(); 
      request.setAttribute("taxis", taxis_waiting); 
      request.setAttribute("passengers", passengers); 
      request.getRequestDispatcher("/WEB-INF/add_passenger_to_taxi.jsp").forward(request, response); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      request.getRequestDispatcher("error_page.jsp").forward(request, response);  
     } 
    } 

답변

1

가장 간단한 가장 일반적인 방법으로 표시 :

  1. 귀하의 index.html 페이지 GET 동작을 사용하는 형식이어야합니다. 서블릿에 쿼리 매개 변수를 통해 전달되는 형식 매개 변수이 방법 :

    /servlet?search=foo 
    
  2. 서블릿 프로세스는 results.jsp에 대한 검색 및 전달 때문에 브라우저는 여전히 가리키는 지 /servlet?search=foo에 :

    RequestDispatcher dispatcher = getServletContext(). 
                 getRequestDispatcher("results.jsp); 
    dispatcher.forward(request,response); 
    
  3. 사용자가 페이지를 새로 고치면 서버 측 로직을 호출하고 검색 결과를 새로 고치면서 /servlet?search=foo을 다시 누르게됩니다.

+0

귀하의 회신에 감사드립니다. 그러나 이것은 제가 한 것과 매우 같습니다. 'MainPage.html'에서 GET 메소드를 사용하는 양식과 동작이 서블릿으로 리디렉션됩니다.이제 서블릿은 요청을 처리하여 필요한 JSP 페이지로 전달합니다. 사용자가 jsp 페이지를 새로 고칠 때 서블릿은 null을 갖습니다. – eliorsh

+0

@eliorsh : 서블릿 코드를 보여줍니다. 요청 매개 변수와 간단한'request.getParameter (...)'를 사용하는 경우, 폼에서 왔는지 또는 URL에 수동으로 붙여 넣든 관계없이 매개 변수를 검색해야합니다. –

+0

내 질문을 편집하고 서블릿 코드를 추가 한이 코드는 'doPost'메소드 입니다. – eliorsh

1

세션을 사용하여이 문제를 간단하게 해결할 수 있습니다. 이것은 대안 솔루션이 될 것입니다.

if(session.getAttribute("REFRESH")!=null){ 
    response.sendRedirect("../your_servlet"); 
} 
else{  
session.setAttribute("REFRESH","TRUE"); 
} 

위의 코드는 jsp 페이지에 삽입 할 수 있습니다. 페이지가 처음로드 될 때 세션 값을 확인하지만 해당 세션이 저장되지 않으므로 코드의 else 부분과 마찬가지로 세션이 만들어집니다. 그 후에 사용자가 새로 고침 버튼을 클릭하면 세션에 값이 있고 리디렉션이 발생합니다.

그러나 순환 리디렉션을 방지하려면 servelt에서 세션을 제거해야합니다. 그래서 벨로우즈 코드는 서블릿에 위치해야합니다.

session.removeAttribute("REFRESH"); 
관련 문제