I'm bekerja pada Java EE web aplikasi dengan kode sumber berikut struktur:
src/main/java <-- multiple packages containing java classes
src/test/java <-- multiple packages containing JUnit tests
src/main/resources <-- includes properties files for textual messages
src/main/webapp/resources <-- includes CSS, images and all Javascript files
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/tags
src/main/webapp/WEB-INF/views
Sedikit saya'm tertarik adalah WEB-INF
- mengandung web.xml
, file XML untuk mengatur servlet, musim Semi bean kabel konteks dan JSP tag dan pandangan.
I'm mencoba untuk memahami apa kendala/mendefinisikan struktur ini. E. g. akan file JSP harus selalu berada dalam WEB-INF
atau mereka bisa berada di tempat lain? Dan apakah ada hal lain yang mungkin masuk dalam WEB-INF
? Wikipedia's PERANG file entri menyebutkan kelas
untuk kelas Java dan lib
untuk file JAR - tidak yakin saya've sepenuhnya memahami saat ini akan diperlukan di samping sumber lain lokasi file.
The Servlet 2.4 spesifikasi kata ini tentang WEB-INF (halaman 70):
Sebuah direktori khusus yang ada dalam aplikasi hirarki bernama
WEB-INF
. Direktori ini berisi semua hal yang berkaitan dengan aplikasi yang tidak di document root dari aplikasi. TheWEB-INF
simpul yang bukan merupakan bagian dari dokumen publik pohon aplikasi. Tidak ada file yang terdapat di WEB-INFdirektori dapat disajikan langsung ke klien oleh wadah. Namun, isi
WEB-INFdirektori yang terlihat untuk servlet code menggunakan
getResourcedan
getResourceAsStreammetode panggilan di
ServletContext, dan mungkin akan terkena menggunakan
RequestDispatcher` panggilan.
Ini berarti bahwa WEB-INF
sumber daya yang dapat diakses oleh sumber daya loader anda-Aplikasi Web dan tidak terlihat secara langsung bagi masyarakat.
Ini adalah mengapa banyak proyek-proyek yang menempatkan sumber daya seperti file JSP, Guci/perpustakaan dan kelas mereka sendiri file atau properti file atau informasi sensitif lainnya di WEB-INF` folder. Jika tidak, mereka akan dapat diakses dengan menggunakan statis sederhana URL (berguna untuk memuat CSS atau Javascript untuk contoh).
Anda JSP file dapat di mana saja meskipun dari perspektif teknis. Misalnya di musim Semi anda dapat mengkonfigurasi mereka berada di WEB-INF
secara eksplisit:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
WEB-INF/classes
dan WEB-INF/lib
folder yang disebutkan di Wikipedia's PERANG file artikel ini adalah contoh dari folder yang dipersyaratkan oleh spesifikasi Servlet pada saat runtime.
Hal ini penting untuk membuat perbedaan antara struktur proyek dan struktur yang dihasilkan PERANG file.
Struktur proyek akan dalam beberapa kasus sebagian mencerminkan struktur file WAR (statis sumber daya seperti file JSP atau HTML dan JavaScript file, tapi ini tidak selalu terjadi.
Transisi dari struktur proyek ke yang dihasilkan PERANG file ini dilakukan dengan membangun proses.
Sementara anda biasanya gratis untuk desain anda sendiri membangun proses, saat ini kebanyakan orang akan menggunakan pendekatan standar seperti Apache Maven. Di antara hal-hal lain Maven mendefinisikan default untuk yang sumber daya dalam proyek struktur peta untuk apa sumber daya dalam menghasilkan artefak (hasil artefak adalah PERANG file dalam hal ini). Dalam beberapa kasus pemetaan terdiri dari plain copy proses dalam kasus lain pemetaan proses yang meliputi transformasi, seperti penyaringan atau menyusun dan lain-lain.
Salah satu contoh: WEB-INF/classes
folder ini nantinya akan berisi semua yang dihimpun kelas java dan sumber daya (src/main/java
dan src/main/resources
) yang harus dimuat oleh Classloader untuk memulai aplikasi.
Contoh lain: WEB-INF/lib
folder ini nantinya akan berisi semua file jar yang dibutuhkan oleh aplikasi. Dalam maven project dependensi yang berhasil untuk anda dan maven secara otomatis salinan diperlukan file jar ke WEB-INF/lib
folder untuk anda. Itu menjelaskan mengapa anda don't memiliki lib
folder di maven project.
Ketika anda menggunakan Java EE aplikasi web (menggunakan kerangka atau tidak),struktur harus mengikuti beberapa persyaratan/spesifikasi. Spesifikasi ini berasal dari :
- servlet container (e.g Tomcat)
- Java Servlet API
- aplikasi Anda domain
ApplicationName | |--META-INF |--WEB-INF |_web.xml <-- Berikut adalah file konfigurasi dari aplikasi web anda(di mana anda menentukan servlets, filter, pendengar...) |_classes <--Berikut ini pergi semua kelas anda webapp, berikut struktur paket yang anda tetapkan. Hanya |_lib <--Berikut ini pergi semua perpustakaan (guci) aplikasi anda butuhkan
Persyaratan ini ditetapkan oleh Java Servlet API.
3. Aplikasi domain
Sekarang bahwa anda've mengikuti persyaratan dari Servlet container(atau server aplikasi) dan Java Servlet API persyaratan, anda dapat mengatur bagian-bagian lain dari webapp anda berdasarkan apa yang anda butuhkan.
- Anda dapat menempatkan sumber daya (file JSP, file teks, script file) di dalam aplikasi root direktori. Tapi kemudian, orang-orang dapat mengaksesnya secara langsung dari browser mereka, bukan dari permintaan mereka yang sedang diproses oleh beberapa logika yang disediakan oleh aplikasi anda. Jadi, untuk mencegah sumber daya yang langsung diakses seperti itu, anda dapat menempatkan mereka dalam direktori WEB-INF, yang isinya hanya dapat diakses oleh server.
-Jika anda menggunakan beberapa framework, mereka sering menggunakan konfigurasi file. Sebagian besar kerangka (struts, spring, hibernate) mengharuskan anda untuk menempatkan file-file konfigurasi di classpath ("kelas" direktori).
Anda harus dimasukkan ke dalam WEB-INF di setiap halaman, atau potongan dari halaman, yang anda tidak ingin untuk umum. Biasanya, JSP atau facelets ditemukan di luar WEB-INF, tetapi dalam kasus ini mereka dengan mudah accesssible untuk setiap pengguna. Dalam kasus anda memiliki beberapa pembatasan otorisasi, WEB-INF dapat digunakan untuk itu.
WEB-INF/lib dapat berisi perpustakaan pihak ke-3 yang anda tidak ingin pack di tingkat sistem (Botol dapat tersedia untuk semua aplikasi yang berjalan pada server anda), tapi hanya untuk khusus ini applciation.
Pada umumnya, banyak konfigurasi file juga masuk ke WEB-INF.
Sedangkan untuk WEB-INF/classes - itu ada di setiap web-app, karena itu adalah folder di mana semua sumber yang dihimpun ditempatkan (tidak GUCI, tapi disusun .file java yang anda tulis sendiri).
Konvensi ini diikuti untuk alasan keamanan. Misalnya jika orang yang tidak berhak diperbolehkan untuk mengakses root JSP file langsung dari URL maka mereka dapat dinavigasi melalui seluruh aplikasi tanpa otentikasi dan mereka dapat mengakses semua dijamin data.
Ada konvensi (tidak diperlukan) menempatkan halaman jsp di bawah direktori WEB-INF sehingga mereka tidak dapat mendalam terkait atau bookmarked untuk. Dengan cara ini semua permintaan untuk halaman jsp harus diarahkan melalui aplikasi kita, sehingga pengalaman pengguna lebih terjamin.