Perbezaan antara getRequestURI dan getPathInfo di HttpServletRequest

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan membincangkan perbezaan antara getRequestURI () dan getPathInfo () di kelas HttpServletRequest .

2. Perbezaan Antara getRequestURI () dan getPathInfo ()

Fungsi getRequestURI () mengembalikan URI yang diminta sepenuhnya. Ini termasuk folder penyebaran dan rentetan pemetaan servlet. Ia juga akan mengembalikan semua maklumat laluan tambahan.

Fungsi getPathInfo () hanya mengembalikan jalan yang dilalui ke servlet . Sekiranya tidak ada maklumat laluan tambahan yang dilalui, fungsi ini akan kembali kosong .

Dengan kata lain, jika kita menggunakan aplikasi kita di root pelayan web kita, dan kita meminta servlet yang dipetakan ke “/”, kedua getRequestURI () dan getPathInfo () akan mengembalikan strain yang sama g. Jika tidak, kita akan mendapat nilai yang berbeza.

3. Contoh Permintaan

Untuk mendapatkan pemahaman yang lebih baik mengenai kaedah HttpServletRequest , katakan kita mempunyai servlet yang dapat diakses melalui URL ini:

//localhost:8080/deploy-folder/servlet-mapping

Permintaan ini akan memukul servlet "servlet-mapping" dalam aplikasi web yang digunakan di dalam "deploy-folder". Oleh itu, jika kita memanggil getRequestURI () dan getPathInfo () untuk permintaan ini, mereka akan mengembalikan rentetan yang berbeza.

Mari buat kaedah servlet doGet () mudah :

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter writer = response.getWriter(); if ("getPathInfo".equals(request.getParameter("function")) { writer.println(request.getPathInfo()); } else if ("getRequestURI".equals(request.getParameter("function")) { writer.println(request.getRequestURI()); } writer.flush(); }

Pertama, mari kita lihat output servlet untuk permintaan getRequestURI yang diambil oleh perintah curl:

curl //localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path 

Begitu juga, mari kita lihat output servlet untuk getPathInfo :

curl //localhost:8080/deploy-folder/servlet-mapping/request-path?function=getPathInfo
/request-path

4. Kesimpulan

Dalam artikel ini, kami telah menjelaskan perbezaan antara getRequestURI () dan getPathInfo () dalam HttpServletRequest . Kami juga menunjukkannya dengan contoh servlet dan permintaan.

Seperti biasa, servlet yang dilaksanakan untuk menguji semua fungsi ini terdapat di Github.