Burak IŞIKLI :))

Web Service ile Sıcaklık Dönüşümü

Posted in Java, Web Services by Burak IŞIKLI on 29 Temmuz 2009

Daha önceden blogumdaki Axis 2 Kullanılarak Web Servis Oluşturma adlı yazımda web servisin nasıl oluşturulacağını anlatmıştım. Fakat çok iyi bir örnek vermediğim için biraz havada kaldı. Şimdi anlatacağım örnekle konu tam anlamıyla oturmuş olacak. Web servislerde internette biraz araştırma yaparsanız en sık öne çıkan örnekler sıcaklık dönüşümü, para dönüşümü, kimlik sorgulama gibi hizmetler olacaktır. Bende bunlardan biri olan sıcaklık dönüşümünü java ve jsp kullanarak anlatacağım.

Yapacağımız programı iki aşamalı olarak anlatacağım. Birinci versiyonumuz için paket adımız “edu.burakkk.webservice.tempConverter.v1”. İlk önce birinci versiyonu yapalım.

TempConverter.java


package edu.burakkk.webservice.tempConverter.v1;

/**
 * Web Service
 * Temp Converter
 *
 *@version 1.0 Release 1
 *@author burakkk
 *
 **/

public class TempConverter{
 public String FahrenheitToCelsius(String Input) {
 if (!Input.isEmpty() && isNumber(Input)) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) - 32) / 9) * 5;
 Input = Double.toString(result);
 return Input;
 } else {
 return "ERROR! Please enter the input number...";
 }
 }

 public String CelsiusToFahrenheit(String Input) {
 if (!Input.isEmpty() && isNumber(Input)) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) * 9) / 5) + 32;
 Input = Double.toString(result);
 return Input;
 } else {
 return "ERROR! Please enter the input number...";
 }
 }

 private boolean isNumber(String num) {
 try {
 Double.parseDouble(num);
 } catch (NumberFormatException nfe) {
 return false;
 }
 return true;
 }
}

Aslında yaptığımız programı bu şekilde kullanmak doğru olmaz. Çünkü her metodu çağırmak için ayrı bir forma gerek olur ki bu da gereksiz yer, yük ve işlem getirir. Ancak bu şekilde yaparak anlatmak istediğim bir başka konu var. Bu web servis yerine başka bir web servis düşünün. Öyle ki bu web servisin iki metodundan biri özel yani sadece üyelere açık, diğeri ise public yani herkese açıktır. İşte bu işlemi bu şekilde iki ayrı metoda bölerek rahatlıkla yapabiliriz. Özel olan metoda önce kullanıcı üye mi değil mi diye üyelik testi yaptırırız. Bu sebeple de sınıfımıza private olan ayrı bir metod daha ekleriz. Bu private metod, gelen kullanıcının üye olup olmadığını kontrol eder. Örneğin boolean türünde olursa true sonuç döndürürse istediğimiz webservisin sonucunu döndürürüz aksi takdirde üye olmadığına dair hata sonucunu döndürürüz.

Bu prosesimizi(web servisimizi) kullanacağımız zaman yani çağırmak için olan prosesimizi yapalım. Aslında bunu bir web sayfası olarak JSP ile yapacağız. Ancak daha öncedende anlattığım gibi web servis genel bir konsept olduğu için her programlama dilinde yapmak mümkündür. Ben sadece örnek olarak JSP kullanacağım.

TempConverter.v1.jsp

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temp Converter</title>
</head>
<body>
<form
action='http://localhost:8080/WebService/services/TempConverter/FahrenheitToCelsius'
method="post" target="_blank">
<table>
<tr>
<td>Fahrenheit to Celsius:</td>
<td><input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Convert"></td>
</tr>
</table>
</form>

<form
action='http://localhost:8080/WebService/services/TempConverter/CelsiusToFahrenheit'
method="post" target="_blank">
<table>
<tr>
<td>Celsius to Fahrenheit:</td>
<td><input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Convert"></td>
</tr>
</table>
</form>
</body>
</html>

Ekran Görüntüsü:

Result

Sayfamızı çalıştırdığımızda yukarıdaki gibi bir ekran karşımıza gelecektir. Buraya fahrenheit olarak veya celcius olarak çevirmek istediğimiz rakamı girip convert butonuna bastığımızda karşımıza sonuç gelecektir. Ancak web servis bir xml tabanlı olduğu için sonucumuz da xml formatında gelecektir.

Programımızın ikinci aşamasına gelelim. İkinci programımızın paket adı “edu.burakkk.webservice.tempConverter.v2”dır. Web servisimizi yaratalım.

TempConverter.java


package edu.burakkk.webservice.tempConverter.v2;

/**
 * Web Service
 * Temp Converter
 *
 *@version 1.1 Release 1
 *@author Burak ISIKLI
 *
 **/

public class TempConverter {
 public String Convert(String type, String Input) {
 if (Input.isEmpty() || !isNumber(Input)) {
 return "ERROR! Please enter the input number...";
 }
 // Fahrenheit To Celsius
 if (type.equals("F")) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) - 32) / 9) * 5;
 Input = Double.toString(result);
 return Input;
 }
 // Celsius To Fahrenheit
 else if (type.equals("C")) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) * 9) / 5) + 32;
 Input = Double.toString(result);
 return Input;
 }
 return "ERROR! Please enter the input number...";

 }

 private boolean isNumber(String num) {
 try {
 Double.parseDouble(num);
 } catch (NumberFormatException nfe) {
 return false;
 }
 return true;
 }
}

Bu prosesimiz bir öncekinden biraz daha farklı oldu. Bu prosesimizde tek fonksiyonda olayı çözdük. Ancak fahrenheit mı celcius mu olduğunu kısaca hangi tür olduğunu kullancıdan başkan bir değişken isteyerek yaptık. Bu istediğimiz değişkeni formda belirleyerek programa derdimizi anlattık. Böylelikle tek hamlede istediğimiz web servisi yapmış olduk. Aslında benim yaptığım hata döndürme olaylarını da web tarafında yapmak daha doğru olur. Basit bir örnek vermek istediğim için detaylı incelemedim. Formda javascriptle gerekli eklemeler yapılarak hatta ajax kullanılarak çok daha kullanışlı bir sayfa yapmak mümkün olabilir.

TempConverter.v1.1.jsp

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temp Converter</title>
</head>
<body>
<form
 action='http://localhost:8080/WebService/services/TempConverter/Convert'
 method="post">
<table>
<tr>
<td>Enter the input number: <input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td><input type="radio" name="type" value="F" /> Fahrenheit
 <input type="radio" name="type" value="C" checked /> Celsius</td>
</tr>
<tr>
<td align="left"><input type="submit" value="Convert"
 class="button"></td>
</tr>
</table>
</form>
</body>
</html>

Ekran Görüntüsü:

Result-245 Celcius’u Fahrenheit’e çevirmek istediğimizde karşımıza gelen ekran şu şekilde olacaktır.

Ekran Görüntüsü:

Result-3

2 Yanıt

Subscribe to comments with RSS.

  1. mert said, on 2 Kasım 2013 at 22:16

    type Status report

    message /WebService/services/Web_Service/FahrenheitToCelsius

    description The requested resource is not available.

    ——————————————————————————–

    Apache Tomcat/6.0.37

    jsp çalışıyor ama convert butonuna tıkladığımda yukarıdaki hatayı alıyorum.Bu hatayı nasıl düzeltebilirim.

  2. mert said, on 2 Kasım 2013 at 23:41

    Acaba web.xml dosyasına eklemem gereken bir şey mi var?


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: