[JAVA] Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse

2018.12.16 Ergänzung: In diesem Artikel wird es mit "Tomcat-Projekt" erstellt. Im Übrigen ist es jedoch besser, es durch "Angabe von" Maven-Archetyp-Webapp "in Maven-Projekt" zu erstellen. (Oder in einem "dynamischen Webprojekt")

Referenz


Ich weiß nicht, welche Nummer ich brauen soll, aber ich habe ein wenig an der internen Java-Einführungssitzung genagt, um sie zu überprüfen und vorzubereiten. (Außerdem frage ich mich, ob beim Ausführen einer Webanwendung + DB-Anwendung nach dem Erstellen einer kleinen Umgebung etwas zu tun ist.)

Jede Version

Heutzutage wird es unter Verwendung verschiedener Frameworks entwickelt, aber ich würde gerne sehen, welche Art von Implementierung und Verarbeitung an der primitiven Stelle erfolgt, also mache ich es hier mit einfachem JSP + Servlet.

Erstellen Sie ein Tomcat-Projekt

Erstellen Sie ein Java | Tomcat-Projekt

image.png

Der Projektname lautet "memoapp"

image.png

Der Kontextname lautet (Standard) / memoapp

image.png

Dadurch wird das Projekt erstellt

image.png

Erstellen Sie die Benutzeroberfläche und den Verarbeitungsteil des Hauptbildschirms

Erstellen einer JSP-Datei

Erstellen Sie eine JSP-Datei für den UI-Teil. Wählen Sie eine JSP-Datei aus dem neuen Eclipse-Menü.

image.png

Wählen Sie "WEB-INF / jsp" als Erstellungsordner (andernfalls wird es durch manuelle Eingabe erstellt). Der Dateiname ist leicht zu verstehen.

image.png

Wählen Sie "Neue JSP-Datei (HTML)" als Vorlage

image.png

Dadurch wird eine JSP-Datei erstellt

image.png

Bearbeiten Sie "" und fügen Sie den Seitentitel mit "<h1>" hinzu</p> <h4><strong><code>index.jsp</code></strong></h4> <pre><code class="language-html"> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Memo App</title> </head> <body> <h1>memo app</h1> </body> </html> </code></pre> <h2>Servlet erstellen</h2> <p>Erstellen Sie eine Servlet-Klasse, die den Datenaustausch mit der erstellten JSP verarbeitet.</p> <ul> <li>Das neue Erstellungsmenü enthält "Servlet", aber nur das von "Dynamic Web Project" erstellte Projekt scheint das Ziel zu sein und kann nicht verwendet werden. Daher wird es normalerweise durch Erstellen einer Java-Klasse erstellt.</li> </ul> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/65d3a365-80d8-a5d6-4cbf-980d36f565ae.png" alt="image.png" /></p> <p>Die Quelle zum Zeitpunkt der automatischen Generierung ist nur die Klassendefinition und es gibt keinen Konstruktor, aber <code>doGet ()</code> ist wie folgt definiert. (Erstellen Sie eine Methode, die aufgerufen wird, wenn eine GET-Anforderung vorliegt.)</p> <h4><strong><code>MemoAppMain.java</code></strong></h4> <pre><code class="language-java"> package jp.example.org; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/") public class MemoAppMain extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String view = "/WEB-INF/jsp/index.jsp"; RequestDispatcher dispatcher = req.getRequestDispatcher(view); dispatcher.forward(req, resp); } } </code></pre> <p><code>doGet ()</code> liest die JSP-Datei in<code> / WEB-INF / jsp / index.jsp</code> und verwendet die Vorwärtsverarbeitung, um den Inhalt der JSP im Browser anzuzeigen.</p> <p>Darüber hinaus scheint es beim Bildschirmübergang von Servlet Vorwärts- und Umleitungsfunktionen zu geben: [Kennen Sie den Unterschied zwischen Umleitung und Weiterleitung: JavaTips ~ JSP / Servlet-Version- @ IT](http://www.atmarkit.co.jp/ait/ Artikel / 0407/06 / news077.html)</p> <p>Wenn Sie nun Tomcat starten und "Kontextdefinition aktualisieren", sollten Sie den Inhalt der JSP sehen, wenn Sie über Ihren Browser darauf zugreifen.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/1e86f2c8-b5d9-f36a-1581-6ad09d6af84a.png" alt="image.png" /></p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/d32ec827-249d-6fa8-da73-930813a2dbae.png" alt="image.png" /></p> <h1>Erstellen eines Memo-Eingabevorgangs</h1> <h2>Erstellen Sie ein Eingabeformular mit JSP</h2> <p>Dies ist normalerweise ein HTML-Formular-Tag. Ungefähr so.</p> <h4><strong><code>index.jsp</code></strong></h4> <pre><code class="language-html"> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Memo App</title> </head> <body> <h1>memo app</h1> <form method="post"> <input type="text" name="title" size="50"/> <br/> <textarea rows="5" cols="80" name="memo"></textarea> <br/> <input type="submit"/> </form> </body> </html> </code></pre> <p>Normalerweise verwendet das Formular-Tag das Attribut "action", um das Ziel der Eingabedaten zu beschreiben. Diesmal wird es jedoch weggelassen, da es für sich selbst bereitgestellt wird.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/3676509a-2a1d-c22a-f753-eba6a961a900.png" alt="image.png" /></p> <p>Wenn es angezeigt wird (weil es keine Dekoration gibt), sieht es so aus. (Ich möchte etwas mit Bootstrap machen ...)</p> <h2>Erhalten Sie die von Servlet geposteten Daten</h2> <p>Da ich die Aktion nicht in der in JSP beschriebenen Form geschrieben habe, bin ich das Post-Ziel. Mit anderen Worten, Sie können einen POST-Empfangsprozess in der bereits erstellten "MemoAppMain" -Klasse erstellen.</p> <p><code>MemoAppMain</code> hat<code> doGet ()</code>, um die erstellte GET-Anfrage zu verarbeiten, aber create<code>doPost ()</code>, um die POST-Anfrage auf die gleiche Weise zu verarbeiten.</p> <p>Vorerst sieht es so aus</p> <h4><strong><code>MemoAppMain.java</code></strong></h4> <pre><code class="language-java"> @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); System.out.println("title: " + req.getParameter("title")); System.out.println("memo: " + req.getParameter("memo")); // --Hier in DB speichern-- resp.sendRedirect("."); } </code></pre> <p>Diese Methode wird aufgerufen, wenn eine POST-Anforderung vorliegt. Wie der Name schon sagt, werden POST-Parameter (HTTP-Anforderungen) im Objekt "req" festgelegt und können mit "getParameter (String)" aufgerufen werden. Der "Titel" und das "Memo" der durch diesen "getParameter (String)" angegebenen Zeichenfolge sind die Zeichenfolgen des Formularnamens des HTML-Formulars.</p> <p>Im Moment greife ich nur auf die POST-Textdaten zu, daher erstelle ich einen Prozess, um diese in der Datenbank zu speichern. <code>setCharacterEncoding (" UTF-8 ");</code> ist ein Maß gegen verstümmelte Zeichen. Referenz: <a href="https://www.javadrive.jp/servlet/request/index4.html">Entsprechung japanischer Parameter (setCharacterEncoding) - Anforderungsinformationen abrufen - Einführung in Servlets</a></p> <p>Wenn der Speichervorgang abgeschlossen ist, rufe ich "sendRedirect (". ")" Auf, um den Bildschirm zu mir selbst umzuleiten und neu zu laden.</p> <p>Todo: Erklärt nicht, wie Tomcat startet und endet und wie die App zu diesem Zeitpunkt funktioniert.</p> <h1>DB-Verbindungsverarbeitung</h1> <p>Verwenden Sie MySQL.</p> <p>Erstellen Sie einen Prozess zum Speichern der im Formular eingegebenen Daten als DB. Richten Sie zuvor JDBC ein, um DB-Vorgänge in Java-Anwendungen auszuführen.</p> <p>Sie können die JDBC-Einstellungen manuell konfigurieren (den JDBC-Treiber in Ihre Anwendung einbetten), aber hier verwenden wir Maven, um ihn zu installieren.</p> <p>Maven ist ... Gugu ♡</p> <h2>Konvertieren Sie ein Tomcat-Projekt in Maven</h2> <p>Wählen Sie im Kontextmenü des Projekts [Konfiguration] -> [In Maven-Projekt konvertieren].</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/5da2e789-454f-7c08-f5a6-375cd5ff4d6d.png" alt="image.png" /></p> <p>Das Dialogfeld "Neues POM erstellen" wird angezeigt. Übernehmen Sie den Standardinhalt und klicken Sie auf [Fertig stellen] OK</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/4d470ffe-2cf4-5bf9-9ceb-f16003866ba2.png" alt="image.png" /></p> <p>Dadurch wird eine pom.xml-Datei (und ein Zielverzeichnis für die Ausgabe) generiert.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/15e03c2a-0473-ef37-98c2-75edb4921551.png" alt="image.png" /></p> <h4><strong><code>pom.xml</code></strong></h4> <pre><code class="language-xml"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>memoapp</groupId> <artifactId>memoapp</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>WEB-INF/src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source/> <target/> </configuration> </plugin> </plugins> </build> </project> </code></pre> <p>Wenn Sie in ein Maven-Projekt konvertieren, werden einige Einstellungen wie die JRE-Version und das Build-Ziel neu geschrieben. Korrigieren Sie sie daher.</p> <h3>Ändern Sie den Ausgabeordner</h3> <p>Auf der Registerkarte [Quelle] von [Java Build Path] in den Projekteigenschaften lautet der "Standardausgabeordner" [<Projektname> / Ziel / Klassen]. Klicken Sie also auf die Schaltfläche [Durchsuchen] und dann auf [<Projektname> / WEB -Ändern Sie zu INF / Klassen]</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/50e67781-b8b6-630c-4d8e-b8c37cd492fe.png" alt="image.png" /></p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/de36caa2-931b-9d40-b877-18bf6faed966.png" alt="image.png" /></p> <p>Wählen Sie nach dem Ändern des Standardwerts den Ausgabeordner von <Projektname> / WEB-INF / src aus der Liste von [Quellordner im Erstellungspfad] aus und drücken Sie [Bearbeiten].</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/f92b79e7-918d-e7d6-52d8-f9b4f1ee1ef1.png" alt="image.png" /></p> <p>Stellen Sie die Ausgabeordnereinstellung auf "Standardausgabeordner des Projekts" ein.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/06ecca54-a373-9ce5-59d5-db2a6b60922a.png" alt="image.png" /></p> <h3>JRE ändert sich</h3> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/20f03aad-cd1a-4c83-0efe-ceb3d33af0b6.png" alt="image.png" /></p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/c05e767e-994d-1cb3-1d91-abe753b31cfb.png" alt="image.png" /></p> <p>Wenn Sie die Einstellungen aktualisieren, werden Sie aufgefordert, das Löschen der Datei vor der Änderung zu bestätigen. Klicken Sie daher auf [Ja], um sie zu löschen.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/4b780489-7b0a-e129-6ce8-c6370af42216.png" alt="image.png" /></p> <p>Wenn unter "Arbeit" eine unbekannte Datei generiert wird, können Sie diese ebenfalls löschen.</p> <h2>Einführung von JDBC</h2> <p>Greifen Sie mit einem Browser auf das Maven-Repository zu und suchen Sie die gewünschte Datei.</p> <p><a href="https://mvnrepository.com/">Maven Repository: Search/Browse/Explore</a></p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/92a95695-0c0a-5c2a-0ee4-6e3b53a08d03.png" alt="image.png" /></p> <p>Suchen Sie diesmal mit <code>mysql jdbc</code>. Dann wird [MySQL Connector / J] getroffen, also <a href="https://mvnrepository.com/artifact/mysql/mysql-connector-java">Open Link</a> https://mvnrepository.com/artifact/mysql/mysql-connector-java</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/1ef62de6-4eab-c14c-a7b8-fcb05d62eee9.png" alt="image.png" /></p> <p>Wenn Sie den Link öffnen, wird eine Liste der Versionen angezeigt. Wählen Sie daher grundsätzlich dieselbe Version wie MySQL aus. Dieses Mal verwende ich MySQL 8.0.13, wählen Sie also dieselbe Version aus.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/ac7743d5-a7b5-e7f3-3ca8-ec8cacba735f.png" alt="image.png" /></p> <p>Ein Beschreibungsbeispiel der Quelle wird am Verbindungsziel beschrieben. Veröffentlichen Sie den auf dieser Registerkarte [Maven] angezeigten Inhalt in "<Abhängigkeiten> ~ </ Abhängigkeiten>" in der Datei "pom.xml" des Projekts.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/df60c8b0-e716-3540-7ca3-3b638a25d166.png" alt="image.png" /></p> <p>Da das Tag "<dependencies>" im Ausgangszustand nicht vorhanden ist, z. B. unmittelbar nach der Konvertierung in ein Maven-Projekt, geben Sie es auf der Registerkarte "Abhängigkeiten" (entweder manuell) in die Benutzeroberfläche ein.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/e6129a1b-f5ad-2030-a8a8-7f3ac0c5e657.png" alt="image.png" /></p> <p>Geben Sie den auf Mavens Site angezeigten Wert im unten gezeigten Dialogfeld zur Abhängigkeitsauswahl ein und drücken Sie [OK].</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/f2338987-48cb-25b7-b9e3-8e93ab7eb9ea.png" alt="image.png" /></p> <p>Und mysql-connector-java wird hinzugefügt, also speichern Sie die Datei.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/ed466118-c916-3fa5-8ece-c7578f880aa5.png" alt="image.png" /></p> <p>Gleichzeitig mit dem Speichern wird das Herunterladen und Erstellen der erforderlichen Dateien gestartet. Nach Abschluss des Builds werden Dateien wie "Maven-Abhängigkeit" zur Projektkonfiguration hinzugefügt.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/e583e4e5-4326-1d4a-8c72-b59f54de1205.png" alt="image.png" /></p> <p>Zu diesem Zeitpunkt sieht der Inhalt von pom.xml folgendermaßen aus</p> <h4><strong><code>pom.xml</code></strong></h4> <pre><code class="language-xml"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>memoapp</groupId> <artifactId>memoapp</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>WEB-INF/src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source/> <target/> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> </dependencies> </project> </code></pre> <h2>Erstellen einer Datenbank und eines Benutzers</h2> <p>Erstellen Sie eine Datenbank und einen Benutzer, die in der Anwendung verwendet werden sollen. Dies erfolgt unter MySQL, unabhängig von Tomcat oder Java.</p> <pre><code class="language-sql">C:\Users\zaki>mysql -u root -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.13 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> create database memoapp_db; Query OK, 1 row affected (0.06 sec) mysql> create user memoapp identified by "memoapp"; Query OK, 0 rows affected (0.13 sec) mysql> grant all on memoapp_db.* to memoapp; Query OK, 0 rows affected (0.03 sec) mysql> </code></pre> <h2>DB-Verbindung von Java</h2> <pre><code class="language-java"> // --Hier in DB speichern-- Connection con = null; Statement smt = null; String url = "jdbc:mysql://localhost:3306/memoapp_db"; String user = "memoapp"; String pass = "memoapp"; try { con = DriverManager.getConnection(url, user, pass); smt = con.createStatement(); System.out.println("smt: " + smt); } catch (SQLException e) { e.printStackTrace(); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } // --DB-Verarbeitung bis hierher-- </code></pre> <p>Wenn ich jetzt versuche, Daten aus dem Formular zu registrieren, tritt eine Ausnahme auf</p> <pre><code>java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/memoapp_db at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at jp.example.org.MemoAppMain.doPost(MemoAppMain.java:44) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) : : </code></pre> <p>Dies ist kein Problem, da auf die von Maven eingeführte JDBC-JAR-Datei zum Zeitpunkt des Aufbaus auf Eclipse verwiesen werden kann, der Pfad der JDBC-JAR-Datei jedoch bei der Ausführung mit Tomcat nicht festgelegt wird.</p> <p>Wenn Sie in den Projekteigenschaften in den Projekteigenschaften die Option [SMART! Maven-Klassenpfad verwenden] im Bildschirm "Klassenpfad des Entwicklungsklassenladers" aktivieren, werden die Bibliotheken von Maven auch beim Ausführen von Tomcat referenziert ...?</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/f8590167-913f-b972-cf6b-0465e5d1f8ad.png" alt="image.png" /></p> <p>Ich dachte, aber Tomcat hat einen Fehler bekommen und memoapp funktioniert nicht</p> <pre><code>Ernst: Begin event threw exception [Sa 12 01 13:38:19 JST 2018] Ernst: Parse error in context.xml for /memoapp [Sa 12 01 13:38:19 JST 2018] Ernst:Trat in Zeile 126, Spalte 2 auf[Sa 12 01 13:38:19 JST 2018] Ernst:Markieren Sie diese Anwendung aufgrund eines vorherigen Fehlers als nicht verfügbar[Sa 12 01 13:38:19 JST 2018] Ernst: One or more components marked the context as not correctly configured [Sa 12 01 13:38:19 JST 2018] Ernst:Der Kontextstart ist aufgrund eines vorherigen Fehlers fehlgeschlagen[/memoapp] [Sa 12 01 13:38:19 JST 2018] </code></pre> <p>Wenn Sie diese Einstellung vornehmen und die Kontextdefinition aktualisieren, sieht memoapp.xml übrigens so aus</p> <h4><strong><code>memoapp.xml</code></strong></h4> <pre><code class="language-xml"> <Context path="/memoapp" reloadable="true" docBase="C:\Users\zaki\src\2018b-java-study\memoapp" workDir="C:\Users\zaki\src\java-study\memoapp\work" > <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" /> </Context> </code></pre> <p>Als ich nachgeschlagen habe, habe ich einige Informationen gefunden, die "Umbenennen und Kopieren der im Tomcat-Plug-In enthaltenen Datei" DevLoader.zip "in TOMCAT_HOME / server / lib in jar".</p> <ul> <li><a href="http://hinapotech.cocolog-nifty.com/blog/2008/10/eclipsedevloade.html">[Eclipse] DevLoader-Falle: Hinapos technisches Memo</a></li> <li><a href="http://d.hatena.ne.jp/Ochotona/20060608/1149732351">Maven-Projekt-Debugging-Naruto-Zuchttagebuch</a></li> <li><a href="https://qa.atmarkit.co.jp/q/283/">Tomcat funktioniert nicht in Eclipse !! --QA @ IT</a></li> </ul> <p>In Eclipse Tomcat Plugin 9.13 ab Dezember 2018 ist die Datei DevLoader.zip nicht direkt enthalten, sondern in der Datei <code>net.sf.eclipse.tomcat_9.1.3.jar</code> (schwer zu verstehen!) Da es sich bei der JAR-Datei tatsächlich um eine Zip-Datei handelt, benennen Sie die Erweiterung um und erweitern Sie sie. Extrahieren Sie dann die Datei "DevloaderTomcat7.jar". Gibt es nur Tomcat7?</p> <p>Als ich diese Datei tatsächlich verwendete, funktionierte sie unter Tomcat 8 nicht.</p> <pre><code>Ernst: Begin event threw error [Sa 12 01 14:48:25 JST 2018] Ernst: ContainerBase.addChild: start: [Sa 12 01 14:48:25 JST 2018] Ernst:Konfigurationsdeskriptor C.:\pleiades\pleiades\tomcat\8\conf\Catalina\localhost\memoapp.Fehler beim Bereitstellen von XML[Sa 12 01 14:48:25 JST 2018] </code></pre> <p>Das Tomcat-Plug-In von Eclipse enthält anscheinend keine erforderlichen Dateien. Laden Sie es daher aus dem Internet herunter.</p> <p>https://sourceforge.net/projects/tomcatplugin/files/additional/ ↑ Es passiert nicht ... Also von hier aus. https://github.com/his-eg/tomcatplugin/blob/master/net.sf.eclipse.tomcat/DevLoaderTomcat8.jar</p> <p>Kopieren Sie diese Datei in das lib-Verzeichnis von Tomcat. (Für Plejaden um <code>pleiades \ tomcat \ 8 \ lib \ DevloaderTomcat7.jar</code>)</p> <p>Dies sollte funktionieren, wenn ich Tomcat neu starte ... aber ich bekomme immer noch den gleichen Fehler</p> <pre><code>java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/memoapp_db </code></pre> <p>(Stellen Sie sich vor) Dieser Fehler schlägt fehl, "DriverManager.getConnection ()", der ohne das jdbc-JAR nicht ausgeführt werden kann, da DevLoader nicht festgelegt hat, welche Klasse zum Zeitpunkt der Ausführung geladen werden soll. Kurz zuvor können Sie das JDBC-JAR laden. Dann machen Sie <code>Class.forName (" com.mysql.cj.jdbc.Driver ");</code></p> <pre><code class="language-java"> // --Hier in DB speichern-- Connection con = null; Statement smt = null; //String url = "jdbc:mysql://localhost:3306/memoapp_db?useSSL=false&useUnicode=true&serverTimezone=UTC"; String url = "jdbc:mysql://localhost:3306/memoapp_db"; String user = "memoapp"; String pass = "memoapp"; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection(url, user, pass); smt = con.createStatement(); System.out.println("smt: " + smt); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } // --DB-Verarbeitung bis hierher-- </code></pre> <p>Der Code des DB-Verbindungsteils sieht also so aus. Beachten Sie, dass der Klassenname des Arguments von "forName ()", das häufig im Beispielcode vorkommt, "com.mysql .__ cj __. Jdbc.Driver" lautet, da FQCN in der aktuellen Version geändert wurde (cj wurde hinzugefügt). Teru)</p> <p>Außerdem musste ich den Pfad der Loader-Klasse für Entwicklungsklassen "org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" hinzufügen.</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/fadaa5d1-479a-c568-490a-ee2bb0ebf07a.png" alt="image.png" /></p> <p>Abgesehen davon dauerte es eine Woche, bis die DB-Verbindung abgeschlossen war ...</p> <ul> <li>Obwohl es nicht klug ist, werden die Einstellungen auf der Eclipse-Seite geändert, wenn Sie <code>mysql-connector-java-8.0.13.jar</code> und<code> protobuf-java-3.6.1.jar</code> direkt unter das Verzeichnis<code> lib</code> für die Tomcat-Bibliothek kopieren. Es funktioniert ohne irgendetwas.</li> </ul> <h1>DB-Betrieb</h1> <p>Klicken Sie hier für eine kurze Zusammenfassung der MySQL-Operationen. [(Los und aktualisiert) MySQL / SQL-Memo](Qiita https://qiita.com/zaki-lknr/items/4d330b64e1d8cdd9ce59)</p> <h2>Tischgestaltung und -erstellung</h2> <p>Einfach, weil es ein Beispiel ist</p> <table> <thead> <tr> <th>field</th> <th>type</th> <th>size</th> <th>not null</th> <th>comment</th> <th>etc</th> </tr> </thead> <tbody> <tr> <td>memo_id</td> <td>int</td> <td>11</td> <td>✓</td> <td>ID</td> <td>auto_increment</td> </tr> <tr> <td>category</td> <td>int</td> <td>11</td> <td></td> <td>Kategorie</td> <td></td> </tr> <tr> <td>title</td> <td>varchar</td> <td>64</td> <td></td> <td>Titel</td> <td></td> </tr> <tr> <td>memo</td> <td>text</td> <td></td> <td></td> <td>Memo</td> <td></td> </tr> <tr> <td>create_date</td> <td>datetime</td> <td></td> <td></td> <td>Erstellungsdatum</td> <td></td> </tr> <tr> <td>modified_date</td> <td>datetime</td> <td></td> <td></td> <td>Aktualisierungsdatum</td> <td></td> </tr> </tbody> </table> <p>Erstellen von SQL zum Erstellen einer Tabelle</p> <pre><code class="language-sql">create table if not exists memo_data ( memo_id INT(11) auto_increment not null comment 'ID', category INT(11) comment 'Kategorie', title VARCHAR(64) comment 'Titel', memo TEXT comment 'Memo', create_date DATETIME comment 'Erstellungsdatum', modified_date DATETIME comment 'Aktualisierungsdatum', primary key (memo_id) ) </code></pre> <p>Java-Code zum Erstellen einer Tabelle (obwohl etwas angemessen)</p> <pre><code class="language-java"> con = DriverManager.getConnection(url, user, pass); smt = con.createStatement(); System.out.println("smt: " + smt); String create_table = "create table if not exists memo_data (" + "memo_id INT(11) auto_increment not null comment 'ID'," + "category INT(11) comment 'Kategorie'," + "title VARCHAR(64) comment 'Titel'," + "memo TEXT comment 'Memo'," + "create_date DATETIME comment 'Erstellungsdatum'," + "modified_date DATETIME comment 'Aktualisierungsdatum'," + "primary key (memo_id)" + ")"; // create table smt.executeUpdate(create_table); </code></pre> <p>Führen Sie es nun aus und die Tabelle wird erstellt</p> <pre><code>mysql> show tables; +----------------------+ | Tables_in_memoapp_db | +----------------------+ | memo_data | +----------------------+ 1 row in set (0.01 sec) mysql> describe memo_data; +---------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+----------------+ | memo_id | int(11) | NO | PRI | NULL | auto_increment | | category | int(11) | YES | | NULL | | | title | varchar(64) | YES | | NULL | | | memo | text | YES | | NULL | | | create_date | datetime | YES | | NULL | | | modified_date | datetime | YES | | NULL | | +---------------+-------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql> </code></pre> <h2>Prozess zum Speichern von Memos</h2> <p>Erstellen Sie einen Prozess zum Speichern der Formulareingabedaten, auf die durch "req.getParameter (" title ")" und "req.getParameter (" memo ")" in der Methode "doPost ()" in der Tabelle verwiesen werden kann.</p> <pre><code class="language-java">String form_title = req.getParameter("title"); String form_memo = req.getParameter("memo"); </code></pre> <p>Und erhalten Sie es in einer Variablen, und die INSERT-Anweisung sieht wie folgt aus.</p> <pre><code class="language-sql">insert into memo_data ( category, title, memo, create_date, modified_date ) values ( 0, form_title, form_memo, cast(now() as datetime), cast(now() as datetime) ); </code></pre> <p>Java-Code zum Speichern von Datensätzen</p> <pre><code class="language-java"> con = DriverManager.getConnection(url, user, pass); smt = con.createStatement(); String form_title = req.getParameter("title"); String form_memo = req.getParameter("memo"); System.out.println("title: " + form_title); System.out.println("text: " + form_memo); String insert_memo = "insert into memo_data (" + "category, title, memo, create_date, modified_date" + ") values (" + "0," + "'" + form_title + "'," + "'" + form_memo + "'," + "cast(now() as datetime)," + "cast(now() as datetime) " + ");"; //Datensatz speichern smt.executeUpdate(insert_memo); </code></pre> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/64dfa930-41cc-1982-5d9a-7190ea61681d.png" alt="image.png" /></p> <p>Wenn Sie nun Text über den Browser eingeben und senden, wird der Inhalt in der Datenbank gespeichert.</p> <p>(Es ist schwer mit Zeilenumbrüchen zu sehen) So.</p> <pre><code>mysql> select * from memo_data; +---------+----------+--------+----------------------------+---------------------+---------------------+ | memo_id | category | title | memo | create_date | modified_date | +---------+----------+--------+----------------------------+---------------------+---------------------+ | 1 | 0 |Einkaufen| -Curry -Einfach -Niku| 2018-12-02 09:52:07 | 2018-12-02 09:52:07 | +---------+----------+--------+----------------------------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> </code></pre> <h2>Memoerfassung und Anzeigeverarbeitung</h2> <p>Erstellen Sie einen Prozess, um die zuletzt gespeicherten Memodaten auf dem Bildschirm anzuzeigen. Da es angezeigt wird, wird der Speicherort mit "doGet ()" ausgeführt.</p> <p>Die Spalte, die vorerst angezeigt werden soll</p> <p>--Titel --Memo --Aktualisiert</p> <p>Mit drei.</p> <p>Zunächst die SELECT-Anweisung</p> <pre><code class="language-sql">select title, memo, modified_date from memo_data; </code></pre> <p>Im Gegensatz zum Erstellen und Einfügen erstellen Java-Quellen auch Prozesse, die Ausführungsergebnisse erhalten.</p> <pre><code class="language-java"> con = DriverManager.getConnection(url, user, pass); smt = con.createStatement(); String select_memo = "select title, memo, modified_date from memo_data;"; ResultSet result = smt.executeQuery(select_memo); while (result.next()) { System.out.println("title: " + result.getString("title")); System.out.println("memo: " + result.getString("memo")); System.out.println("modify: " + result.getString("modified_date")); } </code></pre> <p>Jetzt können Sie die Datensatzinformationen abrufen. Übergeben Sie als Nächstes die aus der Datenbank abgerufenen Memodaten an den Bildschirm (JSP).</p> <h1>Erstellen der Memo-Ausgabeverarbeitung</h1> <p>Erstellen Sie dieses Mal einen Prozess zum Übergeben von Daten von Servlet an JSP (siehe den von Servlet in JSP empfangenen Wert).</p> <h2>Servlet-Seite</h2> <p>Erstens kann das Ergebnis von "executeQuery ()" nicht verwendet werden, nachdem die Verbindung so wie sie ist geschlossen wurde. Erstellen Sie daher eine Variable zum Übergeben und kopieren Sie die Datensatzinformationen in diese.</p> <pre><code class="language-java"> ArrayList<HashMap<String, String>> record_list = new ArrayList<>(); //Unterlassung ResultSet result = smt.executeQuery(select_memo); while (result.next()) { HashMap<String, String> record = new HashMap<>(); record.put("title", result.getString("title")); record.put("memo", result.getString("memo")); record.put("modified_date", result.getString("modified_date")); record_list.add(record); } </code></pre> <p>Um diese "record_list" an die JSP zu übergeben, setzen Sie den Wert in der Anforderungsvariablen von Servlet mit "setAtribute ()" (wie bei HashMap können Sie die Datenstruktur im Schlüsselwertformat übergeben).</p> <pre><code class="language-java"> req.setAttribute("record_list", record_list); String view = "/WEB-INF/jsp/index.jsp"; RequestDispatcher dispatcher = req.getRequestDispatcher(view); dispatcher.forward(req, resp); </code></pre> <p>Jetzt können Sie in JSP mit dem Schlüsselnamen <code>record_list</code> darauf verweisen.</p> <h2>JSP-Seite</h2> <p>Der durch "setAttribute (KEY)" im Servlet festgelegte Wert kann über "request.getAttribute (KEY)" abgerufen werden.</p> <pre><code class="language-java"> ArrayList<HashMap<String, String>> list = (ArrayList<HashMap<String, String>>) request.getAttribute("record_list"); </code></pre> <p>Nach dem Extrahieren wird es wie die normale Java-Codierung im HTML-Format ausgegeben.</p> <pre><code class="language-java"> Iterator<HashMap<String, String>> i = list.iterator(); while (i.hasNext()) { HashMap map = i.next(); out.println("<hr/>"); out.println("<div>" + map.get("title") + "</div>"); out.println("<div>" + map.get("modified_date") + "</div>"); out.println("<div>" + ((String) map.get("memo")).replace("\n", "<br/>") + "</div>"); } </code></pre> <p>Ich brauche auch zuerst eine Importanweisung</p> <pre><code class="language-text"><%@page import="java.util.Iterator"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.HashMap"%> </code></pre> <p>Die ganze Quelle sieht so aus</p> <pre><code class="language-text"><%@page import="java.util.Iterator"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.HashMap"%> <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Memo App</title> </head> <body> <h1>Memo App</h1> <form method="post"> <input type="text" name="title" size="50" /> <br /> <textarea rows="5" cols="80" name="memo"></textarea> <br /> <input type="submit" /> </form> <% ArrayList<HashMap<String, String>> list = (ArrayList<HashMap<String, String>>) request .getAttribute("record_list"); Iterator<HashMap<String, String>> i = list.iterator(); while (i.hasNext()) { HashMap map = i.next(); out.println("<hr/>"); out.println("<div>" + map.get("title") + "</div>"); out.println("<div>" + map.get("modified_date") + "</div>"); out.println("<div>" + ((String) map.get("memo")).replace("\n", "<br/>") + "</div>"); } %> </body> </html> </code></pre> <p>Bildschirmanzeige</p> <p><img src="https://qiita-image-store.s3.amazonaws.com/0/256859/1bb3c991-9742-65e7-32af-64751e5aa27b.png" alt="image.png" /></p> <p>Ich konnte es anzeigen und speichern.</p> <h1>Zukünftige Aufgaben</h1> <ul> <li>Da die Adressspezifikation des DB-Servers fest codiert ist, muss sie bei jeder Änderung der Umgebung neu erstellt werden.</li> <li><a href="https://qiita.com/zaki-lknr/items/2bd955df62d4de0528ac">XML-Dateidefinition der Datenbankverbindungseinstellungen mit JNDI</a></li> <li>SQL-Injektionsmaßnahmen</li> <li>Mit Platzhaltern --Erstellen einer Kriegsdatei zur Ausführung in einer nicht lokalen Umgebung</li> <li>Vielleicht die Welt der Eclipse-Operationen</li> <li>Verwandte Informationen: <a href="https://qiita.com/zaki-lknr/items/a2e76986b6e473964800">Exportieren von Projekten und Kriegsdateien beim Erstellen von serverseitigem Java in Eclipse</a></li> <li>De-Eclipse --CLI Build</li> <li>Wenn Sie eine Verzeichnisstruktur als Maven-Projekt erstellt haben, z. B. unter Debian Linux, können Sie bei Eingabe von "maven" mit apt eine War-Datei erstellen, indem Sie "mvn package" im Verzeichnis mit "pom.xml" ausführen.</li> <li><a href="https://github.com/zaki-lknr/javaee-memoapp2/commits/master">Referenz, da die Quelle auf GitHub hochgeladen wurde</a> ――Ist es doch eine Idee?</li> <li>DB-Initialisierungsprozess --JPA (Java Persistence API)</li> <li>Klassifizieren Sie die DB-Verarbeitung ordnungsgemäß</li> <li>Die Idee von DAO ――Um es klar auszudrücken: Durch die separate Implementierung von Dateneingabe- / Ausgabeoperationen in separaten Klassen, z. B. selbst wenn die Datenbank zu Postgres wechselt, wird die Änderung auf der Anruferseite minimiert, was häufig mit kommerziellem Code erfolgt.</li> <li><a href="https://github.com/zaki-lknr/javaee-memoapp2/tree/master/src/main/java/jp/example/www/dao">DAO-Seitenquellenbeispiel (GitHub)</a></li> <li><a href="https://github.com/zaki-lknr/javaee-memoapp2/commit/9dee5df1857f7c64a7d9b5def76a3e5c7bee505b#diff-9b28da552a85fc2a037e6543">Änderungen der Anruferquelle (GitHub)</a> --Servlet-> JSP-Datenübertragung etwas schöner schreiben --Verwenden Sie JavaBeans: <a href="https://qiita.com/zaki-lknr/items/3c01f74e0fe2876442d2">Vereinfachen Sie das Schreiben von JSP / Servlet mit JavaBeans und JSTL</a> ――Können Sie den Anzeigeteil der Schleife etwas schöner schreiben?</li> <li>In der JSTL-Core-Tag-Bibliothek für jeden: <a href="https://qiita.com/zaki-lknr/items/3c01f74e0fe2876442d2">Vereinfachen Sie das Schreiben von JSP / Servlet mit JavaBeans und JSTL</a></li> <li>Rahmenunterstützung --Frühling --Login oder Sitzung</li> <li>Das Aussehen des Bildschirms --Bootstrap ...</li> </ul> <!-- ENDDDDDDDDDDDDDDDDDDDDDDDDDDDDD --> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- ng_ads_new_ui --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6575041992772322" data-ad-slot="8191531813" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div style="margin-top: 30px;"> <div class="link-top" style="margin-top: 1px;"></div> <p> <font size="4">Recommended Posts</font> <!-- BEGIN LINK ************************* --> <div style="margin-top: 10px;"> <a href="/de/32690b071abf202281d6">Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse</a> </div> <div style="margin-top: 10px;"> <a href="/de/3373c306bd2ec720092c">Erstellen Sie ein Tomcat-Projekt mit Eclipse</a> </div> <div style="margin-top: 10px;"> <a href="/de/7505b054f5708868f5ba">[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen</a> </div> <div style="margin-top: 10px;"> <a href="/de/2fa52ecee90b7a25e4c9">Memo zur Entwicklung von Webanwendungen mit MVN, Tomcat, JSP / Servlet mit VScode</a> </div> <div style="margin-top: 10px;"> <a href="/de/9ca5bb0719f38e2ce52e">Erstellen Sie ein Tomcat-Projekt mit Eclipse Pleiades All in One</a> </div> <div style="margin-top: 10px;"> <a href="/de/a505249cc0d50df3aae8">Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)</a> </div> <div style="margin-top: 10px;"> <a href="/de/dfee2210ebff74ac942c">Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL</a> </div> <div style="margin-top: 10px;"> <a href="/de/1936ab2944fe79837ac2">Erstellen Sie mit Eclipse ein Jetty-Projekt</a> </div> <div style="margin-top: 10px;"> <a href="/de/833a8879ce49b9bec9cb">Erstellen Sie ein Java-Projekt mit Eclipse</a> </div> <div style="margin-top: 10px;"> <a href="/de/a181776ce407ce44dbfd">Erstellen Sie ein Servlet-Programm in Eclipse</a> </div> <div style="margin-top: 10px;"> <a href="/de/2c5632cd1bd741cdd3e3">[Rails6] Erstelle eine neue App mit Rails [Anfänger]</a> </div> <div style="margin-top: 10px;"> <a href="/de/bc97bea609583dee7f93">[Rails 5] Erstelle eine neue App mit Rails [Anfänger]</a> </div> <div style="margin-top: 10px;"> <a href="/de/17b2c10042c3203382f2">[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung</a> </div> <div style="margin-top: 10px;"> <a href="/de/22b7f03c409422c40f7d">Erstellen Sie mit Spring Boot eine einfache Such-App</a> </div> <div style="margin-top: 10px;"> <a href="/de/28ca111a5a3c0cbdcf0a">Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board</a> </div> <div style="margin-top: 10px;"> <a href="/de/2ee748aeb05ee538129f">[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9</a> </div> <div style="margin-top: 10px;"> <a href="/de/8137ac40ebd8f5bdb3c5">[Eclipse / Tomcat] Servlet + JSP in Mavens Webapp-Projekt</a> </div> <div style="margin-top: 10px;"> <a href="/de/57b2f5d9140e37abad59">Über [Servlet] [JSP] [Tomcat]</a> </div> <div style="margin-top: 10px;"> <a href="/de/627d45bbaa173fcd771c">Erstellen Sie eine Chat-App mit WebSocket (Tyrus) + libGDX + Kotlin</a> </div> <div style="margin-top: 10px;"> <a href="/de/eb4640761a4e77490ea3">Erstellen Sie ein Java-Servlet und eine JSP-WAR-Datei für die Bereitstellung auf Apache Tomcat 9 mit Gradle</a> </div> <div style="margin-top: 10px;"> <a href="/de/3d553bb24b34d0671845">[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen</a> </div> <div style="margin-top: 10px;"> <a href="/de/7b2c2445ebdee5edead1">Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty</a> </div> <div style="margin-top: 10px;"> <a href="/de/f0d0417c3731b044c6db">So registrieren Sie sich mit Tomcat als Kunde in Square</a> </div> <div style="margin-top: 10px;"> <a href="/de/62a7281dbe0398db85f2">Erstellen Sie eine Java-Methode [Memo] [java11]</a> </div> <div style="margin-top: 10px;"> <a href="/de/8577aa59797faa938264">Erstellen Sie einen Spielplatz mit Xcode 12</a> </div> <div style="margin-top: 10px;"> <a href="/de/951f6579ad1bb589185f">Erstellen Sie eine Lotterie mit Ruby</a> </div> <div style="margin-top: 10px;"> <a href="/de/a15a011485ac92074d6f">Erste Schritte mit JSP & Servlet</a> </div> <div style="margin-top: 10px;"> <a href="/de/40c7d50e2f8703559dc2">Erstellen Sie eine App-Katalogsite mit CLI für Microsoft 365 mit Docker</a> </div> <div style="margin-top: 10px;"> <a href="/de/5a1b5e5da95a21935d18">Erstellen Sie eine JVM für die App-Verteilung mit JDK 9-Modulen und jlink</a> </div> <div style="margin-top: 10px;"> <a href="/de/bf49eced38eeab5371ad">[Einführung in JSP + Servlet] Ich habe eine Weile damit gespielt ♬</a> </div> <div style="margin-top: 10px;"> <a href="/de/d14d643db28bc63c7b3f">Erstellen Sie eine Restaurant-Such-App mit der IBM Watson + Guru Navi-API (mit Quelle).</a> </div> <div style="margin-top: 10px;"> <a href="/de/5602dbcc736cd03d03b8">[Java / Eclipse / Servlet / JSP / PostgreSQL] Framework der WEB-Anwendung mit Funktionen zum Posten / Speichern / Bearbeiten / Aktualisieren / Löschen von Daten</a> </div> <div style="margin-top: 10px;"> <a href="/de/09384726105eee53bbb6">Erstellen Sie mit Docker eine Vue3-Umgebung!</a> </div> <div style="margin-top: 10px;"> <a href="/de/0993c489e7ef1c0f969d">[Android] Erstellen Sie einen Kalender mit GridView</a> </div> <div style="margin-top: 10px;"> <a href="/de/33bfea8b4b27ed0e7715">Erstellen Sie eine App mit Spring Boot 2</a> </div> <div style="margin-top: 10px;"> <a href="/de/6577d2556ba355537cee">Erstellen einer Timer-App mit Schlamm</a> </div> <div style="margin-top: 10px;"> <a href="/de/6a4b6062df6cf7a12ef4">Erstellen Sie eine neue App mit Rails</a> </div> <div style="margin-top: 10px;"> <a href="/de/718c77f6a305c7a190e1">Übergeben von Parametern aus JSP mit Servlet</a> </div> <div style="margin-top: 10px;"> <a href="/de/8c29fc7fc2d886a9b35e">Erstellen Sie eine App mit Spring Boot</a> </div> <div style="margin-top: 10px;"> <a href="/de/900bf9f0ee0d8f7b9b11">Erstellen Sie eine Filterfunktion mit Acts-as-Taggable-On</a> </div> <div style="margin-top: 10px;"> <a href="/de/a2932d0f2c775525a4b6">Erstellen Sie eine Befehlszeilen-App mit maven</a> </div> <div style="margin-top: 10px;"> <a href="/de/b07dd5e86a6d6cd3efbc">Hallo Welt mit GlassFish 5.1 + Servlet + JSP</a> </div> <div style="margin-top: 10px;"> <a href="/de/bd99135a1d2f0009a69e">Versuchen Sie, eine Server-Client-App zu erstellen</a> </div> <div style="margin-top: 10px;"> <a href="/de/d0069963b13737e8e3f8">Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle</a> </div> <div style="margin-top: 10px;"> <a href="/de/eee651c34f05470f8fac">Erstellen Sie ein Maven-Projekt mit Befehlen</a> </div> <div style="margin-top: 10px;"> <a href="/de/340afd8401af2ae2231f">Erstellen Sie mit dem Befehl cURL + tar ein Spring Boot-App-Entwicklungsprojekt</a> </div> <div style="margin-top: 10px;"> <a href="/de/b78c3791b27b1256def6">Erstellen Sie mit Rails x LineBot eine App für die Zusammenfassung von technischen Nachrichten im LINEnews-Stil! [Teil 1]</a> </div> <div style="margin-top: 10px;"> <a href="/de/db9cb387ecfde0944496">Schritte zum Erstellen einer einfachen Kamel-App mit Apache Camel Spring Boot-Startern</a> </div> <div style="margin-top: 10px;"> <a href="/de/fa145e42bf32271d8d6c">Interaktion mit einer MySQL-Datenbank mithilfe der ORM-Funktion (Object-Relational Mapping) von Apache Cayenne</a> </div> <div style="margin-top: 10px;"> <a href="/de/f1dfeb2c3b8bcca5ebc5">[Java] Ich habe JDBC installiert und versucht, eine Verbindung mit Servlet + MySQL herzustellen. (Es gibt eine Version mit DAO / Bean)</a> </div> <!-- END LINK ************************* --> </p> </div> </div> </div> <div class="footer text-center" style="margin-top: 40px;"> <!-- <p> Licensed under cc by-sa 3.0 with attribution required. </p> --> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/highlight.min.js"></script> <!-- ads --> <script data-ad-client="ca-pub-6575041992772322" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- end ads --> </body> </html>