Deploy di un'applicazione in java

di il
11 risposte

Deploy di un'applicazione in java

Ho installato Tomcat 9 su Windows Server 2016 e funziona alla perfezione ma ho un problema con il deploy della mia applicazione.
Ho messo il mio file .war dentro questa cartella:
C:\SERVER\tomcat 9\webapps
e Tomcat in automatico genera la directory seguente:
C:\SERVER\tomcat 9\webapps\nc
dove nc è il nome del mio file .war privato dell'estensione .war.
Fin qui tutto ok.
Il problema è che per raggiungere la webapp devo scrivere:
ip_pubblico/nc
e non:
ip_pubblico
Questo per me è un problema perché l'applicazione funziona solo quando la URL è questa:
ip_pubblico
Come risolvo?
Ho provato ad editare questa stringa:
codice:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
in questo modo:
codice:
<Host name="localhost" appBase="webapps/nc"
unpackWARs="true" autoDeploy="true">
ma non ho avuto alcun successo.

grazie

11 Risposte

  • Re: Deploy di un'applicazione in java

    Se guardi nella webapps di Tomcat c'è una cartella ROOT . Quella è la "root" application che ha context-root solo "/" e non es. "/nc" .
    Si può fare in modo che la tua webapp sia quella webapp. Se il progetto è basato su Maven, si può banalmente già impostare questo aspetto nel pom.

    Chiaramente, se nella webapp hai "cablato" (es negli html ecc..) un path /nc lo devi cambiare o renderlo dinamico.
  • Re: Deploy di un'applicazione in java

    Ho capito quello che dici alla prima frase e hai ragione infatti rinominando la mia cartella con ROOT, buttando via l'altra, visualizzo la mia webapp.
    Il mio progetto è basato su Maven ma non ho capito, operativamente parlando, cosa dovrei fare nel pom.
    Nei file html, stupidamente, ma era la mia prima webapp non ho creato nessuna cartella contenente tutti i file della mia applicazione. Lo farò nella prossima.
  • Re: Deploy di un'applicazione in java

    giannino1995 ha scritto:


    Ho capito quello che dici alla prima frase e hai ragione infatti rinominando la mia cartella con ROOT, buttando via l'altra, visualizzo la mia webapp.
    Il mio progetto è basato su Maven ma non ho capito, operativamente parlando, cosa dovrei fare nel pom.
    Sostanzialmente intendevo quello che è descritto qui (prima cosa trovata): https://stackoverflow.com/questions/38660897/maven-war-application-setting-up-contextroot

    giannino1995 ha scritto:


    Nei file html, stupidamente, ma era la mia prima webapp non ho creato nessuna cartella contenente tutti i file della mia applicazione. Lo farò nella prossima.
    Intendevo dire che se in una pagina web nella applicazione hai scritto cose tipo:

    <link rel="stylesheet" type="text/css" href="/nc/static/styles.css">

    o es.

    <form action="/nc/xyzblabla">

    vuol dire che hai "cablato" la context-root negli url. E ovviamente lo devi cambiare (o renderlo dinamico).
  • Re: Deploy di un'applicazione in java

    Nelle pagine html tutti i link sono del tipo:
    <link rel="stylesheet" type="text/css" href="/static/styles.css">
    e non del tipo:
    <link rel="stylesheet" type="text/css" href="/nc/static/styles.css">

    Per risolvere ho provato ad aggiungere in server.xml
    <Context path="" docBase="webapps/nc" debug="0" reloadable="true"></Context>
    ma non risolvo perché quando da index.jsp vado ad autenticazione.jsp Tomcat mi manda ad ip-server/autenticazione.jsp e non ad ip-server/nc/autenticazione.jsp.
    Vorrei sapere cosa devo scrivere in server.xml per deployare senza pensieri le mie applicazioni.
    Scusa la domanda personale ma tu andbin come fai quando vuoi testare su una VPS una tua applicazione in java?
  • Re: Deploy di un'applicazione in java

    giannino1995 ha scritto:


    Nelle pagine html tutti i link sono del tipo:
    <link rel="stylesheet" type="text/css" href="/static/styles.css">
    Così funzionano SOLO se la context-root è "/", ovvero se è la "root" webapp in Tomcat.

    Giusto solo per chiarezza, ti è chiara la differenza tra la server-root (concetto generale del web) e la context-root (concetto specifico delle webapp Java) ?

    giannino1995 ha scritto:


    Vorrei sapere cosa devo scrivere in server.xml per deployare senza pensieri le mie applicazioni.
    Il server.xml non sarebbe neanche da toccare (generalmente).
    Semmai dovresti emettere nelle tue pagine web tutti gli url "corretti" con il giusto context-path, qualunque esso sia indipendentemente da come/dove è deployata la webapp.
    Ma è chiaro che puoi farlo solo nelle pagine "dinamiche" (es. JSP), non certo se hai dei .html "statici".

    giannino1995 ha scritto:


    Scusa la domanda personale ma tu andbin come fai quando vuoi testare su una VPS una tua applicazione in java?
    Il mio sito è in Java ed è su hosting con Tomcat. Ma io ho fatto una cosa semplice: quando faccio il build per "produzione" (ovvero per il sito reale), utilizzo un goal specifico del maven-war-plugin che si chiama war:exploded che genera una cartella con l'equivalente del contenuto WAR ma spacchettato. E poi con WinSCP "sincronizzo" tramite FTP la ROOT di Tomcat sull'hosting con la cartella che ho in locale.
    Tutto qui. Ma è solo uno dei modi per portare su un hosting una webapp.
  • Re: Deploy di un'applicazione in java

    andbin ha scritto:


    Giusto solo per chiarezza, ti è chiara la differenza tra la server-root (concetto generale del web) e la context-root (concetto specifico delle webapp Java) ?
    No mi spieghi.

    andbin ha scritto:


    Il server.xml non sarebbe neanche da toccare (generalmente).
    Semmai dovresti emettere nelle tue pagine web tutti gli url "corretti" con il giusto context-path, qualunque esso sia indipendentemente da come/dove è deployata la webapp.
    Ma è chiaro che puoi farlo solo nelle pagine "dinamiche" (es. JSP), non certo se hai dei .html "statici".
    Io ho progettato semplicemente la mia applicazione su IntelliJ e sull'IDE tutto funzionava senza problemi. Parli troppo difficile, devi fare esempi più semplici se vuoi che ti segua.
    Mi spiegheresti come progettare la mia webapp in modo che non sia necessario editare server.xml?

    Detto ciò ho risolto il problema con questo codice:
    <Context path="" docBase="nc" debug="0" reloadable="true"></Context>
    ma vorrei che la mia app funzionasse alla perfezione senza dover editare ogni volta server.xml.

    grazie per tutto
  • Re: Deploy di un'applicazione in java

    giannino1995 ha scritto:


    andbin ha scritto:


    Giusto solo per chiarezza, ti è chiara la differenza tra la server-root (concetto generale del web) e la context-root (concetto specifico delle webapp Java) ?
    No mi spieghi.
    Ecco:
    http://www.blabla.com/nomeapp/static/xyz.js
                         ^       ^
                         |       |
                server-root     context-root
    La server-root è sempre la radice sotto l'host. Questo vale in generale sul web. Se il client (browser) maneggia un url /qualcosa/blabla (per link <a>, CSS, JS, ec...) il "/" iniziale è sempre relativo alla server-root.

    La context-root è un concetto delle webapp Java. Tutto quello ad esempio che metti nel web.xml, che passi nel request.getRequestDispatcher() e altro, SE inizia con "/" allora è relativo alla context-root.
    Tranne casi particolari come il sendRedirect(). Qui se metti un "/" iniziale indica la server-root. Infatti il redirect lo fa il client, non c'entra la webapp.

    giannino1995 ha scritto:


    Io ho progettato semplicemente la mia applicazione su IntelliJ e sull'IDE tutto funzionava senza problemi. Parli troppo difficile, devi fare esempi più semplici se vuoi che ti segua.
    Mi spiegheresti come progettare la mia webapp in modo che non sia necessario editare server.xml?
    Innanzitutto usa JSTL nelle pagine JSP per emettere in output gli url a css/js/altro in modo corretto es.:

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

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


    JSTL è una libreria, la tiri dentro con maven con
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    E se la "studi" un po' (almeno i tag col prefisso "c") è utile.

    giannino1995 ha scritto:


    Detto ciò ho risolto il problema con questo codice:
    <Context path="" docBase="nc" debug="0" reloadable="true"></Context>
    ma vorrei che la mia app funzionasse alla perfezione senza dover editare ogni volta server.xml.
    Ti ripeto che se non modifichi il server.xml è meglio ..
  • Re: Deploy di un'applicazione in java

    Grazie per la spiegazione iniziale.
    La prima esercitazione la lascio così ma la seconda provo ad usare JSTL.
    Quindi se ho capito bene JSTL permette di modificare in fase di pubblicazione il context-root.
    In pratica senza fare alcuna modifica a server.xml la mia applicazione sarà fruibile a questa URL:
    ip-server/cartella-in-cui-è-stata-decompressa-l'applicazione/index.jsp
    anche se sull'IDE viene renderizzata su localhost/index.jsp, giusto?
    Ho capito bene?
  • Re: Deploy di un'applicazione in java

    giannino1995 ha scritto:


    Quindi se ho capito bene JSTL permette di modificare in fase di pubblicazione il context-root.
    No, JSTL non modifica il context-path.

    JSTL è una libreria di custom-tag da usare nelle JSP che fornisce tag come <c:if> <c:out> <c:choose> <c:forEach> ecc.. per evitare (come la peste) di usare scriptlet Java nelle JSP (che generalmente è "brutto", prolisso e critico).

    Il <c:url> è in grado di inserire lui il context-path corretto.

    Un <c:url value='/static/stili.css'/> viene sostituito con l'ouput: /tuaapp/static/stili.css
    Dove /tuaapp viene dedotto in automatico dal c:url (va sicuramente a prenderlo dal ServletContext).

    E quindi link generati così "funzionano" qualunque sia il context-path (che puoi cambiare anche successivamente).
  • Re: Deploy di un'applicazione in java

    Ho capito, chiarissimo, davvero una bella libreria! Peccato non conoscerla prima, avrei faticato di meno sul deploy della webapp su Windows.
    Mi piacerebbe proseguire con il mio "corso", provare ad implementare JSTL nell'esercitazione nr. 2 (JSP + database) ma sono fermo sulla fase di pubblicazione della webapp su Linux.
    Senza Tomcat su Linux le JSP di Java non mi servono a nulla.
    Su Windows sono riuscito a fare il deploy ma su Ubuntu non sono riuscito a fare nulla, neanche ad installare Tomcat.
  • Re: Deploy di un'applicazione in java

    giannino1995 ha scritto:


    Senza Tomcat su Linux le JSP di Java non mi servono a nulla.
    Su Windows sono riuscito a fare il deploy ma su Ubuntu non sono riuscito a fare nulla, neanche ad installare Tomcat.
    Ma guarda che mettere Tomcat su una macchina Linux e configurarlo in Eclipse richiede poi praticamente la (quasi .. forse) stessa procedura che si userebbe su Windows!
Devi accedere o registrarti per scrivere nel forum
11 risposte