Lassen Sie uns etwas mit Java Servlet ** für Schulaufgaben machen! Eine Geschichte wie ** kam herein, das ist also die Geschichte.
Ich benutze Laravel sehr oft und ich hatte das Gefühl, dass es so verwendet werden könnte, also werde ich es einführen, während ich es kompatibel mache.
package servlets;
import models.Room;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet("/")
public class RoomServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Room> rooms;
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
rooms = Room.index();
} catch (SQLException | ClassNotFoundException e) {
request.setAttribute("error", e);
request.getRequestDispatcher("/WEB-INF/jsp/views/rooms/room-list.jsp").forward(request, response);
return;
}
request.setAttribute("rooms", rooms);
request.getRequestDispatcher("/WEB-INF/jsp/views/rooms/room-list.jsp").forward(request, response);
}
}
Sie können mit der Annotation "@ WebServlet" routen. Außerdem ist es nicht möglich, "web.xml" neu zu schreiben und weiterzuleiten, aber es ist problematisch, weil der Schreibaufwand etwas zunimmt.
Die "doGet" -Methode verarbeitet als Antwort auf die HTTP-Anforderung GET.
request
enthält die erforderlichen Elemente wie Parameter und Anforderungsheader.
Da response`` getWriter ()
hat, können Sie auch aus Servlet rendern.
Fügen Sie intern einen Parameter (?) Mit "request.setAttribute (" attributeName ", value)" hinzu und verwenden Sie "request.getRequestDispatcher (" /path/to/page.jsp ")" usw., um andere Servlets zu verwenden Die Verarbeitung kann auf JSP übertragen werden. Sie können es erhalten, indem Sie am Ziel "request.getAttribute (" attributeName ")" ausführen.
Sie können jedes "request.setAttribute (String, obj)" übergeben. Da der Rückgabewert von "request.getAttribute (String)" vom Typ "Objekt" ist, muss der Wert empfangen und gesendet werden.
Es gibt auch "doPost ()", "doPut ()", "doDelete ()" usw., sodass Sie stattdessen einfach eine REST-API erstellen können.
<%@ page import="models.Room" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<jsp:include page="/WEB-INF/jsp/views/base/head.jsp">
<jsp:param name="title" value="Thread-Liste"/>
</jsp:include>
<body class="bg-light">
<jsp:include page="/WEB-INF/jsp/views/base/navber.jsp"/>
<div class="container">
<h1 class="font-weight-bold">Thread-Liste</h1>
<% if (request.getAttribute("error") != null) {
Exception e = (Exception) request.getAttribute("error");
%>
<div class="text-danger">
<%=e.getMessage()%>
</div>
<% } else {
List<Room> rooms = (List<Room>) request.getAttribute("rooms");
%>
<div class="row">
<%
for (Room it : rooms) {
request.setAttribute("room", it);
%>
<div class="col-12 mb-3">
<jsp:include page="/WEB-INF/jsp/components/room-card.jsp"/>
</div>
<% } %>
</div>
<% } %>
</div>
</body>
</html>
Sie können andere JSPs mit <jsp: include page =" path / to / page.jsp "/>
einbetten. Beim Einbetten wird die JSP einer anderen Datei so wie sie ist hinzugefügt und gerendert, sodass Sie sie wie eine einzelne Dateikomponente von Vue.js verwenden können.
Sie können Parameter auch übergeben, indem Sie das Tag <jsp: param>
als untergeordnetes Element des Tags <jsp: include>
verwenden.
Dies ist gleichbedeutend mit "request.setAttribute ()" von Servlet und wird mit "request.getAttribute ()" aus der eingebetteten JSP gelesen.
Wie bei
Außerdem verwendet die Vorlagensyntax (die nicht korrekt zu sein scheint) die Java-Syntax wie sie ist. Das Erlernen der neuen Vorlagensyntax erfordert keinen Aufwand, ist aber nicht so einfach wie Flask, und ich hatte den Eindruck, dass es chaotisch war.
Da Sie jede Java-Syntax verwenden können, können Sie auch alles in JSP schreiben. Wenn Sie sich nicht beschweren, sieht es wie PHP aus, also sollten Sie vorsichtig sein.
... Ich würde nicht aufhören, wenn ich alles mit JSP machen würde.
Das Verzeichnis "WEB-INF /" ist auch ein Verzeichnis, auf das über einen Browser nicht zugegriffen werden kann.
JSPs, die eingebettet sind oder von Dispatchern verwendet werden sollen, sollten im Verzeichnis WEB-INF /
abgelegt werden.
Der Filter kann in die Verarbeitung eingreifen, bevor er an die geroutete Klasse übergeben wird. Wenn Sie beispielsweise nicht angemeldet sind, können Sie zur Anmeldeseite umleiten oder die Zeichenkodierung korrigieren.
package filters;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "CharacterEncodingFilter")
public class CharacterEncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
Der wichtige Filterteil ist "doFilter ()". Das Argument "req" könnte auch in die Klasse "HttpServletRequest" übertragen werden.
Ich habe es nicht im Detail untersucht, daher weiß ich es nicht mehr, aber ich denke, ich kann es auf verschiedene Arten genießen.
Geben Sie "
Java EE hat keine CLI wie Laravels Handwerker und es werden keine Entwurfsmuster berücksichtigt. Daher müssen Sie das sogenannte "Modell" -Teil, das von Servlet, JSP und Filter verwendet wird, selbst entwerfen.
Mit dem Gewürz hier können Sie die gesamte Anwendung mit Ihrer Lieblingsarchitektur erstellen. Da Sie Ihre eigene Lieblingsarchitektur erstellen müssen, braucht der Programmierer Zeit und Verantwortung.
Schließlich werden die meisten Web-Apps durch Ausleihen der Funktionen des Webservers betrieben. Flask of Python hat derzeit einen Server, aber wenn es in einer Produktionsumgebung ausgeführt wird, ist es meistens mit einem Webserver mit uWSGI verbunden, und ich denke, dass es akzeptabel ist, Tomcat usw. zu verwenden.
Wenn Sie an etwas Praktisches wie Laravel gewöhnt sind, werden Sie es mit einfachem Java EE als problematisch empfinden.
Wenn Sie das Front-End verbessern möchten, müssen Sie das Webpack und den Knoten selbst festlegen. Da es keine Funktion wie Authentifizierungssystem oder CSRF-Schutz gibt, müssen Sie selbst programmieren. Da JSP keine Escape-Funktion hat, besteht außerdem die Gefahr von XSS.
Ich denke nicht, dass es ein Vergleich ist, weil sie zu unterschiedlichen Zeiten gemacht wurden.
Da die Sitzung jedoch recht einfach und leicht zu handhaben war, ist sie möglicherweise kein Problem, wenn Sie kein Authentifizierungssystem benötigen, aber den zugreifenden Benutzer bis zu einem gewissen Grad identifizieren möchten.
Aber wenn es darum geht, sich lange zu bewegen ...
Die neueste Version von Java EE scheint der 21. September 2017 zu sein. [^ 1]
Und Tomcat. Als ich JDK 13 für die Ausführung von Tomcat 8.5.47 angegeben habe, wurde die Fehlermeldung angezeigt, dass es nicht unterstützt wird. Durch die Angabe von JRE 1.8 werde ich Dinge erledigen, aber ich mache mir Sorgen.
Ich habe Tomcat 9 [^ 2] noch nicht ausprobiert, daher wird es möglicherweise unterstützt.
Ich dachte, es wäre unvermeidlich, dies in der Vorlesung zu tun, aber ich dachte, Servlet sei gut gemacht. Ich möchte jedoch Laravel verwenden, da es mehr Funktionen hat und einfacher zu erstellen ist! Ich habe nicht gedacht.
Recommended Posts