2015-07-19 199 views
2

所以我試圖使用TCP套接字在JSP頁面上創建一個客戶端進行通信,我遇到的問題是每當我在頁面中提交表單時,它都會刷新頁面並創建一個新的客戶端套接字,刪除我以前的信息(nomeUtilizador)。我搜索的方式提交表單沒有刷新,並嘗試它(AJAX),但它從來沒有真正解決......JSP套接字沒有刷新頁面

也許還有其他方法來解決這個問題,就像使它成爲套接字只創建一次.. ,或者變量nomeUtilizador由適用於所有刷新...

<%    private void ClienteTCP(String host, int port) { 

       try { 
         s = new Socket(host, port); 
         System.err.println("Ligacao estabelecida"); 
         in = new ObjectInputStream(s.getInputStream()); 
         out = new ObjectOutputStream(s.getOutputStream()); 
         System.err.println("Streams criadas"); 
       } catch (UnknownHostException uhEx) { 
         System.err.println("UnknownHostException"); 
       } catch (IOException ioEx) { 

       } catch (Exception e) { 

       } 
     } 
       ClienteTCP("localhost", 6000); 
       String nomeUtilizador = (String) session.getAttribute("nomeUtilizador"); 
       String xmlUtilizador = "C:/Users/leonel/workspace/ParqueEstacionamento/WebContent/xml_clientes/" 
           + nomeUtilizador.replaceAll("\\s+", "") + ".xml"; 
       criarDocument(xmlUtilizador); 
       ArrayList<String> listaParques = getParques(); 
     %><form name="botoes" id="botoes" method="post" 
       action="parqueOnline.jsp" onsubmit="submitForm()"> 
       <input TYPE="HIDDEN" NAME="buttonName"> <input type="button" 
         name="botao" value="Estacionar" onclick="showDiv();"> <input 
         type="submit" name="botao" value="Pagar" onclick="pagar();"> 
       <input type="submit" name="botao" value="Sair" onclick="sair();"> 
       <br /> 
       <div id="escolherParque" style="display: none;" class="escolherParque"> 
         <label>Parques</label> <select name="parque"> 
           <option value=""></option> 
           <% 
             for (int i = 0; i < listaParques.size(); i++) { 
           %> 
           <option value=<%=listaParques.get(i)%>><%=listaParques.get(i)%></option> 
           <% 
             } 
           %> 
         </select> <input type="submit" name="estacionar" 
           value="Escolha o Parque onde quer estacionar.." 
           onclick="escolherParque();"> 
       </div> 
     </form> 

     <% 
       String botao = request.getParameter("buttonName"); 
       if (botao != null) { 
         //do more stuff %> 
+0

你試圖存檔什麼?據我所知,JSP中的代碼在服務器端運行。因此,當您使用您發佈的代碼創建套接字時,套接字實際上是在應用程序服務器上創建的,而不是在客戶端創建的。要使用java在客戶端創建套接字,您應該使用applet。如果你需要瀏覽器和服務器之間的實時通信,你可以考慮使用[web socket](http://www.html5rocks.com/en/tutorials/websockets/basics/)或[web worker](http:// www.w3schools.com/html/html5_webworkers.asp) –

+0

謝謝你的建議人 – user3185775

回答

0

使用您提交如果變量是一個會話變量它會仍然可用於下一次刷新的代碼。唯一的問題是,如果你發送TCP消息的服務器通過通信知道這個變量,它將不再知道它,因爲你創建了一個新的客戶端。 (考慮到您使用的是併發服務器)

解決方法是再次發送該變量,然後對服務器進行編程以接收它。