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);
}
}
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! –
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. –
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! –