[JAVA] [Einführung in JSP + Servlet] Ich habe eine Weile damit gespielt ♬

Ich bin ein absoluter Anfänger, also kann ich etwas Schlampiges schreiben, aber bitte vergib mir. Dieses Mal habe ich beschlossen, JSP + Servlet für eine Weile auszuprobieren, damit ich das Gelernte auf einfache Weise zusammenfassen kann. Ich werde es fast als Referenz erstellen und die Geschichte von dort aus schreiben. 【Referenz】 ① Einführung in JSP & Servlet

Was ich getan habe

・ Installation von Eclipse ・ Machen Sie eine einfache ・ Unterstützt japanische Eingaben · Bildschirm ・ Code hinzufügen

・ Installation von Eclipse

Es gibt auch eine aktuelle Version, aber die Referenz [https://ftp.jaist.ac.jp/pub/mergedoc/pleiades/4.6/pleiades-4.6.3-java-win-64bit-jre_20170422.zip](https: / /mergedoc.osdn.jp/index.html#/pleiades_distros4.6.html) wurde wie erläutert unter Windows 10 installiert. (Die folgenden Zahlen sind aus der obigen Referenz zitiert) ① Erstellen Sie einen Ordner wie C: \ app ② Verschieben Sie die heruntergeladene Zip-Datei ③ Ändern Sie den Dateinamen in pleiades-4.6.3.zip ④ Extrahieren Sie die ZIP-Datei ⑤ Verschieben Sie Plejaden im erweiterten Ordner nach C: \ app

・ Machen Sie eine einfache

Lassen Sie uns die obige Referenz simpl am einfachsten machen. Jetzt können Sie die Verzeichnisstruktur sehen und sehen, wie Sie sie verschieben. ① Wenn Sie Eclipse starten, befindet sich das Paket X-Prowler oben links. Klicken Sie mit der rechten Maustaste in diesen Bereich (innerhalb des Quadrats) ... Übergänge in der Reihenfolge in (), -Erstellen Sie ein dynamisches Webprojekt (Rechtsklick-neu-anderes-dynamisches Webprojekt-weiter) ・ Projektname; sampleWeb -Ziellaufzeit; Tomcat8 (Java8) Sie können ein sampleWeb-Projekt durch Eingabe erstellen. ② Klicken Sie diesmal mit der rechten Maustaste auf src (New-Other-Servlet-Next). -Java-Paket; sample.controller ・クラス名;HelloSample.java Sie können ein Servlet; sample.controller durch Eingabe erstellen. Dies scheint das einfachste Servlet zu sein.

Ich werde es starten

Klicken Sie mit der rechten Maustaste auf sampleWeb-Run-1. Klicken Sie auf Auf Server ausführen. .. .. URL;http://localhost:8080/sampleWeb/HelloSample Sie können sehen, dass Folgendes in ausgeführt wird. Es hat auch funktioniert, wenn ich die obige URL zugewiesen und mit einem normalen Browser zurückgegeben habe.

Served at: /sampleWeb

Der Code ist unten Es ist ein Skelett, aber es funktioniert.

HelloSample.py



package sample.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

Als nächstes gibt es eine Anmerkung, dass es sich um @WebServlet ("/ HelloSample") handelt. Gleichzeitig mit dem Kommentar scheint es das System über die Zuordnung von WebServlet ("/ HelloSample") zu informieren. Es wird aus Lit. ② zitiert. "Anmerkungen sind nicht Teil eines Programms, enthalten jedoch Informationen zum Programm. Bei der Servlet-Programmierung können Anmerkungen verwendet werden, um Zuordnungsinformationen zwischen URL-Pfaden und Servlets zu deklarieren. Mit der neuesten Version von Java EE können Sie Anmerkungen verwenden, ohne web.xml für die Zuordnung zu verwenden. Sie können wählen, ob Sie web.xml oder Anmerkungen verwenden möchten. ""

【Referenz】 ② [Java & Tomcat] Webanwendungseinstellungen (Anmerkung) * mit Beispielprogramm

/**
 * Servlet implementation class HelloSample
 */
@WebServlet("/HelloSample")
public class HelloSample extends HttpServlet {
	private static final long serialVersionUID = 1L;

Und im Konstruktor wird dies zuerst ausgeführt, wenn es gestartet wird. Es scheint nichts zu tun.

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloSample() {
        super();
        // TODO Auto-generated constructor stub
    }

Als nächstes kommt doGet. Dies ist (Anfrage, Antwort) und es interagiert mit etwas.

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

Dann war da noch doPost. Dies ist auch (Anfrage, Antwort), um mit etwas zu interagieren. Ist es nicht dasselbe? ?? Die einzige geschriebene Funktion ist doGet (), die aufgerufen (ausgeführt) wird.

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

Mit anderen Worten, dieses Servlet wird gestartet, doGet wird ausgeführt,

response.getWriter().append("Served at: ").append(request.getContextPath());

Ist umgezogen.

・ Versuchen Sie, ein Jsp-Servlet zu erstellen

Wenn du kein Jsp machst, geht es schließlich gegen den Titel, also werde ich es machen. Dies ist auch alles wie in Referenz ① oben gezeigt. -Create index.jsp (Klicken Sie mit der rechten Maustaste auf die Datei WebContent-New-Other-jsp Dateiname; index.jsp Geben Sie ein und vervollständigen Sie Sie haben jetzt index.jsp direkt unter WebContent erstellt. Der Code ist unten Wir haben <% = new java.util.Date ()%> hinzugefügt, um die Zeit im Körper anzuzeigen. Außerdem lautet der Titel Hallo, Welt.

.jsp



<%@ 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>Hello, World</title>
</head>
<body>
    <%= new java.util.Date() %>
</body>
</html>

Bewegen wir es jetzt auf die gleiche Weise wie zuvor. Das Folgende ist http://localhost:8080/sampleWeb/ Es wurde ausgegeben an.

Wed Apr 22 21:55:03 JST 2020 

Die Verzeichnisstruktur ist wie folgt. package_exp.jpg Ich verstehe nicht wirklich, wie es funktioniert, ... Anscheinend arbeitet jeder für sich, http: // localhost: 8080 / sampleWeb / Es scheint, dass index.jsp aufgerufen wird und die Uhrzeit angezeigt wird. Auf der anderen Seite wird unter http: // localhost: 8080 / sampleWeb / HelloSample Served at: / sampleWeb angezeigt. Es scheint nicht der Titel zu sein, es sei denn, wir interagieren miteinander.

・ Unterstützt japanische Eingaben

Um zwischen jsp-servelets auszutauschen, verschieben Sie zunächst index.jsp unter WEB-INF, damit es von außen nicht sichtbar ist.

-Übertragen Sie Informationen von HelloSample an JSP

"Wenn ein Client (Browser) eine Anfrage an HelloSample stellt, wird die doGet-Methode ausgeführt." Schreiben Sie also Folgendes in doGet von HelloSample.java.

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    String view = "/WEB-INF/view/index.jsp";
	    RequestDispatcher dispatcher = request.getRequestDispatcher(view);
	    dispatcher.forward(request, response);
	}

Nachdem HelloSample.java neu geschrieben wurde, starten Sie den Server neu. Die Referenz ① oben stammt aus dem Fenster. .. Hier können Sie jedoch erneut ausführen, indem Sie mit der rechten Maustaste auf die Ausführung von sampleWeb-execute-1 auf dem Server-complete klicken. Jetzt wird die folgende Meldung angezeigt, aber der Neustart ist erfolgreich. Tatsächlich http: // localhost: 8080 / sampleWeb / HelloSample Wenn Sie url eingeben und zurückkehren, wird die vorherige Zeit angezeigt, und Sie können sehen, dass index.jsp aufgerufen und angezeigt wurde.

HTTP-Status 404- /sampleWeb/
Geben Sie den Statusbericht ein
Botschaft/sampleWeb/
Berschreibung: Die angefragte Quelle ist nicht verfügbar.
Apache Tomcat/8.0.43

Übergeben Sie als Nächstes eine entsprechende Zeichenfolge aus HelloSample.java an index.jsp und zeigen Sie sie an.

Fügen Sie dem obigen doGet den folgenden Code hinzu.

	    //Übergeben Sie eine entsprechende Zeichenfolge an JSP
	    request.setAttribute("foo", "bar");

Und index.jsp wird wie folgt empfangen.

.jsp


	<%= request.getAttribute("foo") %>

Starten Sie den Server daher wie oben beschrieben neu. http://localhost:8080/sampleWeb/HelloSample Wenn Sie sich ansehen, können Sie sehen, dass Folgendes angezeigt wird. Thu Apr 23 17:35:06 JST 2020 bar Mit anderen Worten, da es dahinter platziert wurde, wird die Leiste nach der Zeit angezeigt.

Machen Sie die Lieferung etwas komplizierter

Zunächst wird die empfangende index.jsp wie folgt beschrieben. Wenn "" beschrieben wird, ist es wie folgt. Ich lasse die Ergänzungen so weit.

.jsp


<body>
	<%= new java.util.Date() %>
	<%= request.getAttribute("foo") %>
	<form method="post" action="./HelloSample">
Gib etwas ein: <input type="text" name="hoge">
        <button type="submit">Senden</button>
    </form>
</body>

Als nächstes erhält der Empfänger es diesmal mit doPost von HelloSample.java. request.getPasrameter("hoge"); Holen Sie sich den Wert mit, weisen Sie ihn dem Wert zu und geben Sie ihn an die Standardausgabe aus.

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    //Holen Sie sich Wert aus dem Formular
	    String value = request.getParameter("hoge");
	    System.out.println(value);
       	doGet(request, response);
	}

Als nächstes lautet die verknüpfte Anwendung mit dem Namen JSP-Servlet-JSP wie folgt

Wenn Sie so viel wie möglich schreiben, ohne den Code bisher zu löschen,

.jsp


<body>
	<%= new java.util.Date() %>
	<%= request.getAttribute("foo") %><br/>
	<%= request.getAttribute("userName") %>
	<form method="post" action="./HelloSample">
Gib etwas ein: <input type="text" name="name">
        <button type="submit">Senden</button>
    </form>
</body>

Auf der Servlet-Seite wird doPost von HelloSample.java wie folgt umgeschrieben

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    //Zeichencode-Spezifikation
	    request.setCharacterEncoding("utf-8");
	    String name = request.getParameter("name");
	    request.setAttribute("userName", name);

	    System.out.println(name);
        doGet(request, response);
	}

Darüber hinaus ist doGet:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    //Übergeben Sie eine entsprechende Zeichenfolge an JSP
		request.setAttribute("foo", "bar");
	    String name = (String) request.getAttribute("userName");
		if (name == null || "".equals(name)) {
	        request.setAttribute("userName", "Guest");
	    }

	    String view = "/WEB-INF/view/index.jsp";
	    RequestDispatcher dispatcher = request.getRequestDispatcher(view);
	    dispatcher.forward(request, response);
	}

Führen Sie zunächst Servlet; HelloSample.java auf einem Server aus. Und wenn Sie sich die folgende URL mit einem Browser ansehen http://localhost:8080/sampleWeb/

HTTP-Status 404- /sampleWeb/
Geben Sie den Statusbericht ein
Botschaft/sampleWeb/
Berschreibung: Die angefragte Quelle ist nicht verfügbar.
Apache Tomcat/8.0.43

Und http://localhost:8080/sampleWeb/HelloSample Das folgende Bild wird angezeigt.

Thu Apr 23 21:35:55 JST 2020 bar
Guest
Gib etwas ein:Senden

Wenn Sie Folgendes eingeben und Senden drücken,

Thu Apr 23 21:35:55 JST 2020 bar
Guest
Gib etwas ein:MuAuan Übertragung

Gast geändert zu MuAuan wie unten,

Thu Apr 23 21:35:55 JST 2020 bar
MuAuan
Gib etwas ein:Senden

MuAuan wird auf die Standardausgabe ausgegeben. Sie können also sehen, dass JSP-Servlet-JSP und MuAuan übergeben wurden.

Andererseits wird im Fall des obigen Codes auch Japanisch korrekt angezeigt.

Muuwan wurde auch sicher angezeigt. Dies liegt daran, dass der Zeichencode durch den folgenden Code angegeben wird. Wenn Sie versuchen, dies zu entfernen, treten verstümmelte Zeichen auf.

        //Zeichencode-Spezifikation
	    request.setCharacterEncoding("utf-8");
	    String name = request.getParameter("name");
	    request.setAttribute("userName", name);

Sie können verstümmelte Zeichen auch mit dem folgenden Code entfernen. Laut Referenz scheint das Folgende jedoch veralteter alter Code zu sein, da dies jetzt mit dem obigen Code durchgeführt werden kann. 【Referenz】

	    String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");
	    request.setAttribute("userName", name);

· Bildschirm

Das nächste Mal möchte ich das Bild anzeigen, weil es langweilig ist. Es gibt jedoch kein Beispiel. Also habe ich es geschafft ... Ich möchte die gesamte Referenz lesen. 【Referenz】 ・ Bild in JSP-Seite einfügen

Fügen Sie Ihrem Projekt Bilddateien hinzu

Anzeige auf JSP

Schließlich <img src="${pageContext.request.contextPath}/media/image.png " alt="Tokyo"> Dann wurde die Bilddatei angezeigt.

<body>
	<%= new java.util.Date() %>
	<%= request.getAttribute("foo") %><br/>
	<%= request.getAttribute("userName") %>
	<form method="post" action="./HelloSample">
Gib etwas ein: <input type="text" name="name">
        <button type="submit">Senden</button>
    </form>
	<br/>
    <img src="${pageContext.request.contextPath}/media/image.png " alt="Tokyo">
</body>

image_draw_in_jsp.jpg Ich würde danach gerne Bilder weitergeben, aber. .. .. Mir fehlte immer noch die Kraft.

Zusammenfassung

・ Ich habe mit JSP + Servlet gespielt ・ Ich konnte Japanisch und Bilder anzeigen

・ Bild frei. .. .. Ich möchte das Zeichnen von Objektbewegungen ausprobieren

Ich habe den folgenden Code eingegeben

Recommended Posts

[Einführung in JSP + Servlet] Ich habe eine Weile damit gespielt ♬
[Einführung in JSP + Servlet] Eine kleine Animation ♬
Ich habe versucht, den Block mit Java zu brechen (1)
[Go To Travel] Ich suchte nach einem Plan mit einer Quo-Karte
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe eine Methode entwickelt, um nach Premium Friday zu fragen
Ich möchte eine bestimmte Datei mit WatchService überwachen
Einführung in die Programmierung für Studenten: Erstellen von Canvas
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte es zusätzlich implementieren, während ich Kotlin auf einer Site verwende, auf der Java ausgeführt wird
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe ein Plug-In erstellt, das Jextract mit Gradle-Aufgaben ausführt
Ich war süchtig danach, default_url_options mit der Einführung von Rails zu setzen
Ich habe mit Gem in Ruby nach einem Webframework gesucht
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0
Einführung in die Programmierung für Studenten: Zeichnen Sie gerade Linien
Erste Schritte mit JSP & Servlet
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse
Erstellt eine Methode zum Anfordern von Premium Friday (Java 8-Version)
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
[Für Anfänger] Ich möchte mit einem Auswahlbefehl automatisch vorregistrierte Daten in das Eingabeformular eingeben.
Ich möchte eine Servlet-War-Datei mit OpenJDK unter CentOS7 erstellen. Ohne mvn. Ohne Internetverbindung.
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Ich habe mit Swing eine GUI erstellt
Übergeben von Parametern aus JSP mit Servlet
Einführung in Algorithmen mit der Java-Shakutori-Methode
Ich habe versucht, mit Java zu interagieren
Einführung in die Programmierung für Studenten: Einführung
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte Apache Wicket 8 zusammenfassen, weil es eine gute Idee ist
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Ich überlegte, wie ich es serverlos machen und gleichzeitig die Lieferantenbindung vermeiden könnte
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Es war ein Leben, in dem ich den thread-sicheren assoziativen Zähler zurücksetzen wollte
Ich wollte eine Diashow mit Slick modisch umsetzen.
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen