Kannst du es machen? Java EE

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.

Servlet steht wie ein Controller

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.

JSP kann wie eine Template-Engine verwendet werden

<%@ 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 in Vue.js scheint es schwierig zu sein, den Umriss der Benutzeroberfläche als eine JSP zu verwenden und View als untergeordnetes Element darin zu platzieren.

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.

Filter fühlt sich an wie Middleware

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 "" in der Datei "web.xml" an, damit Filter funktioniert.

Lassen Sie uns unser Bestes tun, um die Modellebene zu entwerfen

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.

Impressionen

Der Aufwand für die Bereitstellung ist ähnlich

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.

Es ist viel Arbeit

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

Ich mache mir Sorgen um die Wartungssituation

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.

Zusammenfassung

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

Kannst du es machen? Java EE
Sie können es mit Kopie tun! Aspektorientierte Programmierung (Android)
[Java] Können Sie dieses Phänomen erklären?
Verwenden Sie Stream in Java?
[Gute Nachrichten] Sie können immer noch mit Java 8 gehen !!
Benötigen Sie eine speicherbewusste Implementierung von Java?
[Auch Anfänger können es schaffen! ] So erstellen Sie eine Java-Umgebung unter Windows 10 (JDK14.0.1)
[JavaScript] Java-Programmierer! Sie können das Schließen von JavaScript sehr leicht verstehen!
[Auch Anfänger können es schaffen! ] Wie man Javadoc schreibt
Kennst du Decorator?
Sie können dies sofort mit Serverless Framework Serverless mit AWS tun (API + Lambda [Java] ist einfach einzurichten).
[Auch Anfänger können es schaffen! ] So installieren Sie Eclipse unter Windows 10 (Java-Umgebungskonstruktion)
Unerwartet unbekannte Java-Zusammenfassung für reservierte Wörter
Es ist Winter, aber willst du ein Feuerwerk? ?? Dann implementieren Sie es
Ich kann es lesen! RxJava
Aktivieren Sie Java EE mit NetBeans 9
[Java] Mach es konstant
Java-Thread sicher für Sie