Struttura della cartella delle applicazioni Web Java

16

Come principiante di J2EE, recentemente ho iniziato a sviluppare il mio progetto da zero usando il Core di J2EE: Servlets & JSP.

Non sono riuscito a valutare se la struttura della mia cartella di progetto sia corretta o meno. Ecco la mia struttura di cartelle di progetto.

Primadifaredomande,ammettodinonpoterrispondereodinongiustificaresequalcunomichiede,perchéquestotipodistrutturadicartelle.Ladomanda:èunbuonsegnomettereimieijspsfuoridaweb-inf.Seno,perchéècosì?Sesìperché?

Esisteunaconvenzionedistrutturadicartellestandardperun'applicazionewebJ2EE,socheMavenhaintrodottoalcunistandardma,tuttavia,possiamopersonalizzaresecondoilrequisitoincuicredo.

Hofattounpo'diricercasugoogleehotrovatoidueriferimenti 1 2

dove le risposte non sono sulla stessa pagina, da cui non ho potuto trarre alcuna conclusione.

Quali sono i punti da prendere in considerazione mentre si espone la struttura delle cartelle per un'applicazione web J2EE, importante dove dovrebbero andare i Jsps, il contenuto statico in & perché?

    
posta srk 31.12.2013 - 09:07
fonte

5 risposte

7

La struttura standard per un file WAR è:

/META-INF
   Standard jar stuff like manifest.xml
/WEB-INF
  web.xml
  /classes
    /com...etc.
  /lib

Maven genera questo per te usando il tuo src / main / java, risorse, webapp e le tue dipendenze (ponendoli in / lib) nel maven-webapp-plugin , ma questa è l'implementazione. La cosa importante da capire è che tutto ciò che inserisci in WEB-INF è non accessibile esternamente , mentre tutto nella directory radice di WAR è pubblico.

Generalmente non vuoi mettere molto nella root, dal momento che vuoi che la tua applicazione gestisca tutti gli accessi usando i servlet e i filtri che definisci in web.xml. È comune vedere un index.html (o .jsp) nella radice che reindirizza a un servlet, ad esempio un Struts azione.

Tipiche implementazioni MVC come Stripes o Struts consigliano all'utente di accedere direttamente ai JSP, preferendo che i JSP siano di sola visualizzazione. Raccomandano la creazione di controller che inoltrano ai JSP dopo l'elaborazione della richiesta e i JSP si limitano a rendere il risultato. Ad esempio, l'invio di un modulo a /login eseguirà un'azione che elabora la richiesta di accesso, crea la sessione dell'utente e inoltra l'utente alla vista di accesso del JSP della pagina iniziale.

    
risposta data 02.01.2014 - 20:31
fonte
5

La solita risposta a "qual è la strada giusta?" o "è questa la strada giusta?" è ..... dipende .

Tutto quello che posso fare è dirti i pro ei contro su idee specifiche. Quello che segue è al 100% la mia opinione. Non conosco requisiti o regole specifici. Sono sicuro che qualcuno non sarà d'accordo con me.

di JSP

Cerchiamo di mettere JSP in WEB-INF o no.

I professionisti di inserire JSP in WEB-INF:

  • Controlla come vengono eseguite le JSP. Se vuoi che un JSP sia parametrizzato e riutilizzabile (che è comunque molto difficile con una JSP), puoi metterli in WEB-INF e usare un servlet o un controller di azione Struts o qualche altro front controller per eseguire la pre-elaborazione e quindi passare il controllo al JSP, passando nel giusto contesto ambientale (come attributi di richiesta, controlli di sicurezza, sanificazione dei parametri, ecc.)
  • È possibile programmare a livello di codice o anche a livello di firewall o blocco IDS richieste HTTP a * .jsp per ridurre la probabilità che qualcuno carichi un JSP nella web root e quindi sia in grado di eseguire codice come server web. Dovrebbero sovrascrivere un JSP esistente. Non un enorme vantaggio in termini di sicurezza, ma rende i compromessi leggermente più difficili.
  • Applica buone abitudini, come MVC, front controller, filtri servlet, dipendenza dipendenza, ecc. al contrario di un grande mostruoso JSP che fa tutto il lavoro stesso ed è difficile da leggere / mantenere.

Contro di mettere JSP in WEB-INF:

  • Non è possibile accedere direttamente alla pagina, anche se si tratta di una semplice pagina autonoma che non necessita di elaborazione anticipata. Questo perché i file sotto / WEB-INF non sono servibili da un contenitore servlet.

File statici

In termini di file puramente statici come HTML, immagine, foglio di stile, javascript, ecc. inserisci quelli nella root web (my_app nel tuo caso), ma NOT / WEB-INF (perché non è accessibile).

Layout generale

Per quanto riguarda il layout generale della directory, dipende in qualche modo dal processo di compilazione. Mi piace archiviare tutto sotto "src" o "source" perché rende chiaro quali file sono generati dalla costruzione e quali sono i file di origine puri. main ti consente di separare il codice di test come le classi junit dal tuo codice sorgente principale, il che è positivo. Ma se non hai alcun test unitario (oh no!), Allora è una distinzione senza senso.

D'altra parte, se non manipoli la web root durante la compilazione (come se fosse tutto JSP e file statici), allora forse la mantieni al livello più alto, come /webroot o /deploy e copiare i file in base alle necessità, come .class o .jar file. È un'abitudine degli esseri umani (specialmente gli sviluppatori) di sovra-organizzare. Un buon segno di sovra-organizzazione sta avendo molte cartelle con una sola sottocartella.

Cosa hai mostrato

Hai indicato che stai seguendo un set di convenzioni da parte di Maven, quindi se stai già usando Maven, segui semplicemente quel layout. Non c'è assolutamente nulla di sbagliato nel layout che hai descritto.

    
risposta data 02.01.2014 - 19:49
fonte
1

Bene, la tua src / main / webapp mi ricorda sicuramente un progetto di esperti. Che è buono.

Per il mio_app / jsps non sono sicuro però. Gli sviluppatori di solito lasciano il loro jsp nella cartella webapp, o se vuoi fare un po 'di url-mapping, in una directory webapp / jsp.

! Attenzione! : Non devi mai inserire un file jsp in web-inf. Il tuo WEB-INF dovrebbe contenere solo file xml per configurare il tuo sito web. Ricorda, il tuo jsp è una pagina web o parte di una pagina web.

Puoi usare le cartelle come modello, parziale ... qualunque cosa ti va bene. Dovrebbe essere facile da trovare per un estraneo. Basta separare diversi tipi di contenuti come pagine piene, modelli, viste parziali ...

    
risposta data 31.12.2013 - 10:31
fonte
1

I sono d'accordo con Brice . Anch'io sono principiante in J2EE, ma penso che sia meglio lavorare in modo semplice e chiaro all'inizio.

La cartella principale è WEBAPP, e dovresti rendere la tua struttura web pensando che la maggior parte delle pagine si troveranno lì. In caso contrario, quando le pagine comunicano tra loro probabilmente non è possibile gestire le relazioni tra file senza errori.

    
risposta data 02.01.2014 - 15:47
fonte
1

In realtà l'applicazione WAR può essere costruita senza WEB-INF/web.xml . È possibile creare un'applicazione WAR con solo classi Java all'interno.

Fonte: Elementi descrittori di distribuzione web.xml

With Java EE annotations, the standard web.xml deployment descriptor is optional. According to the servlet 3.0 specification at http://jcp.org/en/jsr/detail?id=315, annotations can be defined on certain Web components, such as servlets, filters, listeners, and tag handlers.

Quindi al giorno d'oggi è possibile costruire WAR piuttosto che JAR con estensioni .war :)

Rispondendo alla tua domanda, la struttura di WAR dipende dai tuoi requisiti.

link

    
risposta data 12.01.2014 - 12:42
fonte