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)
TodoServlet
--Ziellaufzeit: Tomcat8 (Java8)
1 | 2 | 3 |
---|---|---|
Erstellen Sie zunächst ein sehr einfaches Servlet, um den Vorgang zu überprüfen.
todo.controller
--Klassenname: HelloServlet
Served at: / TodoServlet
angezeigt wird, kann Servlet normal ausgeführt werden.1 | 2 | 3 |
---|---|---|
Überprüfen Sie als Nächstes die Funktionsweise von JSP.
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.
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.
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.
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
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.
view
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);
}
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
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
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>
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.
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>
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);
}
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);
}
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);
}
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>
1 | 2 |
---|---|
Bisheriger Quellcode: Kazunori-Kimura / todo-servlet at v2.3.0
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