Servletler - Form Verileri

Bazı bilgileri tarayıcınızdan web sunucusuna ve nihayetinde arka uç programınıza aktarmanız gerektiğinde birçok durumla karşılaşmış olmalısınız. Tarayıcı, bu bilgiyi web sunucusuna iletmek için iki yöntem kullanır. Bu yöntemler GET Yöntemi ve POST Yöntemi'dir.

GET Yöntemi

GET yöntemi, sayfa isteğine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfa ve kodlanmış bilgiler,? (soru işareti) sembolü aşağıdaki gibidir -

http://www.test.com/hello?key1 = value1&key2 = value2

GET yöntemi, bilgileri tarayıcıdan web sunucusuna geçirmek için varsayılan yöntemdir ve tarayıcınızın Konum: kutusunda görünen uzun bir dize oluşturur. Sunucuya iletmek için parolanız veya diğer hassas bilgileriniz varsa asla GET yöntemini kullanmayın. GET yönteminin boyut sınırlaması vardır: bir istek dizesinde yalnızca 1024 karakter kullanılabilir.

Bu bilgiler QUERY_STRING başlığı kullanılarak aktarılır ve QUERY_STRING ortam değişkeni aracılığıyla erişilebilir ve Servlet bu tür istekleri kullanarak işler: doGet() yöntem.

POST Yöntemi

Bir arka uç programına bilgi aktarmanın genellikle daha güvenilir bir yöntemi POST yöntemidir. Bu, bilgileri GET yöntemiyle tamamen aynı şekilde paketler, ancak bunu bir? (soru işareti) URL'de ayrı bir mesaj olarak gönderir. Bu mesaj arka uç programına, işlemeniz için ayrıştırıp kullanabileceğiniz standart girdi biçiminde gelir. Servlet, bu tür istekleri kullanarakdoPost() yöntem.

Servlet kullanarak Form Verilerini Okuma

Servletler, duruma bağlı olarak aşağıdaki yöntemleri kullanarak form verilerini otomatik olarak ayrıştırır -

  • getParameter() - Bir form parametresinin değerini almak için request.getParameter () yöntemini çağırırsınız.

  • getParameterValues() - Parametre birden fazla görünüyorsa ve birden çok değer, örneğin onay kutusu döndürüyorsa bu yöntemi çağırın.

  • getParameterNames() - Mevcut istekteki tüm parametrelerin tam bir listesini istiyorsanız bu yöntemi çağırın.

URL kullanarak GET Yöntemi Örneği

İşte GET yöntemini kullanarak HelloForm programına iki değer aktaracak basit bir URL.

http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALI

Aşağıda verilen HelloForm.javaweb tarayıcısı tarafından verilen girdiyi işlemek için servlet programı. KullanacağızgetParameter() iletilen bilgilere erişmeyi çok kolaylaştıran yöntem -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>" +
         "</html>"
      );
   }
}

Ortamınızın düzgün bir şekilde kurulduğunu varsayarak, HelloForm.java dosyasını aşağıdaki gibi derleyin -

$ javac HelloForm.java

Her şey yolunda giderse, yukarıdaki derleme HelloForm.classdosya. Daha sonra bu sınıf dosyasını <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine kopyalamanız ve aşağıdaki girişleri oluşturmanız gerekir.web.xml <Tomcat-installation-directory> / webapps / ROOT / WEB-INF / konumunda bulunan dosya

<servlet>
   <servlet-name>HelloForm</servlet-name>
   <servlet-class>HelloForm</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloForm</servlet-name>
   <url-pattern>/HelloForm</url-pattern>
</servlet-mapping>

Şimdi tarayıcınızın Konum: kutusuna http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI yazın ve tarayıcıda yukarıdaki komutu çalıştırmadan önce tomcat sunucusunu başlattığınızdan emin olun. Bu, aşağıdaki sonucu doğurur -

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Form Kullanarak GET Yöntemi Örneği

HTML FORM ve gönder butonunu kullanarak iki değer ileten basit bir örnek. Bu girdiyi işlemek için aynı Servlet HelloForm'u kullanacağız.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

Bu HTML'yi Hello.htm dosyasında saklayın ve <Tomcat-installationdirectory> / webapps / ROOT dizinine koyun. Ne zaman olur erişim http: // localhost: 8080 / Hello.htm , burada yukarıdaki form gerçek çıkışıdır.

Tomcat'in çalıştığı yerel makinenizde sonucu görmek için First Name ve Last Name girmeyi deneyin ve ardından gönder düğmesine tıklayın. Sağlanan girdiye bağlı olarak, yukarıdaki örnekte belirtildiği gibi benzer bir sonuç üretecektir.

Form Kullanarak POST Yöntemi Örneği

GET ve POST yöntemlerini işleyebilmesi için yukarıdaki sunucu uygulamasında küçük değişiklikler yapalım. AşağıdaHelloForm.java GET veya POST yöntemlerini kullanarak web tarayıcısı tarafından verilen girdiyi işlemek için servlet programı.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Şimdi yukarıdaki Servlet'i derleyip dağıtın ve POST yöntemi ile Hello.htm kullanarak aşağıdaki gibi test edin -

<html>
   <body>
      <form action = "HelloForm" method = "POST">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

İşte yukarıdaki formun asıl çıktısı, Tomcat'in çalıştığı yerel makinenizde sonucu görmek için Ad ve Soyadını girmeyi deneyin ve ardından gönder düğmesine tıklayın.

Sağlanan girdiye bağlı olarak, yukarıdaki örneklerde belirtildiği gibi benzer bir sonuç üretecektir.

Onay Kutusu Verilerini Servlet Programına Aktarma

Onay kutuları, birden fazla seçeneğin seçilmesi gerektiğinde kullanılır.

İki onay kutusu içeren bir form için örnek HTML kodu CheckBox.htm

<html>
   <body>
      <form action = "CheckBox" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> 
                                          Chemistry
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Bu kodun sonucu aşağıdaki formdur

Aşağıda, checkbox butonu için web tarayıcısı tarafından verilen girdiyi işlemek için CheckBox.java servlet programı verilmiştir.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>Maths Flag : </b>: "
                  + request.getParameter("maths") + "\n" +
                  "  <li><b>Physics Flag: </b>: "
                  + request.getParameter("physics") + "\n" +
                  "  <li><b>Chemistry Flag: </b>: "
                  + request.getParameter("chemistry") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Yukarıdaki örnek için şu sonucu gösterecektir -

Reading Checkbox Data

  • Maths Flag : : on
  • Physics Flag: : null
  • Chemistry Flag: : on

Tüm Form Parametrelerini Okuma

Aşağıda, kullanan genel bir örnek yer almaktadır. getParameterNames()Kullanılabilir tüm form parametrelerini okumak için HttpServletRequest yöntemi. Bu yöntem, parametre adlarını belirtilmemiş bir sırayla içeren bir Numaralandırma döndürür

Bir Numaralandırmaya sahip olduktan sonra, ne zaman duracağımızı belirlemek için hasMoreElements () yöntemini ve her bir parametre adını almak için nextElement () yöntemini kullanarak Numaralamayı standart bir şekilde döngüye alabiliriz.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
            "<th>Param Name</th>"
            "<th>Param Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration paramNames = request.getParameterNames();

      while(paramNames.hasMoreElements()) {
         String paramName = (String)paramNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n<td>");
         String[] paramValues = request.getParameterValues(paramName);

         // Read single valued data
         if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
               out.println("<i>No Value</i>");
               else
               out.println(paramValue);
         } else {
            // Read multiple valued data
            out.println("<ul>");

            for(int i = 0; i < paramValues.length; i++) {
               out.println("<li>" + paramValues[i]);
            }
            out.println("</ul>");
         }
      }
      out.println("</tr>\n</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Şimdi, yukarıdaki sunucu uygulamasını aşağıdaki formla deneyin -

<html>
   <body>
      <form action = "ReadParams" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Şimdi yukarıdaki formu kullanarak sunucu uygulamasını çağırmak aşağıdaki sonucu üretecektir -

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Metin kutusu, radyo düğmesi veya açılır kutu gibi diğer nesnelere sahip başka herhangi bir formun verilerini okumak için yukarıdaki sunucu uygulamasını deneyebilirsiniz.