Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [JSP] Posizione corretta file html

    Salve a tutti.Sono ancora poco pratico di progetti java per il web quindi vi pongo questa domanda: io ho il mio bravo progetto web per il quale per ora ho solo un modulo di tipo web (webmodule) che se non ho capito male in un'applicazione grossa sarebbe solo uno dei tanti webmodules insieme ad un numero imprecisato di ejbmodules. Per iniziare quindi ho solo un webmodule che al suo interno contiene la seguente struttura di directory:
    codice:
    nomemodulo.war--
                    |
                    |----WEB-INF---|
                    |              | 
                    |              |              
                    |              |---MANIFEST.MF
                    |
                    |
                    |---META-INF---|
                                   |
                                   |---web.xml
                                   |
                                   |---classes--
    In cui classes contiene le sottocartelle del package per le mie servlets.
    Ora la mia applicazione d'esempio dovrebbe contenere una pagina html con un semplice form che legge tre valori numerici ed alla pressione di submit richiama una delle servlet in classes, questa servlet a sua volta deve solo formattare i valori letti in una pagina html e rispedirli al client.

    -Dove va messa la pagina html contenente il form nella struttura di directory riportata sopra?C'è una convenzione o posso metterla dovunque, in web-inf, nella root del war, o dove?
    -Supposto di averla messa nella root del war (quindi allo stesso livello di web-inf e meta-inf) e che le mie servlets si trovino nel package com.test.servlets dentro la cartella classes, come richiamo la servlet che dve pubblicare i risultati nel campo action del form?
    Io ho fatto <form action="/com.test.servlets.MyServlet"> ma il browser non riesce a contattare la servlet in questo modo quindi è sbagliato.Cioè qual'è il percorso corretto da mettere quà ---> action="percorso"? Anche le url da inserire nel browser sono un'incognita, non ho capito bene. La cosa migliore sarebbe che qualcuno mi facesse un esempio del tipo: supposto di avere le servlet in questa posizione ed il form in quest'altra, allora devi inserire questo nel campo action del form e quest'altro nel browser per contattare il form (il tutto rispettando le convenzioni di posizionamento dei file se ce ne sono).Grazie
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    La mia risposta fa riferimento al caso di un'applicazione web la cui cartella principale si chiama miaApp, all'interno della quale si trova la cartella WEB-INF, e che dovrebbe corrispondere al tuo web module.

    Tutte le risorse che si trovano dentro WEB-INF non sono accessibili ai client, ma sono accessibili al server. Quindi se poni un file html dentro WEB-INF nessun client potrà invocarlo; però ad esempio una servlet può eseguire il forward di una richiesta ad una risorsa, ad esempio una jsp, che si trova dentro WEB-INF, o includere una pagina che si trova lì dentro.

    Se il nome della cartella della tua applicazione è miaApp, il percorso base della tua applicazione sarà:

    http://host/miaApp

    tale mapping probabilmente può essere modificato agendo su qualche configurazione.

    Ora se te metti il tuo file.html direttamente nella cartella principale, quindi allo stesso livello di WEB-INF, tale file sarà invocabile come:

    http://host/miaApp/file.html

    Il file contiene un form e deve spedire i dati ad una servlet com.test.servlets.MyServlet; a tale servlet bisogna prima assegnare un url pattern nel file web.xml; ad esempio:


    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app id="WebApp_ID" version="2.4" 
    	xmlns="http://java.sun.com/xml/ns/j2ee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    <web-app> 
    	<servlet> 
    		<servlet-name>MiaServlet</servlet-name> 
    		<servlet-class>com.test.servlets.MyServlet</servlet-class> 
    	</servlet>
    
    	
    	<servlet-mapping>
    		<servlet-name>MiaServlet</servlet-name>
    		<url-pattern>/mia</url-pattern>
    	</servlet-mapping>
    </web-app>
    Il web.xml ha mappato la servelt com.test.servlets.MyServlet con l'url pattern /mia e quindi è invocabile come:

    http://host/miaApp/mia

    pertanto l'azione del tuo form deve essere:

    <form action="./mia">

    oppure

    <form action="/miaApp/mia">

    la prima forma funziona perchè l'url del file html col form è

    http://host/miaApp/file.html

    e quindi è come se la tua servlet si trova nella stessa cartella del form; la seconda forma funziona perchè tutte le url (url è femminile?) che iniziano con / sono risolte dai client come relative alla server root, quindi il client automaticamente ci aggiunge http://host all'inizio (bada che invece il server risolve gli inidirizzi che iniziano con / rispetto alla cartella principale della tua web application, non rispetto alla root del server).

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Originariamente inviato da anx721
    La mia risposta fa riferimento al caso di un'applicazione web la cui cartella principale si chiama miaApp, all'interno della quale si trova la cartella WEB-INF, e che dovrebbe corrispondere al tuo web module.

    Tutte le risorse che si trovano dentro WEB-INF non sono accessibili ai client, ma sono accessibili al server. Quindi se poni un file html dentro WEB-INF nessun client potrà invocarlo; però ad esempio una servlet può eseguire il forward di una richiesta ad una risorsa, ad esempio una jsp, che si trova dentro WEB-INF, o includere una pagina che si trova lì dentro.

    Se il nome della cartella della tua applicazione è miaApp, il percorso base della tua applicazione sarà:

    http://host/miaApp

    tale mapping probabilmente può essere modificato agendo su qualche configurazione.

    Ora se te metti il tuo file.html direttamente nella cartella principale, quindi allo stesso livello di WEB-INF, tale file sarà invocabile come:

    http://host/miaApp/file.html

    Il file contiene un form e deve spedire i dati ad una servlet com.test.servlets.MyServlet; a tale servlet bisogna prima assegnare un url pattern nel file web.xml; ad esempio:


    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app id="WebApp_ID" version="2.4" 
    	xmlns="http://java.sun.com/xml/ns/j2ee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    <web-app> 
    	<servlet> 
    		<servlet-name>MiaServlet</servlet-name> 
    		<servlet-class>com.test.servlets.MyServlet</servlet-class> 
    	</servlet>
    
    	
    	<servlet-mapping>
    		<servlet-name>MiaServlet</servlet-name>
    		<url-pattern>/mia</url-pattern>
    	</servlet-mapping>
    </web-app>
    Il web.xml ha mappato la servelt com.test.servlets.MyServlet con l'url pattern /mia e quindi è invocabile come:

    http://host/miaApp/mia

    pertanto l'azione del tuo form deve essere:

    <form action="./mia">

    oppure

    <form action="/miaApp/mia">

    la prima forma funziona perchè l'url del file html col form è

    http://host/miaApp/file.html

    e quindi è come se la tua servlet si trova nella stessa cartella del form; la seconda forma funziona perchè tutte le url (url è femminile?) che iniziano con / sono risolte dai client come relative alla server root, quindi il client automaticamente ci aggiunge http://host all'inizio (bada che invece il server risolve gli inidirizzi che iniziano con / rispetto alla cartella principale della tua web application, non rispetto alla root del server).
    Ti ringrazio, ora riprovo alla luce dei tuoi chiarimenti. E per quanto riguarda delle eventuali convenzioni, ce ne sono? In altre parole,esiste una regola magari non scritta che dice che i file html andrebbero posizionati in un posto piuttoasto che un'altro che le immagini andrebbero posizionate in un altro eccetera
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da unomichisiada
    Ti ringrazio, ora riprovo alla luce dei tuoi chiarimenti. E per quanto riguarda delle eventuali convenzioni, ce ne sono? In altre parole,esiste una regola magari non scritta che dice che i file html andrebbero posizionati in un posto piuttoasto che un'altro che le immagini andrebbero posizionate in un altro eccetera
    Non ho letto di tali convenzioni per ora; i file html puoi metterli direttamnete nella cartella dell'applicazione web o in qualche sua sottocartella. Una buona pratica è quella di mettere dentro WEB-INF o sue sottocartelle quelle risorse che non devono essere accedute direttamente. Ad esempio, supponi che la tua servlet che riceve i dati del form esegue delle elaborazioni e poi rigira la richiesta ad una pagina jsp che si occupa di visualizzare il risultato, uno scenario tipico che segue il cosiddetto pattern Model View Controller. Siccome la pagina jsp deve visualizzare il risultato dell'elaborazine della servlet non è pensata per essere invocata direttamente da un client. Se la metti fuori da web-inf può essere acceduta direttamente, invece mettendola dentro web-inf o una sua sottocartella la servlet potrà ancora passargli la richiesta perche il server può accedere a tutte le cartelle, ma i client non potreanno invocarla direttamente.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    ciao, vedo se riesco a contribuire ad aiutarti.

    Non ci sono delle regole che ti obbligano a separare le diverse tipologie di file, ma è buona norma farlo, specie se la tua applicazione web ne contiene parecchie. Mentre ne esiste una importante che riguarda la cartella WEB-INF/lib nella quale devi mettere i tuoi jar, come per esempio i drivers per le connessioni ai database, etc.

    Per il discorso delle path, invece sono daccordo solo in parte con
    anx721, il pattern-url è una funzionalità utile quando si vuole nascondere la path che punta alla nostra servlet che definisce in qualche modo il percorso, ma è possibile richiamare una servlet anche dalla barra degli indirizzi senza url-pattern (utile quando si passano request da una servlet ad un'altra)
    codice:
    http://localhost:8080/webappName/servlets/com.test.servlets.MyServlet
    Spero possa aiutarti.
    Ciao

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da Sandrocchio_0.1
    ciao, vedo se riesco a contribuire ad aiutarti.

    Non ci sono delle regole che ti obbligano a separare le diverse tipologie di file, ma è buona norma farlo, specie se la tua applicazione web ne contiene parecchie. Mentre ne esiste una importante che riguarda la cartella WEB-INF/lib nella quale devi mettere i tuoi jar, come per esempio i drivers per le connessioni ai database, etc.

    Per il discorso delle path, invece sono daccordo solo in parte con
    anx721, il pattern-url è una funzionalità utile quando si vuole nascondere la path che punta alla nostra servlet che definisce in qualche modo il percorso, ma è possibile richiamare una servlet anche dalla barra degli indirizzi senza url-pattern (utile quando si passano request da una servlet ad un'altra)
    codice:
    http://localhost:8080/webappName/servlets/com.test.servlets.MyServlet
    Spero possa aiutarti.
    Ciao
    non si tratta solo di nascondere il path, è una funzionalità comoda perchè permette di associare un nome simbolico o un insieme di indirizzi (perchè è un pattern) alla stessa servlet; d'altro canto converrai con me che non è bello se l'utente vede nella barra degli indirizi del browser il percorso dei package della tua servlet

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    concordo pienamente, ma se una persona è alle prime armi con i container è bene specificare che non è l'unico modo per invocare una servlet.

  8. #8
    Originariamente inviato da Sandrocchio_0.1
    concordo pienamente, ma se una persona è alle prime armi con i container è bene specificare che non è l'unico modo per invocare una servlet.
    Questo lo sapevo già comunque ti ringrazio dell'intervento.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    Originariamente inviato da anx721
    Non ho letto di tali convenzioni per ora; i file html puoi metterli direttamnete nella cartella dell'applicazione web o in qualche sua sottocartella. Una buona pratica è quella di mettere dentro WEB-INF o sue sottocartelle quelle risorse che non devono essere accedute direttamente. Ad esempio, supponi che la tua servlet che riceve i dati del form esegue delle elaborazioni e poi rigira la richiesta ad una pagina jsp che si occupa di visualizzare il risultato, uno scenario tipico che segue il cosiddetto pattern Model View Controller. Siccome la pagina jsp deve visualizzare il risultato dell'elaborazine della servlet non è pensata per essere invocata direttamente da un client. Se la metti fuori da web-inf può essere acceduta direttamente, invece mettendola dentro web-inf o una sua sottocartella la servlet potrà ancora passargli la richiesta perche il server può accedere a tutte le cartelle, ma i client non potreanno invocarla direttamente.
    Ok,ora tutto funge ed inoltre sei stato piuttosto esauriente.Thanks!
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.