Faisons quelque chose en utilisant Java Servlet ** pour les devoirs scolaires! Une histoire comme ** est arrivée, c'est donc l'histoire.
J'utilise beaucoup Laravel, et j'ai senti qu'il pouvait être utilisé comme ça, donc je vais le présenter tout en le rendant compatible.
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);
}
}
Vous pouvez acheminer avec l'annotation @ WebServlet
.
En outre, il n'est pas possible de réécrire web.xml
et de le router, mais c'est gênant car la quantité d'écriture augmente un peu.
La méthode doGet
est traitée en réponse à la requête HTTP GET.
request
contient les éléments nécessaires tels que les paramètres et les en-têtes de demande.
Puisque response
a getWriter ()
, vous pouvez également effectuer un rendu à partir de Servlet.
Ajoutez un paramètre en interne (?) Avec request.setAttribute (" attributeName ", value)
et utilisez request.getRequestDispatcher (" /path/to/page.jsp ")
etc. pour utiliser d'autres servlets Le traitement peut être transféré vers JSP. Vous pouvez l'obtenir en faisant request.getAttribute (" attributeName ")
à la destination.
Vous pouvez transmettre n'importe quel request.setAttribute (String, obj)
.
La valeur de retour de request.getAttribute (String)
est de type Object, vous devez donc recevoir la valeur et la remonter.
Il y a aussi doPost ()
, doPut ()
, doDelete ()
, etc., donc vous pouvez facilement créer une API REST à la place.
<%@ 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="Liste des fils"/>
</jsp:include>
<body class="bg-light">
<jsp:include page="/WEB-INF/jsp/views/base/navber.jsp"/>
<div class="container">
<h1 class="font-weight-bold">Liste des fils</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>
Vous pouvez incorporer d'autres JSP à l'aide de <jsp: include page =" path / to / page.jsp "/>
. Cette intégration ressemble à ajouter le JSP d'un autre fichier tel quel et à le rendre, vous pouvez donc l'utiliser comme un composant de fichier unique de Vue.js.
Vous pouvez également passer des paramètres en utilisant la balise <jsp: param>
comme élément enfant de la balise <jsp: include>
.
Ceci est synonyme de «request.setAttribute ()» de Servlet, et est lu à partir de la JSP intégrée à l'aide de «request.getAttribute ()».
Comme `
De plus, la syntaxe du modèle (qui ne semble pas correcte) utilise la syntaxe Java telle quelle. Il ne nécessite aucun effort pour apprendre la nouvelle syntaxe de modèle, mais ce n'est pas aussi simple que Flask, et j'ai eu l'impression que c'était compliqué.
De plus, comme vous pouvez utiliser n'importe quelle syntaxe Java, vous pouvez écrire n'importe quoi dans JSP. Si vous ne vous pesez pas, cela ressemblera à PHP, vous devez donc faire attention.
... Je ne m'arrêterais pas si je faisais tout avec JSP.
De plus, le répertoire WEB-INF /
est un répertoire inaccessible depuis un navigateur.
Les JSP qui sont incorporées ou sont supposées être utilisées par les répartiteurs doivent être placées dans le répertoire WEB-INF /
.
Le filtre peut intervenir sur le traitement avant d'être transmis à la classe acheminée. Par exemple, si vous n'êtes pas connecté, vous pouvez rediriger vers la page de connexion ou corriger le codage des caractères.
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 {
}
}
La partie de filtrage importante est doFilter ()
.
L'argument req
peut également être converti dans la classe HttpServletRequest
.
Je ne l'ai pas étudié en détail, donc je n'en sais plus, mais je pense que je peux en profiter de différentes manières.
Pour que Filter fonctionne, spécifiez <url-pattern>
dans le fichier web.xml
.
Java EE n'a pas de CLI comme l'artisan de Laravel, et aucun modèle de conception n'est pris en compte. Par conséquent, vous devez concevoir vous-même la partie dite «modèle» utilisée par Servlet, JSP et Filter.
Avec l'assaisonnement ici, vous pourrez créer l'ensemble de l'application avec votre architecture préférée. Puisque vous devez construire votre propre architecture préférée, cela prend du temps et des responsabilités pour le programmeur.
Après tout, la plupart des applications Web sont exploitées en empruntant les fonctions du serveur Web. Flask of Python a un serveur pour le moment, mais lorsque vous le faites dans un environnement de production, il est principalement lié à un serveur Web avec uWSGI, et je pense qu'il est acceptable d'utiliser Tomcat, etc.
Si vous êtes habitué à quelque chose de pratique comme Laravel, vous le trouverez gênant avec tout simplement Java EE.
Si vous souhaitez améliorer le frontal, vous devez définir le pack Web et le nœud par vous-même, et comme il n'y a pas de fonction telle que le système d'authentification ou la protection CSRF, vous devez programmer vous-même. De plus, étant donné que JSP n'a pas de fonction d'échappement, il existe un danger de XSS.
Je ne pense pas que ce soit une comparaison car ils ont été faits à des époques différentes.
Cependant, comme la session était assez facile et facile à gérer, cela peut ne pas poser de problème dans les cas où vous n'avez pas besoin d'un système d'authentification, mais que vous souhaitez identifier l'utilisateur qui accède dans une certaine mesure.
Mais quand il s'agit de bouger longtemps ...
La dernière version de Java EE semble être le 21 septembre 2017. [^ 1]
Et Tomcat. Lorsque j'ai spécifié JDK 13 pour exécuter Tomcat 8.5.47, j'ai reçu une erreur indiquant qu'il n'est pas pris en charge. En spécifiant JRE 1.8, je fais avancer les choses, mais je suis inquiet.
Je n'ai pas essayé Tomcat 9 [^ 2], alors peut-être qu'il est pris en charge.
Je pensais que ce serait inévitable de le faire dans la conférence, mais je pensais que Servlet était bien fait. Cependant, je souhaite utiliser Laravel car il a plus de fonctions et est plus facile à réaliser! Je n'ai pas réfléchi.
Recommended Posts