-1

I'm creating my first JSP servlet and I've got an issue I don't understand. The program is pretty simple

I've got two parts :

  • A java+jsp to add a new line
  • A java+jsp to display those lines

I'm loading the url : http://localhost/test/addUf.jsp

I fill the field, click the button. The database insert is ok and I'm now redirected to http://localhost/test/servletRecord

My issue occurs when it tries to load this page:

05-Mar-2021 12:29:45.046 INFOS [Catalina-utility-1] org.apache.catalina.core.StandardContext.reload Le rechargement de ce contexte est terminé
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:605)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:423)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at servletRecord.doGet(servletRecord.java:71)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:621)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
    ... 37 more
Caused by: java.lang.IllegalArgumentException: Directive de page : valeur invalide pour import
    at org.apache.jasper.compiler.Node$PageDirective.validateImport(Node.java:619)
    at org.apache.jasper.compiler.Node$PageDirective.addImport(Node.java:599)
    at org.apache.jasper.compiler.Parser.parsePageDirective(Parser.java:366)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:478)
    at org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1797)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:141)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
    at org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:127)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
    ... 38 more
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:605)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:423)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at servletRecord.doGet(servletRecord.java:71)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:621)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
    ... 37 more
Caused by: java.lang.IllegalArgumentException: Directive de page : valeur invalide pour import
    at org.apache.jasper.compiler.Node$PageDirective.validateImport(Node.java:619)
    at org.apache.jasper.compiler.Node$PageDirective.addImport(Node.java:599)
    at org.apache.jasper.compiler.Parser.parsePageDirective(Parser.java:366)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:478)
    at org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1797)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:141)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
    at org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:127)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
    ... 38 more

Here are my files: addUF.java

import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.*;
import java.sql.*;
import java.util.*;
import com.microsoft.sqlserver.jdbc.*;

public class addUf extends HttpServlet{ 
 
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        Connection connBDUtil = null;
        
        String id_config = request.getParameter("id_config").toString();
        String uf_code = request.getParameter("uf_code").toString();
        String libelle = request.getParameter("libelle").toString();
        String nbLits = request.getParameter("nbLits").toString();
        String actif = "1";
        if(request.getParameter("actif")== null) actif = "0";
        
        Statement stmt;
        try {SQLServerDataSource ds_BD_util = new SQLServerDataSource();
        
            ds_BD_util.setUser(db.UserBD_util);
            ds_BD_util.setPassword(db.PasswordBD_util);
            ds_BD_util.setServerName(db.ServerNameBD_util);
            ds_BD_util.setPortNumber(db.PortNumberBD_util);
            ds_BD_util.setDatabaseName(db.DatabaseNameBD_util);
            connBDUtil = ds_BD_util.getConnection();                
            
            System.out.println("Connected to the database");
            
            //test de validité
        
            String sqlText = "INSERT INTO LitsConfig (id_config, uf_code, libelle, nbLits, actif) " +
                    "VALUES ('" + id_config + "', '" + uf_code + "', '" + libelle + "', '" + nbLits + "', '" + actif +"')" ;
        
            System.out.println("SQL : " + sqlText);
        
            stmt = connBDUtil.createStatement();
        
            int i = stmt.executeUpdate(sqlText);
            System.out.println("query" + sqlText);
            if(i>0)
            {
                response.sendRedirect("servletRecord");
            }
            connBDUtil.close();
            System.out.println("Disconnected from database");
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

addUF.jsp

<html>
<head></head>
<body>
    <form name="userform" method="post" action="addUf">
    <br><br><br>
        <table align="center" width="300px" style="background-color:#EDF6EA;border:1px solid #000000;">
        <tr><td colspan=2 style="font-weight:bold;" align="center">Ajouter une UF</td></tr>
        <tr><td colspan=2 align="center" height="10px"></td></tr>
            <tr>
                <td style="font-weight:bold;">Id config</td>
                <td><input type="text" name="id_config" value=""></td>
            </tr
            
            <tr>
                <td style="font-weight:bold;">UF</td>
                <td><input type="text" name="uf_code" value=""></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Libellé</td>
                <td><input type="text" name="libelle" value=""></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">Nombre de lits</td>
                <td><input type="text" name="nbLits" value=""></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">actif</td>
                <td><input type="checkbox" name="actif" value=""></td>
            </tr>
            
            <tr>
                <td></td>
                <td><input type="submit" name="Submit" value="Ajouter" style="background-color:#49743D;font-weight:bold;color:#ffffff;"></td>
            </tr>
            <tr><td colspan=2 align="center" height="10px"></td></tr>
        </table>
    </form>
</body>
</html>

servletRecord.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.*;
import java.sql.*;
import java.util.*;
import com.microsoft.sqlserver.jdbc.*;

public class servletRecord extends HttpServlet{ 
 
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
    
        Connection connBDUtil = null;
        
        Statement stmt;
        
        try 
        {   
            SQLServerDataSource ds_BD_util = new SQLServerDataSource();
            
            ds_BD_util.setUser(db.UserBD_util);
            ds_BD_util.setPassword(db.PasswordBD_util);
            ds_BD_util.setServerName(db.ServerNameBD_util);
            ds_BD_util.setPortNumber(db.PortNumberBD_util);
            ds_BD_util.setDatabaseName(db.DatabaseNameBD_util);
            connBDUtil = ds_BD_util.getConnection();
        
            System.out.println("Connected to the database");
            
            ArrayList arrayConfig = null;
            ArrayList litsConfigList = new ArrayList();
            
            String sqlText = "SELECT * FROM LitsConfig ORDER BY libelle";
            System.out.println("sqlText " + sqlText);
            
            stmt = connBDUtil.createStatement();
            ResultSet  rs = stmt.executeQuery(sqlText);

            while(rs.next())
            {
                arrayConfig  = new ArrayList();
            
                arrayConfig.add(rs.getInt(1));      // Id Config
                arrayConfig.add(rs.getString(2));   // Ufs
                arrayConfig.add(rs.getString(3));   // Libellé
                arrayConfig.add(rs.getInt(4));      // Nb Lits
                arrayConfig.add(rs.getInt(5));      // Actif
              
                System.out.println("arrayConfig :: "+arrayConfig);
                litsConfigList.add(arrayConfig);
            }

            request.setAttribute("litsConfigList", litsConfigList);
            
            String nextJSP = "/home.jsp";
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
            dispatcher.forward(request,response);
            
            ConnEasily.close();
            connBDUtil.close();
            System.out.println("Disconnected from database");           
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

home.jsp

<%@ page language="java" import="java.util.*;"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE>Occupation des lits de pédiatrie</TITLE>
  
  <script language="javascript">
    function editrecord(id){       
        window.location.href="editServlet/"+id; 
      }


      function deleteRecord(id){       
        window.location.href="deleteUser/"+id; 
      }
</script>
 </HEAD>

 <BODY>
 <br>
<table align="center">
  
</table>
<br>
  <table width="600px"  align="center" style="background-color:#EDF6EA;border:1px solid #000000;">
    <tr><td colspan=9 align="center" height="10px"></td></tr>

    <tr><td colspan=9 align="center"><a href="addUf.jsp" style="font-weight:bold;color:#cc0000;">Ajouter une configuration d'UF</a></td></tr>
    <tr><td colspan=9 align="center" height="10px"></td></tr>

    <tr style="background-color:#7BA88B;font-weight:bold;">
     <td>Config Id</td>
     <td>Codes UF</td>
     <td>Libellé</td>
     <td>Nombre de lits</td>
     <td>Actif</td>  
     <td>Edit</td>
     <td>Delete</td>
    </tr>
  
    <%
    String bgcolor="";
    int count=0;
    List viewList = new ArrayList();
    Iterator  viewitrLitsConfig;
    
    if(request.getAttribute("litsConfigList")!=null && request.getAttribute("litsConfigList")!="")
    {
        List litsConfigList =  (ArrayList)request.getAttribute("litsConfigList");
        Iterator itrLitsConfig = litsConfigList.iterator();
        
        while(itrLitsConfig.hasNext())
        {
            
            if(count%2==0)
            {
             bgcolor = "#C8E2D1";
            }
            else
            {
                
                bgcolor = "#EAF8EF";
            }
            
            viewList = (ArrayList)itrLitsConfig.next();
            int id = Integer.parseInt(viewList.get(0).toString());
            viewitrLitsConfig = viewList.iterator();
            %>
            <tr style="background-color:<%=bgcolor%>;">
            <%  
            while(viewitrLitsConfig.hasNext())
            {
            
                %>
                <td><%=viewitrLitsConfig.next()%></td>
                
                <%
                    
            }
            count++;
            %>
                <td><input type="button" name="edit" value="Edit" style="background-color:#49743D;font-weight:bold;color:#ffffff;" onclick="editRecord(<%=id%>);" ></td>
                <td><input type="button" name="delete" style="background-color:#ff0000;font-weight:bold;;color:#ffffff;" value="Delete" onclick="deleteRecord(<%=id%>);"></td>
            </tr>
            <%
        }
    }
    if(count==0)
    {
        %>
        <tr><td colspan="9" align="center">&nbsp;</td></tr>
            <tr><td colspan="9" align="center">Aucun enregistrement disponible</td></tr>
        <%
    }
    %>
    <tr><td colspan=9 align="center" height="2px"></td></tr>
  </table>  
 </BODY>
</HTML>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <display-name>Test Config</display-name>
  <description>Test Config</description>
 
 <servlet>
     <servlet-name>servletrecord</servlet-name>
     <servlet-class>servletRecord</servlet-class>
 </servlet>
 <servlet-mapping>
     <servlet-name>servletrecord</servlet-name>
     <url-pattern>/servletRecord</url-pattern>
 </servlet-mapping>


 <servlet>
    <servlet-name>addUf</servlet-name>
    <servlet-class>addUf</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>addUf</servlet-name>
    <url-pattern>/addUf</url-pattern>
 </servlet-mapping>

 <servlet>
  <servlet-name>editservlet</servlet-name>
  <servlet-class>userServlet</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>editservlet</servlet-name>
    <url-pattern>/editServlet/*</url-pattern>
 </servlet-mapping>

 <servlet>
    <servlet-name>edituser</servlet-name>
    <servlet-class>editUser</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>edituser</servlet-name>
    <url-pattern>/editUser</url-pattern>
 </servlet-mapping>

<servlet>
    <servlet-name>deleteuser</servlet-name>
    <servlet-class>deleteUser</servlet-class>
</servlet>
 <servlet-mapping>
    <servlet-name>deleteuser</servlet-name>
    <url-pattern>/deleteUser/*</url-pattern>
 </servlet-mapping>

</web-app>

What am I missing ?

My libs are: ojdbc6.jar servlet-api.jar sqljdbc.jar

Thanks for your help ! Tomcat 9 / Java 8

Pandalex
  • 23
  • 7
  • You have a syntax error in your `page` directive (`import` attribute). Check [this answer](https://stackoverflow.com/q/239147/11748454) for the correct syntax. BTW scriplets `<% ... %>` should be replaced with [EL expressions](https://www.tutorialspoint.com/jsp/jsp_expression_language.htm) and [JSTL](https://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm). All the preparatory work should be done in `servletRecord` (strange name, class names in Java should start with an uppercase letter). – Piotr P. Karwasz Mar 05 '21 at 14:46
  • Thx, it worked. Regarding the uppercase for the class name, I agree, this was from a tutorial and I didn't rewrite it. I read your links on EL expressions and JSTL but I didn"t grasp the concept behind. Could you show me how to translate part of my code to JSTL so that I can understand ? – Pandalex Mar 08 '21 at 13:27

1 Answers1

0

The message is due to the import="java.util.*;" attribute, which should be import="java.util.*" (cf. this answer).

However, since JSP 2.0, using scriplets <% … %> is discouraged in favor of EL expressions ${ … } and JSTL tags. Assuming you have a JavaBean class like this:

public class LitsConfig {

    private int     id;
    private String  codeUf;
    private String  libelle;
    private int     noLits;
    private boolean actif;

    // getters and setters
    ...
}

to represent your row data and assuming your servlet puts an attribute named "litsConfig" of type List<LitsConfig> into the request context, you can simplify your JSP page like this:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
table.main {
    width: 600px;
    margin: auto;
    background-color: #EDF6EA;
    border: 1px solid #000000;
}
tr.header {
    background-color: #7BA88B;
    font-weight: bold;
}
tr.data:nth-child(odd) {
    background-color: #C8E2D1;
}
tr.data:nth-child(even) {
    background-color: #EAF8EF;
}
</style>
</head>
<body>
  <table class="main">
    <tr class="header">
      <td>Config Id</td>
      <td>Codes UF</td>
      <td>Libellé</td>
      <td>Nombre de lits</td>
      <td>Actif</td>
      <td>Edit</td>
      <td>Delete</td>
    </tr>
    <!--
     Iterates over each element of the request attribute `litsConfig`.
     The element is available as the page attribute `lit`.
     -->
    <c:forEach items="${litsConfig}" var="lit">
      <tr class="data">
        <td>${lit.id}</td>
        <td>${lit.codeUf}</td>
        <td>${lit.libelle}</td>
        <td>${lit.noLits}</td>
        <td>${lit.actif ? "oui" : "non" }</td>
        <td><a href="${contextPath}/editServlet/${lit.id}">Éditer</a></td>
        <td><a href="${contextPath}/deleteUser/${lit.id}">Effacer</a></td>
      </tr>
    </c:forEach>
    <!-- Adds a row if `litsConfig` is empty (or not defined) -->
    <c:if test="${fn:length(litsConfig) == 0}">
      <tr>
        <td colspan="9" align="center">Aucun enregistrement disponible</td>
      </tr>
    </c:if>
  </table>
</body>
</html>

Remark: you'll need to add taglibs-standard-spec.jar and taglibs-standard-impl.jar to your dependencies.

Piotr P. Karwasz
  • 12,857
  • 3
  • 20
  • 43
  • Thx a lot :) If I get this right, the idea is to use a java object to mimic my table instead of a generic array ? – Pandalex Mar 24 '21 at 14:10
  • The main idea is to replace Java code in the JSP entirely (cf. [this answer]). The use of [JavaBeans](https://en.wikipedia.org/wiki/JavaBeans) is just a way to make the JSP more readable. – Piotr P. Karwasz Mar 24 '21 at 21:05