12 Mart 2015 Perşembe

HTML form ve servlet

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.1
Host: xxx
Bu istek mesajının body kısmında da
username=asd&password=asd 
yazacaktı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

Checkbox

language:
<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