Modificare tutta la mia seconda esercitazione usando JSTL

di il
14 risposte

Modificare tutta la mia seconda esercitazione usando JSTL

Ho realizzato una seconda webapp che in locale funziona benissimo ma che non posso mettere dentro ROOT perché ho già un'altra esercitazione (esercitazione nr. 1).
Purtroppo la mia seconda webapp funziona quando viene caricata nella cartella ROOT, se metto la mia webapp in una cartella diversa come ad esempio ‘esercitazione2’ le risorse (file css, html, ecc…) non sono più raggiungibili.
Per risolvere questo problema pensavo di usare JSTL e quindi ho aggiunto a pom.xml la dipendenza:

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
Poi nella pagina index.jsp ho aggiunto il taglib come da specifica:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Il problema è che poi non so come modificare le mie jsp e le mie classi.

<%
    // Si impedisce il caching della pagina. (serve soprattutto per azzerare index.jsp dopo la login!)
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setHeader("Expires", "0"); // Proxies.
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<!DOCTYPE html>
<html lang="it">

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ include file="<c:url value='/WEB-INF/blocchi/head.jsp'/>" %>

<body id="page-top">

<%@ include file="/WEB-INF/blocchi/menu.jsp" %>

<%@ include file="/WEB-INF/blocchi/header.jsp" %>
In pratica IntelliJ mi segna come sbagliato il codice seguente:

<%@ include file="<c:url value='/WEB-INF/blocchi/head.jsp'/>" %>
Dunque come si usa questa libreria?
Online si fa questo esempio ma proprio non capisco...

<c:url value = "/core_tags" var = "myURL">
    <c:param name = "parameter_1" value = "1234"/>
    <c:param name = "parameter_2" value = "abcd"/>
</c:url>
Altra domanda: quando eseguo il deploy in locale su IntelliJ, l’IDE carica la mia webapp qui:
D:\ALTRO\Java\apache-tomcat-9.0.17\webapps\ROOT
infatti vedo tutti i file tra cui anche la cartella WEB-INF. La ROOT è la context-root ovvero il percorso aggiunto da c:url?

14 Risposte

  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    In pratica IntelliJ mi segna come sbagliato il codice seguente:
    
    <%@ include file="<c:url value='/WEB-INF/blocchi/head.jsp'/>" %>
    
    Dunque come si usa questa libreria?
    No, NON puoi usare <c:url> (o altro tag di JSTL o non) dentro il <%@ include %>

    Il <c:url> ti serve dove vai a "linkare" url di qualunque tipo (risorse statiche o altre pagine) e NON vuoi specificare la context-root (perché la andresti a "cablare" nelle pagine e non è buono).

    Quindi ad esempio

    <link rel="stylesheet" type="text/css" href="<c:url value='/static/stili.css'/>">

    oppure es. un form:

    <form action="<c:url value='/user/edit'/>" method="POST">

    In pratica dovresti usare <c:url> per tutti i link a css/js/immagini, altre risorse, ecc.. Insomma tutti gli url che sono verso la tua webapp (ovviamente NON siti di terze parti) che il client (browser) VEDE.

    (il <%@ include %> è una cosa interna alla webapp, NON c'entra con il client!)
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    Grazie andbin. Ma se lascio i miei include come sono ora la mia webapp potrà funzionare ugualmente se inserita in una cartella diversa? Posso lasciare gli include così come sono oppure devo abbandonare l'idea di spezzettare i miei file html in parti diverse?
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    Posso lasciare gli include così come sono oppure devo abbandonare l'idea di spezzettare i miei file html in parti diverse?
    Sì puoi lasciare gli include come erano. Te lo ripeto, quei include sono cose INTERNE alla webapp.
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    Mentre per le classi?
    httpRes.sendRedirect("/index.jsp#home");
    Lascio anche in quel caso tutto invariato?
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    Mentre per le classi?
    httpRes.sendRedirect("/index.jsp#home");
    Lascio anche in quel caso tutto invariato?
    httpRes.sendRedirect(httpRequest.getContextPath() + "/index.jsp#home");
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    Grazie mille!
    Mentre qui lascio tutto invariato:
    @WebServlet(name = "ServletAutenticazione", urlPatterns = "/autenticazione.jsp")
    giusto?

    P.S.: Nel filtro questo non funziona:
    httpRes.sendRedirect(request.getContextPath() + "/index.jsp#home");
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    Grazie mille!
    Mentre qui lascio tutto invariato:
    @WebServlet(name = "ServletAutenticazione", urlPatterns = "/autenticazione.jsp")
    giusto?
    Sì, perché quel "/" inziale nel urlPatterns indica GIA' la context-root!
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    andbin ha scritto:


    giannino1995 ha scritto:


    Grazie mille!
    Mentre qui lascio tutto invariato:
    @WebServlet(name = "ServletAutenticazione", urlPatterns = "/autenticazione.jsp")
    giusto?
    Sì, perché quel "/" inziale nel urlPatterns indica GIA' la context-root!
    Menomale! Per il filtro invece che mi dici?
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    P.S.: Nel filtro questo non funziona:
    httpRes.sendRedirect(request.getContextPath() + "/index.jsp#home");
    Menomale! Per il filtro invece che mi dici?
    Non avevo letto. Ma .. non funziona in che senso?
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    andbin ha scritto:


    giannino1995 ha scritto:


    P.S.: Nel filtro questo non funziona:
    httpRes.sendRedirect(request.getContextPath() + "/index.jsp#home");
    Menomale! Per il filtro invece che mi dici?
    Non avevo letto. Ma .. non funziona in che senso?
    No no funziona sono io che sono un ignoratone:
    httpRes.sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsp#home");
    Non si può richiamare un metodo da una classe che quel metodo non ce l'ha... hehehe...
    public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain) throws IOException, ServletException {...
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    giannino1995 ha scritto:


    Non si può richiamare un metodo da una classe che quel metodo non ce l'ha... hehehe...
    Sì vero. Quando te l'ho scritto stavo pensando chiaramente alle Servlet ma ovviamente funziona anche in un Filter.
    Solo che non hanno mai fatto per i filter una "specializzazione" per HTTP percui bisogna fare un cast di request/response. Gli oggetti che riceve sono sicuramente quelli Http***.
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    Ho premuto su 'run' in IntelliJ.
    Successivamente ho copiato il contenuto di questa cartella:
    D:\ALTRO\Java\apache-tomcat-9.0.17\webapps\ROOT
    in questa:
    D:\ALTRO\Java\apache-tomcat-9.0.17\webapps\prova
    Se digito questo nel browser:
    http://localhost:8080/prova/index.js
    mi compare la pagina di errore. Da quest'ultima se clicco su "ritorna alla home" ritorno qui:
    http://localhost:8080/index.js
    Ho dimenticato di editare qualche link oppure devo ancora fare altro?
    In web.xml devo editare qualcosa?
    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    		 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <display-name>Esercitazione 1</display-name>
    
        <filter>
            <filter-name>FiltroA</filter-name>
            <filter-class>web1.FiltroA</filter-class>
        </filter>
        <filter>
            <filter-name>FiltroB</filter-name>
            <filter-class>web1.FiltroB</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>FiltroA</filter-name>
            <url-pattern>/admin/*</url-pattern>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>FiltroB</filter-name>
            <url-pattern>/admin/*</url-pattern>
        </filter-mapping>
    
        <error-page>
            <location>/WEB-INF/error.jsp</location>
        </error-page>
    
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
        <!--<security-constraint>
            <display-name>Reindirizzamento-HTTPS</display-name>
            <web-resource-collection>
                <web-resource-name>Ambiente-di-sviluppo-sicuro</web-resource-name>
                <description>Effettua il reindirizzamento HTTPS in modo che la connessione sia protetta.</description>
                <url-pattern>/*</url-pattern>
            </web-resource-collection>
            <user-data-constraint>
                <transport-guarantee>CONFIDENTIAL</transport-guarantee>
            </user-data-constraint>
        </security-constraint>-->
    
    </web-app>
    
    
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    No nel web.xml non cambia nulla. Te l'ho già detto: url-pattern/location che iniziano con / sono già relativi alla context-root.

    Verifica eventuali errori/log ... avrai dimenticato/sbagliato qualcosa ...
  • Re: Modificare tutta la mia seconda esercitazione usando JSTL

    E' tutto funzionante o per lo meno credo, non riesco ancora a verificare al 100%.
    In locale non funziona ma perché tomcat non l'ho configurato, l'ho solo dato in pasto all'IDE.
    Sul 'server' non ho installato il DB per cui non posso ancora testare la parte privata ma quella pubblica funziona al 100%.
    Grazie mille andbin!!!


    Ora vado a terminare la configurazione del server...

    Dopo mesi di test comunque ho scoperto il lavoro più brutto e schifoso di questo mondo: IL SISTEMISTA!
Devi accedere o registrarti per scrivere nel forum
14 risposte