HTML form ve servlet
HTML formu tipik olarak şu şekildedir:<form name="loginForm" method="post" action="loginServlet"> Username: <input type="text" name="username"/> <br/> Password: <input type="password" name="password"/> <br/> <input type="submit" value="Login" /> </form>
Şimdi bu formu inceleyelim.
<form>
Form tagının attribute'leri şunlar:- name : formun adı.
- method: form verisi gönderilirken kullanılacak olan HTTP metodu (GET ya da POST)
- action: servlet'in URL'si (başına '/' karakteri koymamaya dikkat etmek gerekiyor)
Yani servletin map'lendiği URL.
Örneğin web.xml'deki servlet mapping alanında şunlar belirtilmişse:
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
Bu servleti formda action kısmında action="loginServlet" olarak belirtmek gerekir.
Burada olan şey, login butonuna tıklandığı anda formun verilerini bir mesaja yükleyerek servletin url'sini çağırmaktır. Servlet gereken cevabı /loginServlet URL adresinde bir html sayfası şeklinde gösterir.
Yani client /loginServlet adlı URL'yi istediğinde, servera önceden hazırlanıp konmuş olan sabit bir loginServlet.html sayfası döndürülmüyor.
Aksine, /loginServlet URL adresine maplenmiş olan, yani o adresin çağrılmasından sorumlu olan servlet dinamik olarak bir html sayfası yaratarak, belirtilen URL adresinde bu sayfayı browsera yazıyor.
İşte servletin dinamik olması buradan geliyor.
Login'e tıklandığında neler oluyor?
Form doldurulup "Login" butonuna tıklandığı anda browser servlet containera (Örneğin Tomcat server) bir HTTP POST isteği gönderir:POST .../loginServlet HTTP/1.1Bu istek mesajının body kısmında da
Host: xxx
username=asd&password=asdyazacaktır.
Servlet container (yani sunucu) bu mesajı alır. Aldığı anda service() metodu aracılığıyla gelen HTTP POST mesajını delege ederek LoginServlet instance yaratıp initialize eder(eğer henüz yaratılmamışsa). Ve bu instance'ın doPost() metodunu çalıştırır.
Servletin doPost() metodunda gelen istek bilgileri okunup cevaplanır.
<input>
Formun içinde input elemanları mevcut.input tagı kullanıcının veri girişi yapabileceği alanları belirtir.
input tagının attribute'leri:
-name: input alanının adı.
Servlet içerisinde istek parametrelerini almak için kullanılan HttpServletRequest nesnesinin getParameter(name) metodundaki name budur.
Input alanına sayı girilmesi gerekiyorsa, servlet içerisinde bunu int yada double olarak parse ederek kullanabiliriz.
- type: girilecek veri tipi.
"text" : yazı açık şekilde görülür.
"password" olursa yıldızlanarak gizlenir, ekranda şifrenin gizlenmesi sağlanır.
"checkbox" : tıklama kutusu.
"radio" : radyo butonu
"submit" olursa bir submit butonu oluşturulur. value ile verilen değer butonun üzerine yazılır.
Diğer input örnekleri
Checkboxlanguage: <input type="checkbox" name="language" value="english" />English <input type="checkbox" name="language" value="french" />French
language: English French
String languages[] = request.getParameterValues("language"); if (languages != null) { System.out.println("Languages are: "); for (String lang : languages) { System.out.println("\t" + lang); } }
Languages are: english french
Radio button
Gender: <input type="radio" name="gender" value="male" />Male <input type="radio" name="gender" value="female" />Female
Gender: Male Female
String gender = request.getParameter("gender"); System.out.println("Gender is: " + gender);
Sonuç:
Gender is: male
Text area
Feedback:<br/> <textarea rows="5" cols="30" name="feedback"></textarea>
Feedback:
String feedback = request.getParameter("feedback"); System.out.println("Yorumunuz: " + feedback);
Sonuç:
Yorumunuz: Hello!
Combobox / Dropdown
Job Category:<select name="jobCat"> <option value="tech">Technology</option> <option value="admin">Administration</option> <option value="biology">Biology</option> <option value="science">Science</option> </select>
Job Category:
String jobCategory = request.getParameter("jobCat"); System.out.println("Job category is: " + jobCategory);Sonuç:
Job category is: science
...
Hiç yorum yok:
Yorum Gönder