2016-04-29 17 views
1

Ich entwickle eine Webanwendung in Java, die eine Zeichenfolge mit einer Website-URL verwendet, den HTML-Code der Website analysiert, um Informationen zu sammeln, und diese Informationen dann zur Abfrage einer PostgreSQL-Datenbank verwendet. Dies ist bereits mit Java, HTML, JS und CSS geschrieben.Übergabe der Webbrowser-Client-Eingabe an den Server Java-Quellcode

In meinem HTML habe ich ein Texteingabefeld, wo der Benutzer eine URL einfügen und über eine Schaltfläche abschicken kann. Was ich tun möchte, ist, diese URL als String, den ich oben erwähnt habe, in meinem Java-Code zu erhalten, anstatt ihn selbst zu programmieren. Nach dem Parsen dieser URL-HTML-Datei und dem Ausführen von beliebigen Abfragen, die ich für meine Datenbank benötige, werde ich die Abfrageergebnisse schließlich an den Browser zurückgeben, damit der Benutzer sie sehen kann.

Ich verstehe, dass JavaScript im Browser ausgeführt wird, während mein Java-Quellcode zu verschiedenen Zeiten serverseitig ist. Ich habe festgestellt, dass eine mögliche Lösung darin besteht, eine HTTPServletRequest in meinem Java-Quellcode einzureichen, der mit meinem JavaScript kommuniziert. Ich bin mir jedoch nicht sicher über die richtigen Schritte, um dies zu erreichen. XmlHTTPRequest ist etwas anderes, das ich bisher benutzt habe.

Bearbeiten - Nach weiterem Lesen bin ich zwischen der Programmierung eines Java-Servlets oder einer JSP, um dies zu behandeln. Ich neige zu einem Servlet, da ich mit Java besser vertraut bin als mit HTML und mehr Logik verwenden werde (HTML-Analyse, RDBMS-Abfrage mit jdbc, Rückgabe von Daten).

Scheint dies die richtige Entscheidung zu sein?

Ich hoffe ich habe dies klar formuliert und das ist eine gültige Frage! Vielen Dank!

UPDATE/EDIT

Hier ist mein Code, den ich bisher getan habe nach etwa Mois44 Antwort zu denken. Ich bin mir nicht sicher, was ich für die URL in meine Anfrage xmlHttp.send() einfügen soll. Im Browser gibt es ein Textfeld, und senden Sie den Button für den Benutzer wie gesagt.

Fehler: url.html: 91 POST http://localhost:8080/myapplication/GetURL?url=http://mywebsite.com/category/123986/webpage/ 404 (nicht gefunden)

Dies ist die Projektstruktur für diese Dateien:

src/main/ 
| 
|----java/ 
| | 
| |----path/to/java/servlet/myServlet.java 
| 
|----webapp/ 
    | 
    |----META-INF/ 
    | |----web.xml 
    | 
    |----pages/ 
     |----url.html 
    | 
    index.html 

web.xml:

<servlet> 
    <servlet-name>GetURL</servlet-name> 
    <servlet-class>path.to.java.servlet.myServlet</servlet-class> 

    <init-param> 
    <param-name>url</param-name> 
    <param-value>www.testurl.com</param-value> // don't I set this in my url.html from user? 
    </init-param> 

</servlet> 

<servlet-mapping> 
    <servlet-name>myServlet</servlet-name> 
    <url-pattern>/myServlet/*</url-pattern> // not sure about this... 
</servlet-mapping> 

url.html:

<div class="url-input"> 
    <input type="text" id="txtUrl" class="text-box" value="Paste recipe website URL here" align="middle"> 
    <button onclick="urlRequest()" id="myid" value="myvalue">Go!</button> 
     <script> 
      function getURL(xmlHttp) { 
       document.getElementById("myid").value = xmlHttp.responseText; 
       return document.getElementById("txtUrl").value 
      } 
     </script> 
     <script> 
      function urlRequest() { 
       var xmlHttp = new XMLHttpRequest(); 
       var url = getURL(xmlHttp); 
       xmlHttp.open('POST', 'http://localhost:8080/myapplication/GetURL?url='+url, true); 

       xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState = 4 && xmlHttp.status == 200) { 
         alert(xmlHttp.responseText); 
        } 
       }; 
       xmlHttp.send(url); 
      } 
     </script> 
</div> 

myServlet.java:

public class Servlet extends HttpServlet { 

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

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

    protected void handleRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

     String p = request.getParameter("url"); 
     System.out.println("test"); 
     System.out.println(p); 
    } 
} 

Antwort

1

Wenn Sie die Werkzeuge, die Sie bereits kennen, verwenden möchten JSF verwenden.

Sie könnten auch einen einfachen HTTP-Endpunkt in Ihrem Java-Server erstellen und mit JavaScript kommunizieren. (Sie senden den String als HTTP-Payload an den Server mit einem XmlHTTPRequest und erhalten dann die Antwort in XML, JSON oder einem anderen Format (Raw String?). JSON wäre eine gute Wahl, weil JavaScript es sehr gut unterstützt. Für JSON in Java empfehle ich das Jackson Project)

Edit: JavaScript Teil Beispiel:

// get user input from input field.. 
var userInput = document.getElementById("#my-input").value; 

xmlHttp = new XMLHttpRequest(); 
//   HTTP Method, URL, async 
xmlHttp.open('POST', '/myJavaEndPoint', true); 
// create onreadystatechange callback function, 
// it gets called everytime the readyState changes.. 
xmlHttp.onreadystatechange = function() { 
    // readyState 4 means "DONE" - request is complete, responseText now contains the full response.. 
    if (xmlHttp.readyState == 4) { 
     alert(xmlHttp.responseText); // Show the result to the user. 
    } 
}; 
xmlHttp.send(userInput); // Start Request, send the user input as post-payload 
+0

Danke Mois!Ich muss tatsächlich mehr JavaScript lernen, daher denke ich, dass ich die letztere Option wählen und einen REST-fähigen HTTP-Endpunkt in meinem Java-Servlet wie erwähnt erstellen werde. Ich werde XmlHTTPRequest verwenden und kann es hoffentlich als eine rohe Zeichenfolge in Java zurückgeben, da es nur ein Attribut ist. Ich nehme an, ich könnte meine Abfragen erstellen, die Ergebnisse im JSON-Format mit dem Jackson-Projekt erstellen und dann als Antwort zurück zu meinem JavaScript für die Benutzer sichtbare Ausgabe auf der Seite des Browsers senden? Scheint das richtig? Danke noch einmal! –

+1

Ja, das stimmt! Sie müssen nicht einmal das JSON-Format und Jackson für die Antwort verwenden. Senden Sie das Attribut einfach als String zurück! Ich habe ein Beispiel für den clientseitigen JavaScript-Code hinzugefügt. –

+0

Könnten Sie möglicherweise mit dem helfen, was meine URL für den .open() Anruf sein sollte? Ich habe meinen ursprünglichen Beitrag mit meinem aktuellen Code bearbeitet. Ich erhalte einen 404-Fehler im Inspektor, wenn ich meine Absenden-Schaltfläche verwende. Ich danke dir sehr! –

Verwandte Themen