Menghuraikan Parameter Berbilang Bahagian/Data Bentuk Dipermudahkan dalam Servlet
Dalam bidang pengaturcaraan Servlet, menghuraikan permintaan data berbilang bahagian/borang boleh satu tugas yang sukar. Walau bagaimanapun, pengenalan Servlet 3.0 membawa penyelesaian yang dialu-alukan dengan kaedah getPart(). Sebelum ini, Apache Commons FileUpload ialah standard yang digunakan untuk menghuraikan permintaan sedemikian.
Untuk menggambarkan kemudahan penggunaan getPart(), pertimbangkan coretan kod berikut:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/parseFormData") public class ParseFormDataServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part paramPart = request.getPart("paramName"); BufferedReader reader = new BufferedReader(new InputStreamReader(paramPart.getInputStream())); String paramValue = reader.readLine(); System.out.println("Parsed parameter value: " + paramValue); } }
Dalam Versi Servlet sebelum 3.0, menggunakan Apache Commons FileUpload untuk menghuraikan permintaan multipart/form-data melibatkan proses yang lebih kompleks. Kod berikut menunjukkan cara ia boleh dicapai:
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.util.Streams; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/parseFormData") public class ParseFormDataCommonsFileUploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory); Map<String, String> parameters = new HashMap<>(); try { for (FileItem fileItem : fileUpload.parseRequest(request)) { if (fileItem.isFormField()) { parameters.put(fileItem.getFieldName(), Streams.asString(fileItem.getInputStream())); } } String paramValue = parameters.get("paramName"); System.out.println("Parsed parameter value: " + paramValue); } catch (FileUploadException e) { e.printStackTrace(); } } }
Seperti yang anda lihat, prosesnya lebih bertele-tele dan memerlukan perpustakaan tambahan. Dengan memilih Servlet 3.0 atau lebih baharu dan menggunakan kaedah getPart() terbina dalam, pembangun boleh menyelaraskan dengan ketara penghuraian permintaan berbilang bahagian/data bentuk dalam aplikasi Servlet mereka.
Atas ialah kandungan terperinci Bagaimanakah Servlet 3.0 memudahkan menghuraikan parameter berbilang bahagian/data bentuk berbanding versi sebelumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!