[JAVA] Erste Schritte mit JSP & Servlet

Einführung

Informationen zum Einrichten der Entwicklungsumgebung finden Sie unter Super Basic-Verwendung von Eclipse - Qiita.

Lassen Sie uns zunächst die Funktionsweise von Servlet und JSP überprüfen. (Dieser Beitrag) Danach werde ich die Grundlagen der Entwicklung von Webanwendungen durch JSP & Servlet durch die Entwicklung von TODO-Anwendungen erläutern. (Nächstes Mal)

Ein Projekt erstellen

1 2 3
Ein Projekt erstellen(1) EinProjekterstellen(2) EinProjekterstellen(3)

HelloServlet erstellen

Erstellen Sie zunächst ein sehr einfaches Servlet, um den Vorgang zu überprüfen.

Erstellen einer Servlet-Klasse

Servlet ausführen

1 2 3
Screenshot 2017-06-22 14.51.48.png Screenshot2017-06-2214.52.29.png Screenshot2017-06-2214.53.09.png

Index.jsp erstellen

Überprüfen Sie als Nächstes die Funktionsweise von JSP.

Erstellen einer JSP-Datei

index.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>

Greifen Sie mit dem in Eclipse integrierten Browser oder dem normalerweise verwendeten Browser auf http: // localhost: 8080 / TodoServlet / zu.

スクリーンショット 2017-06-22 15.13.18.png

Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v1.0.0


Wir haben die Erstellungsmethode und den Betrieb von Servlet und JSP bestätigt. Eclipse erstellt Vorlagen für Klassen und Dateien. Sie können also anscheinend eine Webanwendung erstellen, indem Sie sie ausarbeiten.


Zusammenarbeit zwischen Servlet und JSP

JSP wird von Tomcat in Servlet konvertiert und ausgeführt. Daher sollte das, was Sie mit Servlet tun können, grundsätzlich mit JSP möglich sein.

Wenn Sie jedoch die detaillierte Logik in die JSP einfügen, die den Code in HTML einbettet, wird der Quellcode bald unklar.

Durch die Aufteilung der Rollen werden sich die Aussichten verbessern und die Entwicklung wird reibungslos verlaufen.

Ich werde anhand eines einfachen Beispiels erklären, wie Servlet und JSP verknüpft werden.

Von Servlet an JSP weiterleiten

Implementieren Sie es zunächst so, dass das Servlet die Anforderung einfach empfängt und den Inhalt der JSP zurückgibt.

Verschieben Sie index.jsp

Verschieben Sie index.jsp unter WEB-INF, damit nicht direkt auf die JSP zugegriffen wird. In Zukunft werden wir einen Ordner "WEB-INF / view" erstellen und die JSP-Dateien darunter ablegen, damit die Verwaltung bei mehreren JSP-Dateien einfacher wird.

HelloServlet-Fix

Wenn ein Client (Browser) eine Anfrage an "HelloServlet" stellt, wird die "doGet" -Methode ausgeführt.

Sie können die Methode "RequestDispatcher # forward" verwenden, um die Verarbeitung auf ein anderes Servlet oder eine andere JSP zu übertragen.

Dieses Mal wird eine Anfrage an / HelloServlet an WEB-INF / view / index.jsp weitergeleitet.

HelloServlet.java



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

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

	dispatcher.forward(request, response);
}

Zeigen Sie die Serveransicht an und starten Sie Tomcat neu

Tomcat wird neu gestartet, damit die Servlet-Änderungen wirksam werden.

Gehen Sie mit Ihrem Browser zu "http: // localhost: 8080 / TodoServlet / HelloServlet" und überprüfen Sie, ob Sie den Inhalt von "index.jsp" sehen können.

Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v2.0.0

Übergeben Sie Werte von Servlet an JSP

Verwenden Sie die Methode HttpServletRequest # setAttribute, um Werte vom Servlet an die JSP zu übergeben.

Setzen Sie den Schlüssel im ersten Argument und den Wert im zweiten Argument.

HelloServlet.java


/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Übergeben Sie eine entsprechende Zeichenfolge an JSP
	request.setAttribute("foo", "bar");

	//An JSP weiterleiten
	String view = "/WEB-INF/view/index.jsp";
	RequestDispatcher dispatcher = request.getRequestDispatcher(view);

	dispatcher.forward(request, response);
}

Der Wert "setAttribute" im Servlet kann mit der Methode "request.getAttribute" in der JSP abgerufen werden.

Das Objekt "request" ist in der JSP ohne besondere Deklaration verfügbar.

index.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>
	<%= request.getAttribute("foo") %>
</body>
</html>

Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v2.1.0

Referenz: EL-Typ

Abkürzung für * Expression Language *. Der Ausdruck wird ausgewertet und ausgegeben, indem "$ {...}" geschrieben wird.

Klicken Sie hier für eine detaillierte Erklärung> [Für Anfänger] EL-Formel --Qiita

Im EL-Ausdruck können Sie den Wert erhalten, indem Sie die Beschreibung von "request.getAttribute" weglassen.

index.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>
	${foo}
</body>
</html>

Übergeben Sie Werte von JSP an Servlet

Platzieren Sie ein Textfeld in der JSP und lassen Sie das Servlet den eingegebenen Wert empfangen.

Verwenden Sie die Tags "form" und "input", um Eingaben des Benutzers in JSP zu akzeptieren.

index.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>
	<%= request.getAttribute("foo") %>

	<form method="post" action="./HelloServlet">
Gib etwas ein: <input type="text" name="hoge">
		<button type="submit">Senden</button>
	</form>
</body>
</html>

Gibt an, welche HTTP-Methode verwendet werden soll, wenn die Schaltfläche "Senden" im Attribut "Methode" des Tags "Formular" gedrückt wird. Sie werden "get" oder "post" verwenden.

Das Attribut "Aktion" gibt die Ziel-URL an. Es ist besser, den Pfad relativ zur aktuell im Browser angezeigten URL anzugeben. Wenn Sie einen absoluten Pfad angeben, ist es schwierig, Fälle zu behandeln, in denen sich die URL zwischen der Produktionsumgebung und der Entwicklungsumgebung unterscheidet.

Da die Methode "get" verwendet wird, wenn eine Anforderung vom Browser eingeht, verwenden Sie die Methode "post", um Daten aus dem Formular zu empfangen.

Verwenden Sie das Tag "input", um das Textfeld anzuzeigen.

Wenn das Attribut "type" des Tags "button" "submit" ist, wird das Tag "form" in der HTTP-Methode verwendet, die durch das Attribut "method" für die URL angegeben wird, die im Attribut "action" des Formulars "angegeben" ist, wenn auf die Schaltfläche geklickt wird. Sendet den Wert jedes Elements in.

HelloServlet.java


/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
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);
}

Wenn der Benutzer auf die Schaltfläche klickt, wechselt der Prozess zur Methode "doPost".

Der in form eingegebene Wert kann mit der Methode HttpServletRequest # getParameter abgerufen werden. Geben Sie im Argument das Attribut name des Tags input an.

Dieses Mal erhalte ich den Wert "name =" hoge "", gebe ihn an die Konsole aus und führe dann die Methode "doGet" aus.

Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v2.2.0

JSP -> Servlet -> JSP

Implementieren wir ein webanwendungsähnliches Verhalten, indem wir die Zusammenarbeit von JSP zu Servlet und die Zusammenarbeit von Servlet zu JSP kombinieren.

  1. Wenn Zugriff besteht GET "Hallo, Gast-San!" Um die Nachricht anzuzeigen, das Namenseingabeformular
  2. Geben Sie den Namen ein und klicken Sie auf die Schaltfläche "Senden", um die Eingabe an Servlet zu senden.
  3. Ersetzen Sie "Gast" durch den POST-Namen, um das Formular auszublenden

Vorbereiten des Namens-Eingabeformulars

Bereiten Sie zuerst die Nachricht und das Namenseingabeformular von "Hallo" vor.

index.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>
Hallo,<%= request.getAttribute("userName") %>San!

	<form method="post" action="./Hello">
Bitte geben Sie Ihren Namen ein: <input type="text" name="name">
		<button type="submit">Senden</button>
	</form>
</body>
</html>

Variable Initialisierung beim ersten Zugriff

Da "Guest" beim ersten Zugriff mit GET angezeigt werden soll, setzen Sie "Guest" auf "userName".

HelloServlet.java


/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	request.setAttribute("userName", "Guest");

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

Eingangsdaten empfangen

Erhält den im Formular eingegebenen Namen und aktualisiert "Benutzername".

Beim Umgang mit Sprachen wie Japanisch, Chinesisch und Koreanisch (nach dem Akronym Chinesisch, Japanisch, Koreanisch oder CJKV durch Hinzufügen von Vietnamesisch CJK genannt) werden Zeichen verstümmelt, wenn der Zeichencode nicht richtig angegeben wird. Bitte beachten Sie, dass es auftreten wird.

HelloServlet.java


/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Zeichencode-Spezifikation
	request.setCharacterEncoding("utf-8");
	//Holen Sie sich Wert aus dem Formular
	String name = request.getParameter("name");

	request.setAttribute("userName", name);

	doGet(request, response);
}

Anzeige der Eingabedaten

Setzen Sie "Gast" nur, wenn "Benutzername" "null" oder leer ist.

HelloServlet.java


/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	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);
}

Eingabeformular ausblenden

Sobald Sie Ihren Namen eingegeben haben, benötigen Sie kein Eingabeformular und blenden es aus. Macht das Eingabeformular nur sichtbar, wenn "Benutzername" "Gast" ist.

index.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>
	<% String userName = (String) request.getAttribute("userName"); %>
Hallo,<%= userName %>San!

	<% if ("Guest".equals(userName)) { %>
	<form method="post" action="./HelloServlet">
Bitte geben Sie Ihren Namen ein: <input type="text" name="name">
		<button type="submit">Senden</button>
	</form>
	<% } %>
</body>
</html>

Funktionsprüfung

1 2
Screenshot 2017-06-27 10.19.16.png Screenshot2017-06-2710.19.31.png

Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v2.3.0

XSS-Schwachstellen (Cross-Site Scripting)

Tatsächlich ist die Webanwendung, die wir gerade erstellt haben, anfällig für Cross-Site-Scripting (XSS). XSS * bettet ein schädliches Skript in die Website eines anderen ein *.

Geben Sie tatsächlich "

Recommended Posts

Erste Schritte mit JSP & Servlet
Erste Schritte mit Ruby
Erste Schritte mit Swift
Erste Schritte mit Doma-Transaktionen
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit Java Collection
Erste Schritte mit Java Basics
Erste Schritte mit Spring Boot
Erste Schritte mit Ruby-Modulen
Erste Schritte mit Java_Kapitel 5_Praktische Übungen 5_4
Übergeben von Parametern aus JSP mit Servlet
[Google Cloud] Erste Schritte mit Docker
Hallo Welt mit GlassFish 5.1 + Servlet + JSP
Erste Schritte mit Docker mit VS-Code
Erste Schritte mit dem Doma-Criteria API Cheet Sheet
Erste Schritte mit Ruby für Java-Ingenieure
Erste Schritte mit Docker für Mac (Installation)
Einführung in den Parametrisierungstest in JUnit
Einführung in Java ab 0 Teil 1
Beginnen Sie mit der Funktionsweise von JVM GC
Erste Schritte mit dem Language Server Protocol mit LSP4J
Erste Schritte mit dem Erstellen von Ressourcenpaketen mit ListResoueceBundle
Erste Schritte mit Java_Kapitel 8_Über "Instanzen" und "Klassen"
Erste Schritte mit der Doma-Projektion mit der Criteira-API
Erste Schritte mit Java 1 Ähnliche Dinge zusammenstellen
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Erste Schritte mit Doma-Using Joins mit der Criteira-API
Erste Schritte mit Doma-Einführung in die Kriterien-API
Ich habe versucht, mit Gradle auf Heroku zu beginnen
Über [Servlet] [JSP] [Tomcat]
Beginnen Sie mit Gradle
Erste Schritte mit Java-Programmen mit Visual Studio Code
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Memo zur Entwicklung von Webanwendungen mit MVN, Tomcat, JSP / Servlet mit VScode
Erste Schritte mit Reactive Streams und der JDK 9 Flow API
Beginnen Sie mit Spring Boot
Zeichnen einer Java-Servlet / JSP-Ansicht
JSP-Fehleranzeige vom Servlet
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
Abschließende Zukunft Erste Schritte (Erste Zukunft)
Erste Schritte mit der Git Hub Container Registry anstelle von Docker Hub
Vergleich der WEB-Anwendungsentwicklung mit Rails und Java Servlet + JSP
Erstellen Sie eine Memo-App mit Tomcat + JSP + Servlet + MySQL mit Eclipse
Fassen Sie die wichtigsten Punkte für den Einstieg in JPA zusammen, die Sie mit Hibernate gelernt haben
Einführung in Swift / C Bridge mit der Geschichte der Portierung von Echo Server mit libuv
[Einführung in JSP + Servlet] Ich habe eine Weile damit gespielt ♬
Beginnen wir mit der parallelen Programmierung
Verwendung des Bereichs (JSP & Servlet)
Java Servlet / JSP-Anforderungsbereich Teil 1
Wie fange ich mit schlank an?
Java Servlet / JSP-Anforderungsbereich Teil 2
Über das Hochladen von Bildern von jsp (Servlet)
CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)
Die Nachrichtenkooperation begann mit Spring Boot
Erste Schritte mit Micronaut 2.x ~ Native Build und Bereitstellung für AWS Lambda ~
Erste Schritte mit maschinellem Lernen mit Spark "Preisschätzung" # 1 Laden von Datensätzen mit Apache Spark (Java)