Passaggio dati Json da servlet a pagina html con angularJS

di il
5 risposte

Passaggio dati Json da servlet a pagina html con angularJS

Salve, sto cercando di capire come passare dei dati JSON dalla seguente servlet :

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
		
		
		
		
		  response.setContentType("text/html;charset=UTF-8");
		  
	       try (PrintWriter out = response.getWriter()) 
	{
	          
	    	   eliminacode.Connessione conn = new eliminacode.Connessione();  
	    	   ArrayList<ClienteBean>listaClienti = conn.elencatutti(); 
	          
	          response.setContentType("application/json"); 
	           
	           JSONObject obj = new JSONObject();
	           obj.put("data", listaClienti);
	          
	          String json = new Gson().toJson(obj);
	          
	          response.getWriter().write(json);
	   
	   
	       } catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		    
	       }	
		
a questa pagina html

<!DOCTYPE html>
<html>
    <head>     
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">       
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>       
    </head>
    <body ng-app="ATP_PLAYERS">   
        <div ng-controller="atpController">
            <h5>riceerca</h5>
            <table>
                <thead>
                    <tr>
                        <th>cf</th> 
                        <th>nomeme</th> 
                        <th>E-mail</th> 
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="item in atp">
                        <td>{{item.cf}}</td>             
                        <td>{{item.name}}</td>
                        <td>{{item.email}}</td>
                    </tr>
                </tbody>
            </table>
        </div>     
      
        <script language="javascript" type="text/javascript">
          angular.module('ATP_PLAYERS', [])
           .controller('atpController', function ($scope, $http) {
              $http.get('http://localhost:8080/com.pic1/Angular').success(function (data, status, headers, config) {
                $scope.atp = data;
             });
         });
        </script>
    </body>
</html>
Ho verificato il file Json ed è corretto ma quando passo i dati mi da quest' errore :

SyntaxError: Unexpected token S in JSON at position 0
    at JSON.parse (<anonymous>)
non capisco cosa succede non penso che sia un problema della servlet penso si un problema di angularjs qualcuno mi sa spiegare l'errore grazie

5 Risposte

  • Re: Passaggio dati Json da servlet a pagina html con angularJS

    robyn78 ha scritto:


    	    	   ArrayList<ClienteBean>listaClienti = conn.elencatutti(); 
    	          
    	          response.setContentType("application/json"); 
    	           
    	           JSONObject obj = new JSONObject();
    	           obj.put("data", listaClienti);
    	          
    	          String json = new Gson().toJson(obj);
    
    Ho verificato il file Json ed è corretto ma quando passo i dati mi da quest' errore :
    Sicuro che è corretto? Puoi postarlo? (almeno un pezzetto)

    E poi comunque: si vede un JSONObject, di quale API è? Perché la Gson ha un com.google.gson.JsonObject (nota il nome!!)
    Perché presumo non sia appropriato/sensato usare quel JSONObject.
  • Re: Passaggio dati Json da servlet a pagina html con angularJS

    Se devi servire un JSON, queste cose non le devi fare:
    
    response.getWriter().append("Served at: ").append(request.getContextPath());
    response.setContentType("text/html;charset=UTF-8");
    
    1) Il Content-Type dovrebbe essere "application/json" e non "text/html".
    2) Cosa più importante: non devi sporcare la response con qualcosa che non sia il JSON. Tu come prima cosa stai buttando fuori una stringa "Served at: blablabla" e, di conseguenza, il client si sta giustamente lamentando che vorrebbe ricevere un JSON ma trova una "S" maiuscola come prima cosa (un oggetto JSON inizia con una graffa aperta [JSON-Object] o con una quadra aperta [JSON-Array]).


    Ciao.
  • Re: Passaggio dati Json da servlet a pagina html con angularJS

    LeleFT ha scritto:


    2) Cosa più importante: non devi sporcare la response con qualcosa che non sia il JSON. Tu come prima cosa stai buttando fuori una stringa "Served at: blablabla"
    Già ... non l'avevo notato! (grazie LeleFT)
    Ecco il motivo per cui sicuramente la response NON è "JSON".
  • Re: Passaggio dati Json da servlet a pagina html con angularJS

    Grazie LeleFT avevi ragione ho controllato il file json e iniziava con Served to: ho sistemato il codice e ora funziona tutto perfettamente se può interessare posto il codice. Grazie di nuovo sei stato formidabile
  • Re: Passaggio dati Json da servlet a pagina html con angularJS

    NON E" BENE, l'approccio che stai utilizzando: e' fote INESAURIBILE di rogne.

    C'e' una libreria Java SPECIFICATAMENTE pensata per questo tipo di cose, che VA STUDIATA/USATA:

    https://jersey.github.io
Devi accedere o registrarti per scrivere nel forum
5 risposte