Javascript & Java webserver

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Javascript & Java webserver

Messaggio da Chry1991 »

salve ragazzi sto facendo un progetto ma ho un problemino:

ho creato un webserver Java e in javascript tramite una pagina HTML gli mando dei dati che sono strighe, e il server li riceve ad esempio:
inserisco 1234
il server stampa in console Message:1234 e fino a qui mi va bene
solo che nel server ho fatto un metodo che mi deve creare un codice random da 1 a 6 ad esempio 2365 e deve confrontarlo con quello inserito dallo user.
il metodo che ho fatto è cosi:

Codice: Seleziona tutto

public void onCreatecode(){
code1= math.random()*6+1;
code2
code 3 
code4
codeString = faccio il value of dei 4 code
e cosi ho generato il codice.
come faccio però ad inviarlo alla pagina web per provare a vedere se mi crea il codice per davvero???
che metodo e che funzione javascript devo creare per visualizzarlo??
ad esempio se creo un bottone ricevi schiaccio quel bottone e deve stamparmi la risposta del server.
spero di essere stato chiaro se serve il codice beh poi lo posto :)
grazie a chi mi aiutera
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

Non è molto chiaro quello che hai fatto.
Scrivendo "ho creato un webserver Java" intendi dire che hai creato un server che supporta il protocollo HTTP? Altrimenti cosa intendi per webserver?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

scusami pensavo di non essere stato chiaro, ti mostro cosa ho messo:

Codice: Seleziona tutto

import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
 
/** 
 * @ServerEndpoint gives the relative name for the end point
 * This will be accessed via ws://localhost:8080/EchoChamber/echo
 * Where "localhost" is the address of the host,
 * "EchoChamber" is the name of the package
 * and "echo" is the address to access this class from the server
 */
@ServerEndpoint("/echo") 
public class EchoServer {
	String code;
    /**
     * @OnOpen allows us to intercept the creation of a new session.
     * The session class allows us to send data to the user.
     * In the method onOpen, we'll let the user know that the handshake was 
     * successful.
     */
    @OnOpen
    public void onOpen(Session session){
        System.out.println(session.getId() + " has opened a connection"); 
        try {
            session.getBasicRemote().sendText("Connection Established");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
 
    /**
     * When a user sends a message to the server, this method will intercept the message
     * and allow us to react to it. For now the message is read as a String.
     */
    @OnMessage
    public void onMessage(String message, Session session){
        System.out.println("Message from " + session.getId() + ": " + message);
        String codice = onGenerateCode();
        //System.out.println("il codice è" +codice);
        try {
            session.getBasicRemote().sendText(message);
            //session.getBasicRemote().sendText(codice);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    /**
     * The user closes the connection.
     * 
     * Note: you can't send messages to the client from this method
     */
    @OnClose
    public void onClose(Session session){
        System.out.println("Session " +session.getId()+" has ended");
    }
    
    
    public String onGenerateCode(){
    	
    	int code0 = (int)Math.round(Math.random()*5+1);
        int code1 = (int)Math.round(Math.random()*5+1);
        int code2 = (int)Math.round(Math.random()*5+1);
        int code3 = (int)Math.round(Math.random()*5+1);
        code = String.valueOf(code0) + String.valueOf(code1) + String.valueOf(code2) + String.valueOf(code3);
        return code;
    }
}

questo è il server

poi questo è quello che fa la pagina html

Codice: Seleziona tutto

	

    <!DOCTYPE html>
     
    <html>
        <head>
            <title>Echo Chamber</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width">
        </head>
        <body>
           
            <div>
                <input type="text" id="messageinput"/>
            </div>
            <div>
                <button type="button" onclick="openSocket();" >Open</button>
                <button type="button" onclick="send();" >Send</button>
                <button type="button" onclick="closeSocket();" >Close</button>
		<button type="button" onclick="Receive();">Receive</button>
            </div>
            <!-- Server responses get written here -->
            <div id="messages"></div>
           
            <!-- Script to utilise the WebSocket -->
            <script type="text/javascript">
                           
                var webSocket;
                var messages = document.getElementById("messages");
               
               
                function openSocket(){
                    // Ensures only one connection is open at a time
                    if(webSocket !== undefined && webSocket.readyState !== WebSocket.CLOSED){
                       writeResponse("WebSocket is already opened.");
                        return;
                    }
                    // Create a new instance of the websocket
                    webSocket = new WebSocket("ws://localhost:8080/EchoChamber/echo");
                     
                    /**
                     * Binds functions to the listeners for the websocket.
                     */
                    webSocket.onopen = function(event){
                        // For reasons I can't determine, onopen gets called twice
                        // and the first time event.data is undefined.
                        // Leave a comment if you know the answer.
                        if(event.data === undefined)
                            return;
     
                        writeResponse(event.data);
                    };
     
                    webSocket.onmessage = function(event){
                        writeResponse(event.data);
                    };

     
                    webSocket.onclose = function(event){
                        writeResponse("Connection closed");
                    };
                }

		/**function Receive(){
			webSocket.ongeneratecode =function(event){
			writeResponse(event.data);
		};
		}  
		*/             
                /**
                 * Sends the value of the text input to the server
                 */
                function send(){
                    var text = document.getElementById("messageinput").value;
                    webSocket.send(text);
                }
               
                function closeSocket(){
                    webSocket.close();
                }
     
                function writeResponse(text){
                    messages.innerHTML += "<br/>" + text;
                }
               
            </script>
           
        </body>
    </html>


allora vorrei implementare la funzione onReceive per ricevere il codice che viene generato dal metodo OnGenerateCode del server
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

Immagino ti basti invertire i commenti di queste due righe:

Codice: Seleziona tutto

            session.getBasicRemote().sendText(message);
            //session.getBasicRemote().sendText(codice);
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

già provato mi pare non funzionasse, se eventualmente volessi mandare sia il messaggio che il codice?? perchè mi pare che message scrivesse ciao christian quando mi collego al server....
solo che io non voglio che me lo mandi quando mi collego al server, io nel file html ho fatto un tasto ricevi, ed è li che vorrei che l'utente collegato alla pagina html ricevesse il codice solo dopo averne fatto la richiesta ed è li che non riesco a capire il meccanismo.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

Non puoi implementare un tasto ricevi. Decide il server quando inviarti la risposta, non tu.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

ah non c'è nessun modo per richiedere qualcosa al server???

perche lo scopo sarebbe di inserire un codice, confrontarlo con quello che ti genera il server e ricevere la risposta...
io pero volevo vedere se il server il codice random me lo generava correttamente....
ti confermo che se sostiuisco a message codice non mi manda nessun codice
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

Scusa ma tu quando invii un codice ricevi una risposta no? Ad esempio il "ciao christian" che dicevi prima.
Devi solo mettere il codice in quella risposta.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

il problema è che siccome mi sto cimentando nel javascript non riesco a capire da dove manda ciao christian per quello ti ho postato i codici sia del server che html....

perchè se risolvo questa cosa qui dopo dovrei implementare un database postgresql e da pagina html far registrare gli utenti....anche qui cosa devo fare per mandare i dati al server??? non riesco a capire bene i passaggi...
cioè io dovrei mandare nickname email e password al server per potermi registrare al servizio
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

posso usare quel server per fargli creare anche un db postgres?? se si come devo fare?? nella classe del server dovro' instanziare qualcosa del database??
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Javascript & Java webserver

Messaggio da SuperStep »

innanzitutto, tutto e' possibile.

tenendo conto che le socket TCP ci sono quasi per ogni linguaggio, (anche per javascript adesso), quello che devi fare e' inventarti un protocollo.

scrivere su un documento tutte le regole che vuoi che sia possibile compiere (eseguire metodi remoti, passare variabili in un verso o nell'altro, ecc ecc) e decidere come questo deve avvenire.

piccolo esempio: (Protocollo Sociale)

E' (quasi) una regola del protocollo sociale che quando si riceve un saluto, si spedisce un altro saluto a condizione che io non abbia salutato immediatamente prima quella persona.
E (quasi) una regola che, quando si riceve un complimento, si risponde con un messaggio di apprezzato complimento (Grazie) o non apprezzato complimento (Ma Come Ti Permetti!!!).
... ecc ecce per ogni situazione ...

quello che devi fare, e' creare questo meccanismo da ambedue le parti, mettendo la logica di client nel client e quella del server nel server.

cosi quando il client apre una connessione, e spedisce sulla Socket Il messaggio:
(Ipotetico protocollo)

Codice: Seleziona tutto

IPOTETYC_PROTOCOL/1.0
save data data1
END_OF_HEADER
CONTENT
data1 = 0x34541a2sd15a412d4a2d4a75ad45as (un file a caso)
END
il server catturera' il messaggio. leggera' l'header (save data data1) cerchera' data1 nel content, e se e' d'accordo, allora lo salvera'

questi sono esempi banali, ma con le socket puoi fare di tutto, l'unico limite e' la fantasia.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

Le websocket javascript NON sono socket TCP, funzionano a scambio di messaggi: http://www.w3.org/TR/2009/WD-websockets ... -onmessage
Quell'esempio credo crei solo confusione.
Chry1991 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4669357#p4669357][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:posso usare quel server per fargli creare anche un db postgres?? se si come devo fare?? nella classe del server dovro' instanziare qualcosa del database??
Certo, ma eviterei di mettere dentro postgres fintanto che non hai capito come scambiare messaggi via websocket.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Javascript & Java webserver

Messaggio da SuperStep »

in realta' lo sono
http://tools.ietf.org/html/rfc6455#section-1.7

[EDIT]
ed e' possibile definire un proprio protocollo
http://tools.ietf.org/html/rfc6455#section-1.9

qui una guida completa di come implementarli
http://chimera.labs.oreilly.com/books/1 ... _protocols
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Javascript & Java webserver

Messaggio da Zoff »

No non lo sono, ed è scritto anche nel link che hai postato, utilizzano un protocollo TCP-based indipendente non sono socket TCP, che è diverso.
Prova ad implementare FTP su Websocket come definito da RFC.
Online vedrai che qualcuno ci ha provato, ma definendo protocoli laternativi (es WSFTP)
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

no beh ho capito come funzionano gli scambi di messaggi tra client(Javascript) e Server(websocket Java).
So anche che per passare i dati dal client per metterli nel db devo usare Ajax....il mio problema ora è usando la mia classe EchoServer quella che ho postato posso implementare un db postgres?? se si cosa devo fare? una classe Che usa un jdbc come per mysql?? perche' sono abitutato ad usare mysql
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Javascript & Java webserver

Messaggio da SuperStep »

Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4669422#p4669422][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:No non lo sono, ed è scritto anche nel link che hai postato, utilizzano un protocollo TCP-based indipendente non sono socket TCP, che è diverso.
Prova ad implementare FTP su Websocket come definito da RFC.
Online vedrai che qualcuno ci ha provato, ma definendo protocoli laternativi (es WSFTP)
mi sono documentato meglio a riguardo ed ho capito che hai ragione tu.

ad esempio provando ad aprire una connessione websocket di default manda questo:

Codice: Seleziona tutto

GET / HTTP/1.1
Host: localhost:5080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: rtgHEwNjccPlZ2MinLKwbA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
quindi, si deve scrivere un server in grado di poter interpretare il protocollo ws.

sto leggendo la documentazione oracle ed ho visto che ci sono delle API per interfacciarsi "bene" con le websocket
http://docs.oracle.com/javaee/7/tutoria ... socket.htm

@Chry1991
sia Ajax che WebSocket, sono tecnologie per lo scambio dei dati fra client e server.

in Particolare Ajax e' una richiesta asincrona verso una determinata "pagina del sito".
WebSocket sono una tecnologia per le Socket con Javascript.
Quest'ultime, a differenza delle normali Socket utilizzano un loro protocollo (Ovvero spediscono insieme al messaggio, quello che ho allegato sopra).

Quando un messaggio viene spedito verso il server, il server deve leggerlo e farne qualcosa.

adesso, dal momento che hai scelto di implementare il server con Java, ti toccherebbe implementare il protocollo ws sul server, oppure, utilizzare alcune classi gia' fatte.

su gitHub ho trovato questa libreria che sembra molto buona. (https://github.com/TooTallNate/Java-Web ... _websocket)
e qui c'e' una guida di quella libreria (http://hsilomedus.me/index.php/websockets-in-java/).
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

grazie in questi giorni proverò....purtroppo questa cosa mi serve per un progetto ed è un pò incasinato... e lavoraci da solo e smazzarsi mille cose complica la vita sempre
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

@Zoff scusa il disturbo ma mi è venuto un dubbio e credo che tu possa chiarirmelo.....io per salvare un utente nel db creo un oggetto di tipo User in java....ma in javascript come faccio?? cioè posso creare un utente di tipo User e poi tramite la web socket mandare questo oggetto e una volta che ho l'oggetto il server me ne tira giu le info e le salva nel db(nel mio caso sono nickname, email e password)....perchè ho capito che è nel metodo OnMessage che la websocket riceve cio' che digito da HTML
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Javascript & Java webserver

Messaggio da SuperStep »

potresti restituirlo nel formato JSON, specificando attributi e password.

JSON e' piu' leggero rispetto a XML, pero' entrambi hanno i loro privilegi.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Chry1991
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 461
Iscrizione: giovedì 23 maggio 2013, 20:20
Desktop: Linux Mint 16.04
Distribuzione: Linux Mint 16.04 Xubuntu 16.04
Sesso: Maschile

Re: Javascript & Java webserver

Messaggio da Chry1991 »

come si fa a restituirlo in JSON??? cioè non riesco a capire

guarda io cio che mando è questo, il server invece riceve cio' che c'è nella seconda immagine
Allegati
server.png
server.png (3.5 KiB) Visualizzato 174 volte
web.png
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti