Apakah maksud servletcontext.getRealPath("/") dan bilakah saya harus menggunakannya?
Pengenalan
Dalam aplikasi servlet Java, the Kaedah ServletContext#getRealPath() digunakan untuk menukar laluan kandungan web relatif kepada laluan sistem fail cakera mutlak. Laluan yang ditentukan boleh sama ada fail atau direktori dalam kandungan web. Walau bagaimanapun, kaedah ini harus digunakan dengan berhati-hati dan secara amnya tidak digalakkan dalam pembangunan Java EE moden.
Penggunaan getRealPath("/")
The / dalam getRealPath("/") mewakili akar direktori kandungan web. Ia ialah laluan sistem fail mutlak ke direktori yang mengandungi fail web.xml aplikasi web. Contohnya, dalam struktur projek berikut:
YourWebProject/
src/
:
web/
META-INF/
WEB-INF/
index.jsp
login.jsp
:
Salin selepas log masuk
Jika anda melaksanakan getRealPath("/"), ia akan mengembalikan laluan sistem fail ke direktori web, seperti /path/to/server/work /folder/some.war/web.
Berhati-hati dan Had
Walaupun getRealPath() boleh berguna dalam situasi tertentu, ia mempunyai beberapa had dan biasanya tidak digalakkan atas sebab berikut:
-
Tulisan tidak berterusan: Perubahan yang dibuat pada fail yang ditulis menggunakan getRealPath() akan hilang semasa penempatan semula Fail WAR.
-
Pergantungan pengembangan: Kebolehpercayaan getRealPath() bergantung pada konfigurasi pelayan untuk mengembangkan fail WAR. Jika WAR tidak dikembangkan kepada sistem fail cakera, getRealPath() mungkin mengembalikan laluan yang salah atau batal.
-
Tiada kes penggunaan mudah alih: Biasanya terdapat alternatif yang lebih mudah alih dan boleh dipercayai untuk menggunakan getRealPath ().
Alternatif kepada getRealPath()
Daripada menggunakan getRealPath(), pertimbangkan alternatif ini:
- Gunakan ServletContext#getResourceAsStream() untuk mendapatkan InputStream untuk sumber dalam web kandungan.
- Gunakan ServletContext#getResourcePaths() untuk mendapatkan semula senarai laluan sumber yang tersedia.
- Gunakan ServletContext#getResource() untuk mendapatkan URL bagi sumber.
- Untuk muat naik fail atau penciptaan fail sementara, rujuk pautan "Lihat juga". di bawah.
Lihat Juga
- [getResourceAsStream() vs FileInputStream](https://stackoverflow.com/questions/4212943/resource-as-inputstream-in-java-best-practice)
- [Cara yang disyorkan untuk simpan fail yang dimuat naik dalam servlet aplikasi](https://stackoverflow.com/questions/5797716/recommended-way-to-save-uploaded-files-in-a-servlet-application)
- [Cara mudah untuk menyimpan data mengenai penempatan semula web Java EE 7 application](https://stackoverflow.com/questions/11736935/simple-ways-to-keep-data-on-redeployment-of-java-ee-7-web-application)
Atas ialah kandungan terperinci Apakah yang `ServletContext.getRealPath('/')` lakukan, dan mengapa saya harus mengelak daripada menggunakannya dalam aplikasi Java EE moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!