JSP: pagina inclusa con request.getParameter() da errore 500

di il
6 risposte

JSP: pagina inclusa con request.getParameter() da errore 500

Salve,

Da molto tempo che non scrivo su questo forum, ansi, si può dire che lo perso proprio di vista, comunque lasciamo perdere ora e passiamo al mio problema.

Sto iniziando a studiare JSP ( per poi passare al JEE ), vorrei poter fare una pagina con contenuto incluso a seconda del parametro passato via GET, un po come si fa con php con il comando include($_GET["pagina"] . ".php"), e per realizzarlo ho scritto questo codice:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jCommerce</title>
<link rel="stylesheet" href="css/main.css" media="screen" />
</head>
<body>
   <header>
     <font color="blue">l</font><font color="#030142">Ogo</font>
     <div id="user-area">
        <a href="index.jsp?page=login">Log in</a>
     </div>
   </header>
   <main>
      <%
      if (request.getParameter("page") != null) {
    	  %>
    	  <jsp:include page="pages/<%=request.getParameter("page") %>.jsp"></jsp:include>
    	  <%
      }
      %>
   </main>
</body>
</html>
Il problema è ché, quanto la eseguo sul mio application server ( tomcat10), mi ristituisce errore 500 con la sequente eccessione:
org.apache.jasper.JasperException: /index.jsp (line: [19], column: [61]) equal symbol expected
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:292)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:98)
	org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:227)
	org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:162)
	org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:153)
	org.apache.jasper.compiler.Parser.parseInclude(Parser.java:861)
	org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1128)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1468)
	org.apache.jasper.compiler.Parser.parse(Parser.java:138)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:206)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:391)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:367)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:351)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
	jakarta.servlet.http.HttpServlet.service(HttpServlet.java:774)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Da cosa può dipendere? dove sbaglio?

6 Risposte

  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    sevenjeak ha scritto:


        	  <jsp:include page="pages/<%=request.getParameter("page") %>.jsp"></jsp:include>
    Il problema è ché, quanto la eseguo sul mio application server ( tomcat10), mi ristituisce errore 500 con la sequente eccessione:

    org.apache.jasper.JasperException: /index.jsp (line: [19], column: [61]) equal symbol expected
    No, non puoi mettere <%= %> "in mezzo" ad altre parti letterali. Se vuoi usare <%= %> devi rendere tutto il valore una expression. E oltretutto bisogna mettere gli apici singoli per l'attributo page.
    <jsp:include page='<%= "pages/" + request.getParameter("page") + ".jsp" %>'></jsp:include>
                      ?                                                       ?
    E c'è anche un altro modo (più compatto), ovvero usando l'Expression Language:
    <jsp:include page="pages/${param.page}.jsp"></jsp:include>
    Sappi comunque che questo non è buon approccio, perché il client può tentare e richiedere di includere il file che vuole e questo di per sé è un bel "buco di sicurezza". L'unica cosa che nel tuo caso "salva" un po' è il fatto che hai fissato .jsp dietro, quindi non si può chiedere davvero qualunque file. Ma comunque non è buono lo stesso.

    sevenjeak ha scritto:


    Sto iniziando a studiare JSP ( per poi passare al JEE )
    P.S.: JSP è JavaEE (perlomeno riguarda la parte dei web component)

    P.S.2: dato che parli di Tomcat 10, attenzione, perché supporta JakartaEE, che si differenzia da JavaEE principalmente per il cambio del package principale che da javax.**** diventa jakarta.****
    Si tratta di una grossa "rottura" con il passato, vecchie webapp non funzionano con Tomcat 10 e le nuove webapp con JakartaEE non funzionano con vecchi Tomcat.
  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    Ok, grazie per la risposta, ho optato per le expression language e funziona.

    andbin ha scritto:


    Sappi comunque che questo non è buon approccio, perché il client può tentare e richiedere di includere il file che vuole e questo di per sé è un bel "buco di sicurezza". L'unica cosa che nel tuo caso "salva" un po' è il fatto che hai fissato .jsp dietro, quindi non si può chiedere davvero qualunque file. Ma comunque non è buono lo stesso.
    Non ho ben capito, in che senso è un problema di sicurezza.
  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    Immagina di non aver aggiunto alla fine ".jsp" e che l'account che esegue la tua web app abbia accesso completo al file system ;

    ecco che modificando ad arte il parametro 'page' della richiesta http può includere nella risposta un file con dati sensibili
    che sarebbero visualizzati nel suo browser
  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    Veramente io avevo pensato anche di inserire un controllo sull'esistenza della pagina prima di eseguire l'include. comunque grazie per la risposta, o capito
  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    sevenjeak ha scritto:


    Veramente io avevo pensato anche di inserire un controllo sull'esistenza della pagina
    Testare che una pagina esista fisicamente è più critico. Semmai un controllo sul parametro, es. che sia una di N stringhe note.
  • Re: JSP: pagina inclusa con request.getParameter() da errore 500

    Ok, ho capito, grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte