<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bilgisayar Kavramları &#187; Web Teknolojileri</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/networkag/web-teknolojileri/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Büyük Tablo (Big Table)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 19:40:13 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Veri Tabanı (Database)]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6072</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Google tarafından geliştirilen ve arama motoru tasarımında kullanılan yaklaşımdır. Kısaca amaç, web sayfalarının daha başarılı bir şekilde depolanması (storing), bulunması (finding) ve güncellenmesidir (updating) . Google&#8217;ın konuya yaklaşımı, ucuz bilgisayarlar tarafından yüksek miktarda verinin tutulması ve işlenmesi yönündedir. Bu yaklaşımın genel bir görüntüsü aşağıdaki şekilde çizilebilir: Yukarıdaki şekilde görüldüğü üzere, bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Google tarafından geliştirilen ve arama motoru tasarımında kullanılan yaklaşımdır. Kısaca amaç, web sayfalarının daha başarılı bir şekilde depolanması (storing), bulunması (finding) ve güncellenmesidir (updating) .</p>
<p>Google&#8217;ın konuya yaklaşımı, ucuz bilgisayarlar tarafından yüksek miktarda verinin tutulması ve işlenmesi yönündedir. Bu yaklaşımın genel bir görüntüsü aşağıdaki şekilde çizilebilir:</p>
<p><img title="buyuktablo.png" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/buyuktablo.png" alt="Buyuktablo" width="350" height="324" border="0" /></p>
<p>Yukarıdaki şekilde görüldüğü üzere, bir büyük mantıksal tablo, çok sayıda küçük tabletlere bölünmüştür. Diğer bir deyişle, aslında tek bir bilgisayarda işlenecek olan mantıksal tablo, çok sayıda ufak ve nispeten daha ucuz bilgisayar tarafından işlenebilmekte / tutulabilmektedir.</p>
<p>Büyük tablo yaklaşımında, veriler aşağıdaki şekilde tutulmaktadır:</p>
<table border="1">
<tbody>
<tr>
<td>Örnek Site</td>
<td>Site Metni</td>
<td>çıpa (anchor) 1</td>
<td>çıpa (anchor)2</td>
<td>Başlık (title)</td>
</tr>
<tr>
<td>www.bilgisayarkavramlari.com</td>
<td>Sitedeki metin</td>
<td>www.sadievrenseker.com</td>
<td>www.shedai.net</td>
<td>bilgisayar mühendisliği</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki tabloda gösterildiği üzere, herhangi bir büyük tablo kayıdında, sitenin adresi, sitenin metin kısmı, sitede bulunan bağlantılar (link, anchor, çıpa) vey sitenin başlığı tutulmaktadır.</p>
<p>Büyük tablo (big table) yaklaşımında, herhangi bir veriye erişmek için, erişilecek olan hücrenin, zaman bilgisi, satır bilgisi ve kolon bilgisine ihtiyaç duyulur. Örneğin yukarıdaki örnek sitenin fihristlendiği (indexing) zaman, sitenin adresi ve hangi bilgisine erişileceği (örneğin sitenin içeriği olan metin) bilgileri birleştirilerek bir erişim sağlanabilir.</p>
<p>Büyük tablo kullanımının avantajları aşağıdaki şekilde sıralanabilir.</p>
<ul>
<li>Özel bir sorgulama diline (query language) ihtiyaç duyulmaz ve dolayısıyla sorgulama dilinin iyileştirilmesi (query optimisation) gibi özel adımlara gerek yoktur.</li>
<li>Sadece satır seviyesinde işlemler gerçekleştirilir. Yani ilişkisel veritabanı (relational database) tasarımında olduğu üzere, <a href="http://www.bilgisayarkavramlari.com/2009/01/14/birlestirme-join/">tablolar arasında birleştirme (join)</a>gibi işlemlere gerek yoktur.</li>
<li>Tabletler, bütün büyük tablo (big table) sisteminde bulunan sunucular tarafından erişilebilir durumda tutulurlar.</li>
<li>Ayrıca yapılan her işlem ilave bir işlem kütüğünde (transaction log) tutulur ve bu kütüğe bütün sunucular erişebilir.</li>
<li>Sunuculardan birisinin bozulması durumunda, diğer sunuculardan birisi bu işlem kütüğüne erişerek bozulan sunucunun görevini üstlenebilir.</li>
</ul>
<p>Büyük tablonun en önemli avantajlarından birisi, satır bazında bir limitinin olmamasıdır. Yani her kayıt için sınırsız sayıda bağlantı tutulması gerekebilir. Önceden bir sayı belirlenmesi, iki yönlü olarak probleme sebep olabilirdi. Örneğin her sayfa başına 100 bağlantı tutma limiti gelmiş olsaydı, daha az olan sayfalar için gereksiz yere hafızada yer işgal edilecek, daha fazla olan sayfalar için de bağlantıların sadece ilk 100 tanesinin tutulup, geri kalanının tutulamaması gibi bir durum ortaya çıkacaktı.</p>
<p>Bu yaklaşımla, ayrıca disk erişimi de azaltılmış olur çünkü bir erişimde, site ile ilgili bütün bilgilerin okunması mümkündür. Alternatif olarak ilişkisel bir veritabanı kullanılması durumunda, site ile ilgili bilgilerin okunması ancak bütün tablolara erişildikten sonra mümkün olacaktı.</p>
<p>Elbette büyük tablo yaklaşımının karşılaştığı problemler de bulunur. Örneğin, aynı kaydın birden fazla kere geçmesi bir risktir. Örneğin aynı içeriğin internet üzerinde içerik hırsızları tarafından kopyalanması, aynı içeriğin bir kısmının aynı kaldığı yeni sürümlerinin çıkması, intihal olarak çalıntı içeriğin bulunması, çoklu gönderiler (spam, mass message) ile aynı içeriğin birden fazla divan (forum ) ve tartışma sitelerinde bulunması veya kopya siteler bu tip içerik tekrarlarının başlıca sebepleridir. Yapılan çalışmalarda, geniş kapsamlı bir <a href="http://www.bilgisayarkavramlari.com/2008/12/09/web-emeklemesi-web-crawling/">web emeklemesi (web crawling)</a> sonucu, dolaşılan sayfaların %30&#8242;luk bir bölümü, geri kalan %70&#8242;lik bölüm içerisinde tam veya benzer içerikte kopyalar bulundurmaktadır (diğer bir deyişle sadece %40&#8242;lık bir kesimin benzeri veya tam kopyası bulunmamakta %60&#8242;lık kesim ise benzer veya tam kopya olarak internette bulunmaktadır. Bu problemin çözümü için tekrarların bulunması gerekir (duplicate detection).</p>
<p>Tekrar bulma işlemi iki seviyede yapılabilir. Birincisi tam tekrarın bulunmasıdır ki buradaki amaç, birebir kopyalanan içerikleri eşleştirmektir. Diğer bir yaklaşım ise benzerliklerin bulunması ve belirli bir benzerlik seviyesinin üzerinde olan içeriklerin eşleştirilmesidir. Örneğin şu anda yazmakta olduğum yazıyı, kopyalayarak, yazar kısmına kendi ismini yazan birisi ile bu sayfadaki içeriğin eşleşmesi gerekir. Sonuçta birebir aynı değildir ama çok yakın içeriktedirler ve iki sayfa için ayrı ayrı sunucuda kaynak kullanılması problem oluşturabilir.</p>
<p>Tam benzerliğin bulunması için toplam kontrolü (checksum) yöntemleri kullanılır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2008/01/12/crc-cyclic-redundancy-check-cevrimsel-fazlalik-sinamasi/">CRC (cyclic redundancy check)</a> ve benzer algoritmalar ile sayfaların toplam kontrolü yapılır ve eşleştirilir.</p>
<p>Benzer sitelerin bulunması için de geliştirilmiş algoritmalar vardır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2011/11/19/simhash-benzerlik-ozeti/">SimHash algoritması (benzerlik özeti)</a> bu algoritmalara bir örnektir ve google tarafından da kullanılmaktadır.</p>

<p class="sayac_bilgi">270 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/20/buyuk-tablo-big-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DOM (DNM)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/26/dom-dnm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/26/dom-dnm/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 16:58:50 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/26/dom-dnm/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER DOM yani İngilizcedeki Document Object Modelling veya Türkçe karşılığı ile Doküman Nesne Modellemesi basitçe bir işaretleme dili (genellikle HTML veya XML gibi bir dil) için etiketlere (tags) erişmeyi sağlayan bir erişim yöntemidir. Günümüzde SAX ve DOM en yaygın olarak kullanılan erişim yöntemledir. SAX daha çok tek seferde işlenen ve ardışık [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>DOM yani İngilizcedeki Document Object Modelling veya Türkçe karşılığı ile Doküman Nesne Modellemesi basitçe bir işaretleme dili (genellikle <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML</a> veya <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML</a> gibi bir dil) için etiketlere (tags) erişmeyi sağlayan bir erişim yöntemidir.
</p>
<p>Günümüzde SAX ve DOM en yaygın olarak kullanılan erişim yöntemledir. SAX daha çok tek seferde işlenen ve ardışık olarak etiketlere erişileceği durumlarda kullanılır. DOM ise bir dokümanı ağaç yapısına benzer şekilde ele alır ve bir ağacın çocuklarına (children) erişir gibi dokümandaki etiketlere erişim sağlar.
</p>
<p>Öncelikle DSO ile bir xml dosyasında yapabileceğimiz işlemleri inceleylim:
</p>
<p><strong>DSO: Data Shared Object<br />
</strong></p>
<p>xml dokumanlari aslinda birer DSOdur. Yani ufak birer <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">databasedirler</a>.<a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML</a> dokumanlarinin ise bu DSO&#8217;lari kullanmasi mumkundur. Bir html dokumaninin icine:
</p>
<p>&lt;XML ID=&#8221;dsoBook&#8221; SRC=&#8221;http://www.shedai.net/documents/Book.xml&#8221;&gt;
</p>
<p>&lt;/XML&gt;
</p>
<p>seklinde bir satir eklerseniz, bu <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">xml</a> dokumanina <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">html</a> komutlariyla erisiminiz mumkun olur.
</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">Database konularindan</a> bilindigi uzere: Her tablonun alanlari vardir. Ve her kayit bu tablodaki alanlari doldurur. Mesela: calisan tablosu:
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:205px"/>
<col style="width:205px"/>
<col style="width:205px"/></colgroup>
<tbody valign="top">
<tr>
<td colspan="3" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  outset black 0.75pt; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>ISIM</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  outset black 0.75pt; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>SOYISIM</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  outset black 0.75pt; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>BOLUM</p>
</td>
</tr>
<tr>
<td colspan="3" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Ali</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Gelir</p>
</td>
<td vAlign="bottom" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>14</p>
</td>
</tr>
<tr>
<td colspan="3" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Selami</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Gider</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>-</p>
</td>
</tr>
<tr>
<td colspan="3" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Veli</p>
</td>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>Bakar</p>
</td>
<td vAlign="bottom" style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  none; border-left:  none; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>10</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>Seklindeki bir tabloda, ISIM, SOYISIM, BOLUM gibi bilgiler birer alandir. [ali,gelir,14],[selami,gider,-] gibi bilgilerde kayittir.
</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML dokumaninin</a> database gibi kullanilmasina gelince, <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">her xml dokumani</a> bir tablo, her yeni komut bit kayit, ve her komutun alt komutu da birer alandir. Yani yukaridaki tabloyu xml&#8217;e uyarlarsak:
</p>
<p>&lt;calisan&gt;
</p>
<p>&lt;eleman&gt;
</p>
<p>&lt;isim&gt;ali&lt;/isim&gt;
</p>
<p>&lt;soyisim&gt;gelir&lt;/soyisim&gt;
</p>
<p>&lt;bolum&gt;14&lt;/bolum&gt;
</p>
<p>&lt;/eleman&gt;
</p>
<p>&lt;eleman&gt;
</p>
<p>&lt;isim&gt;Selami&lt;/isim&gt;
</p>
<p>&lt;soyisim&gt;Gider&lt;/soyisim&gt;
</p>
<p>&lt;/eleman&gt;
</p>
<p>&lt;eleman&gt;
</p>
<p>&lt;isim&gt;Veli&lt;/isim&gt;
</p>
<p>&lt;soyisim&gt;Bakar&lt;/soyisim&gt;
</p>
<p>&lt;bolum&gt;10&lt;/bolum&gt;
</p>
<p>&lt;/eleman&gt;
</p>
<p>&lt;/calisan&gt;
</p>
<p>seklinde bir xml dokumani elde ederiz.
</p>
<p>Peki bir html komutunu, bir xml komutuna nasil baglariz?
</p>
<p>Iki turlu baglamamiz mumkun.
</p>
<ul>
<li>Tablo bazli baglama
</li>
<li>Kayit bazli baglama
</li>
</ul>
<p>
 </p>
<p>Once tablo baglamaya bakalim. Simdi bizim mesur inventory.xml dosyasi icin bir html olusturalim.
</p>
<p>
 </p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:615px"/></colgroup>
<tbody valign="top">
<tr>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  outset black 0.75pt; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>&lt;!&#8211; File Name: Inventory Table.htm &#8211;&gt;
</p>
<p>&lt;HTML&gt;
</p>
<p>&lt;HEAD&gt;
</p>
<p>&lt;TITLE&gt;Book Inventory&lt;/TITLE&gt;
</p>
<p>&lt;/HEAD&gt;
</p>
<p>&lt;BODY&gt;
</p>
<p>&lt;XML ID=&#8221;dsoInventory&#8221; SRC=&#8221;Inventory.xml&#8221;&gt;&lt;/XML&gt;
</p>
<p>&lt;H2&gt;Book Inventory&lt;/H2&gt;
</p>
<p>&lt;TABLE DATASRC=&#8221;#dsoInventory&#8221; BORDER=&#8221;1&#8243; CELLPADDING=&#8221;5&#8243;&gt;
</p>
<p>&lt;THEAD&gt;
</p>
<p>&lt;TH&gt;Title&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Author&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Binding&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Pages&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Price&lt;/TH&gt;
</p>
<p>&lt;/THEAD&gt;
</p>
<p>&lt;TR ALIGN=&#8221;center&#8221;&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;TITLE&#8221;
</p>
<p>STYLE=&#8221;font-style:italic&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;AUTHOR&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;BINDING&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;PAGES&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;PRICE&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;/TR&gt;
</p>
<p>&lt;/TABLE&gt;
</p>
<p>&lt;/BODY&gt;
</p>
<p>&lt;/HTML&gt;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Bu kodun calisan hali asagidadir:
</p>
<p><img align="left" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/102609_1658_DOMDNM1.gif" alt=""/><br/>Buradaki en onemli satir:
</p>
<p>&lt;TABLE DATASRC=&#8221;#dsoInventory&#8221; &#8230;
</p>
<p>satiridir. Bu satirla, table komutumuzun bilgileri #dsoInventory&#8217;den okumasi gerektigini soyluyoruz. (ki #dsoInventory daha oncede belirttigimiz gibi &lt;XML ID=&#8221;dsoInventory&#8221; SRC=&#8221;Inventory.xml&#8221;&gt;&lt;/XML&gt; satiriyla tanimlanmis bir xml kaynagidir.)
</p>
<p>Peki <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">html</a> bu alanlardan hangisini table&#8217;in hangi bolmesine yazacagini nasil anliyor?
</p>
<p>Iste bunu yapanda &lt;TD&gt;&lt;SPAN DATAFLD=&#8221;AUTHOR&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt; seklindeki satirlar.
</p>
<p><strong>Biraz daha HTML baglantisi<br />
</strong></p>
<p>Simdi bu xml, html baglantisini bir adim daha ileri goturerek, asagidaki goruntuyu elde etmeye calisalim:
</p>
<p>
 </p>
<p><img align="left" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/102609_1658_DOMDNM2.gif" alt=""/><br/>
	</p>
<p>Yukaridaki goruntuyu elde etmek icin, ONCLICK ozellikleri ve DATAPAGESIZE=&#8221;5&#8243; gibi yeni komutlari iceren asagidaki kodu yazmamiz gerekiyor.
</p>
<div>
<table style="border-collapse:collapse" border="0">
<colgroup>
<col style="width:615px"/></colgroup>
<tbody valign="top">
<tr>
<td style="padding-top: 4px; padding-left: 4px; padding-bottom: 4px; padding-right: 4px; border-top:  outset black 0.75pt; border-left:  outset black 0.75pt; border-bottom:  outset black 0.75pt; border-right:  outset black 0.75pt">
<p>&lt;HTML&gt;
</p>
<p>&lt;BODY&gt;
</p>
<p>&lt;XML ID=&#8221;dsoInventory&#8221; SRC=&#8221;Inventory Big.xml&#8221;&gt;&lt;/XML&gt;
</p>
<p>&lt;H2&gt;Book Inventory&lt;/H2&gt;
</p>
<p>&lt;BUTTON ONCLICK=&#8221;InventoryTable.firstPage()&#8221;&gt;
</p>
<p>|&amp;lt; First Page
</p>
<p>&lt;/BUTTON&gt;
</p>
<p>&amp;nbsp;&amp;nbsp;
</p>
<p>&lt;BUTTON ONCLICK=&#8221;InventoryTable.previousPage()&#8221;&gt;
</p>
<p>&amp;lt; Previous Page
</p>
<p>&lt;/BUTTON&gt;
</p>
<p>&amp;nbsp;&amp;nbsp;
</p>
<p>&lt;BUTTON ONCLICK=&#8221;InventoryTable.nextPage()&#8221;&gt;
</p>
<p>Next Page &amp;gt;
</p>
<p>&lt;/BUTTON&gt;
</p>
<p>&amp;nbsp;&amp;nbsp;
</p>
<p>&lt;BUTTON ONCLICK=&#8221;InventoryTable.lastPage()&#8221;&gt;
</p>
<p>Last Page &amp;gt;|
</p>
<p>&lt;/BUTTON&gt;
</p>
<p>&lt;p&gt;
</p>
<p>&lt;TABLE ID=&#8221;InventoryTable&#8221; DATASRC=&#8221;#dsoInventory&#8221;
</p>
<p>DATAPAGESIZE=&#8221;5&#8243; BORDER=&#8221;1&#8243; CELLPADDING=&#8221;5&#8243;&gt;
</p>
<p>&lt;THEAD&gt;
</p>
<p>&lt;TH&gt;Title&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Author&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Binding&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Pages&lt;/TH&gt;
</p>
<p>&lt;TH&gt;Price&lt;/TH&gt;
</p>
<p>&lt;/THEAD&gt;
</p>
<p>&lt;TR ALIGN=&#8221;center&#8221;&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;TITLE&#8221;
</p>
<p>STYLE=&#8221;font-style:italic&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;AUTHOR&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;BINDING&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;PAGES&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;TD&gt;&lt;SPAN DATAFLD=&#8221;PRICE&#8221;&gt;&lt;/SPAN&gt;&lt;/TD&gt;
</p>
<p>&lt;/TR&gt;
</p>
<p>&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>
 </p>
<p>
 </p>
<p><strong>JavaScript kullanarak XML uzerinde arama yapmak:<br />
</strong></p>
<p>&lt;XML ID=&#8221;dsoInventory&#8221; SRC=&#8221;Inventory Big.xml&#8221;&gt;&lt;/XML&gt;
</p>
<p>&lt;H2&gt;Find a Book&lt;/H2&gt;
</p>
<p>Title text: &lt;INPUT TYPE=&#8221;TEXT&#8221; ID=&#8221;SearchText&#8221;&gt;&amp;nbsp
</p>
<p>&lt;BUTTON ONCLICK=&#8217;FindBooks()&#8217;&gt;Search&lt;/BUTTON&gt;
</p>
<p>&lt;HR&gt;
</p>
<p>Results:&lt;P&gt;
</p>
<p>&lt;DIV ID=ResultDiv&gt;&lt;/DIV&gt;
</p>
<p>&lt;SCRIPT LANGUAGE=&#8221;JavaScript&#8221;&gt;
</p>
<p>function FindBooks ()
</p>
<p>{
</p>
<p>SearchString = SearchText.value.toUpperCase();
</p>
<p>if (SearchString == &#8220;&#8221;)
</p>
<p>{
</p>
<p>ResultDiv.innerHTML = &#8220;&amp;ltYou must enter text into &#8221;
</p>
<p>+ &#8220;&#8216;Title text&#8217; box.&amp;gt&#8221;;
</p>
<p>return;
</p>
<p>}
</p>
<p>dsoInventory.recordset.moveFirst();
</p>
<p>ResultHTML = &#8220;&#8221;;
</p>
<p>while (!dsoInventory.recordset.EOF)
</p>
<p>{
</p>
<p>TitleString = dsoInventory.recordset(&#8220;TITLE&#8221;).value;
</p>
<p>
 </p>
<p>if (TitleString.toUpperCase().indexOf(SearchString)
</p>
<p>&gt;=0)
</p>
<p>ResultHTML += &#8220;&lt;I&gt;&#8221;
</p>
<p>+ dsoInventory.recordset(&#8220;TITLE&#8221;)
</p>
<p>+ &#8220;&lt;/I&gt;, &#8221;
</p>
<p>+ &#8220;&lt;B&gt;&#8221;
</p>
<p>+ dsoInventory.recordset(&#8220;AUTHOR&#8221;)
</p>
<p>+ &#8220;&lt;/B&gt;, &#8221;
</p>
<p>+ dsoInventory.recordset(&#8220;BINDING&#8221;)
</p>
<p>+ &#8220;, &#8221;
</p>
<p>+ dsoInventory.recordset(&#8220;PAGES&#8221;)
</p>
<p>+ &#8221; pages, &#8221;
</p>
<p>+ dsoInventory.recordset(&#8220;PRICE&#8221;)
</p>
<p>+ &#8220;&lt;P&gt;&#8221;;
</p>
<p>dsoInventory.recordset.moveNext();
</p>
<p>}
</p>
<p>if (ResultHTML == &#8220;&#8221;)
</p>
<p>ResultDiv.innerHTML = &#8220;&amp;ltno books found&amp;gt&#8221;;
</p>
<p>else
</p>
<p>ResultDiv.innerHTML = ResultHTML;
</p>
<p>}
</p>
<p>&lt;/SCRIPT&gt;
</p>
<p>
 </p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML dokumanlarini</a> nasil JavaScript ve dom yardimiyla kullaniriz bir bakalim.
</p>
<p>Bir html sayfasina DSO eklemeyi yukaridaki orneklerde gosterdik. Simdi asagidaki ornek html kodunu inceleyelim.
</p>
<p>&lt;SCRIPT LANGUAGE=&#8221;JavaScript&#8221; FOR=&#8221;window&#8221; EVENT=&#8221;ONLOAD&#8221;&gt;
</p>
<p>Document = dsoBook.XMLDocument;
</p>
<p>title.innerText=
</p>
<p>Document.documentElement.childNodes(0).text;
</p>
<p>author.innerText=
</p>
<p>Document.documentElement.childNodes(1).text;
</p>
<p>binding.innerText=
</p>
<p>Document.documentElement.childNodes(2).text;
</p>
<p>pages.innerText=
</p>
<p>Document.documentElement.childNodes(3).text;
</p>
<p>price.innerText=
</p>
<p>Document.documentElement.childNodes(4).text;
</p>
<p>&lt;/SCRIPT&gt;
</p>
<p>Yukaridaki kod, JavaScript ile DOM parser&#8217;ini kullanarak, XML dokumanina erisiyor. DOM, xml dokumanlarini parcalarken agac yapisina benzer bir yapi kullanir. Ve her yeni xml komutu (<a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">database mantigina gore</a> kayidi) birer childNode olur.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/102609_1658_DOMDNM3.png" alt=""/>
	</p>
<p>Ornegin yukaridaki sekilde her bir book ogesi documentElement&#8217;in birer childNode&#8217;udur. Ve her book ogesininde beser adet childNode&#8217;u vardir.</p>

<p class="sayac_bilgi">93 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/26/dom-dnm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Çerezler (Cookies)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 16:54:28 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3358</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER İçerik Çerezlerin internet gezgininde ayarlanması Çerezlerin HTTP protokolü üzerinden çalışması PHP dilinde çerez kullanımı JSP dilinde çerez kullanımı ASP dilinde çerez kullanımı Çerezler ve güvenlik İneternet üzerinde, özellikle de web sayfaları üzerinde gezinirken kullanılan ufak kayıt dosyalarına verilen isimdir. Basitçe bir web sitesi internet üzerinden yayın yaparken bazan bağlanan kullanıcılar [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p class="shutter">İçerik<br />
<a href="#1">Çerezlerin internet gezgininde ayarlanması</a><br />
<a href="#2">Çerezlerin HTTP protokolü üzerinden çalışması</a><br />
<a href="#3">PHP dilinde çerez kullanımı</a><br />
<a href="#4">JSP dilinde çerez kullanımı</a><br />
<a href="#5">ASP dilinde çerez kullanımı</a><br />
<a href="#6">Çerezler ve güvenlik</a></p>
<p>İneternet üzerinde, özellikle de web sayfaları üzerinde gezinirken kullanılan ufak kayıt dosyalarına verilen isimdir. Basitçe bir web sitesi internet üzerinden yayın yaparken bazan bağlanan kullanıcılar hakkında bilgi tutma ihtiyacı duyar. Genelde bu bilgiyi tutmanın iki yolu vardır. Birincisi <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu</a> üzerindeki bir veri tabanı veya farklı bir veri saklama yapısı içinde tutulması. Diğeri ise <a href="http://www.bilgisayarkavramlari.com/2007/12/13/istemci-client-talebe/">istemci (client)</a> üzerinde saklamak.</p>
<p>Bu yazının konusu istemci (client) üzerinde veri saklama teknolojilerinden çerez ismi verilen (cookie) dosyaları anlatmaktır.</p>
<p>Literatürde, çerezler <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü üzerinden</a> taşındıkları için HTTP çerezleri (http cookie) olarak da geçmektedirler.</p>
<p><strong><a name="1"></a>Çerezlerin internet gezgininde ayarlanması</strong></p>
<p>Çerezlerin detayına ve programlamasına geçmeden önce çerezleri kullanıcıların kendi bilgisayarlarında nasıl ayarlayabileceklerini açıklayalım (ekran görüntüleri ve menü yerleri Firefox 3 sürümünden alınmıştır) . Örneğin firefox internet gezginindeki çerez ayarları aşağıdaki şekilde yapılabilir :</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez1.jpg"><img class="alignnone size-full wp-image-3359" title="cerez1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez1.jpg" alt="cerez1" width="492" height="265" /></a></p>
<p>Öncelikle ayarların yapılacağı ekrana Araçlar &gt; Seçenekler tıklanarak girilebilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez2.jpg"><img class="alignnone size-full wp-image-3360" title="cerez2" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez2.jpg" alt="cerez2" width="506" height="450" /></a></p>
<p>Yukarıda görüldüğü şekilde açılan seçenekler diyaloğunda Gizlilik sekmesi altında Çerezler bölümü bulunmaktadır. Bu bölümde istenirse sitelerin çerez bırakmasına izin verilebilir veya bu izin kaldırılabilir.</p>
<p>Temel olarak kullanıcıların böyle bir izni verme veya kaldırma hakkı bulunmaktadır çünkü sonuçta site tarafından kullanıcının bilgisayarına bir dosya kaydedilecektir. Yazının ilerleyen kısımlarında da anlatılacağı üzere bu izin kötü amaçla kullanılabilmekte ve kullanıcılar için tehdit oluşturabilmektedir. Dolayısıyla kullanıcı dilerse bu seçeneği kapatabilir.</p>
<p>Bu temel özellik bütün internet gezginlerinde ortak olmakla beraber yukarıdaki resimde de görüldüğü üzere Firefox internet gezgininde ilave bazı özellikler bulunmaktadır. Bunlardan birincisi ayrıaclık tanıma özelliğidir. Kullanıcılar isterlerse site bazlı olarak özel ayar yapabilirler ve kuralı sadece belirli sitelere uygulayabilirler.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez3.jpg"><img class="alignnone size-full wp-image-3361" title="cerez3" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez3.jpg" alt="cerez3" width="406" height="367" /></a></p>
<p>Örneğin yukarıdaki resimde ayrıcalık diyaloğu açıldığında çıkan ekran bulunmaktadır. Burada www.bilgisayarkavramlari.com sitesine izin verilmiştir. Benzer şekilde www.sadievrenseker.com sitesi eklenmek üzere yazılmıştır. Dilenirse Engelle düğmesi ile engellenebilir veya izin ver düğmesi ile izin verilebilir. Ortada bulunan Oturum boyunca izin ver düğmesi ise siteye bir girişlik izin vermek ve siteden çıkıldıktan sonra çerezin temizlenmesi anlamına gelir.</p>
<p>Eklenen siteler istenirse alt tarafta bulunan siteyi sil veya tüm siteleri sil düğmeleri ile silinebilir.</p>
<p>Ayarlar ekranından çerezleri göster düğmesi ile de aşağıdaki ekrana geçilebilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez4.jpg"><img class="alignnone size-full wp-image-3362" title="cerez4" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez4.jpg" alt="cerez4" width="405" height="337" /></a></p>
<p>Bu ekranda site bazlı olarak çerezlere ve bilgilerine erişmek mümkündür. Bilgisayarımıza bir sitenin bıraktığı çerezi ve detaylarını buradan görebiliriz. Elbette çoğu site çerez içeriği olarak şifreli bilgi tutmaktadır. Bunun sebebini güvenlik kısmında anlayacağız.</p>
<p>Çerezlerin yukarıdaki ekranda da görüldüğü üzere bitiş tarihleri bulunmaktadır. Yani bir çerez istenirse belirli bir süreliğine yollanabilir. Örneğin sitemize giren kişinin alışveriş sırasında sepetine eklediği eşyaların sadece 1 saat boyunca geçerli olmasını bundan sonra tekrar sitemize girerse sepetinin boşalmasını istiyor olalım. Bu durumda çerezi oluştururken bitiş tarihi olarak 1 saat ileri tarihi eklememiz yeterli olacaktır.</p>
<p>Internet gezginleri süresi dolan çerezleri saklamaz (veya saklamayabilir) yani bu tip süresi dolmuş çerezlerin silinip silinmemesi internet gezgininin insiyatifindedir ancak yine de süres dolan çerezlerin kullanılamayacağını bilmemiz yeterlidir.</p>
<p><strong><a name="2"></a>Çerezlerin çalışması</strong></p>
<p>Bir çerez, normal bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketi </a>ile kullanıcı tarafından talep edilir ve <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu tarafından</a> oluşturularak kullanıcıya yollanır.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü</a> üzerinden yapılan veri transferi request / response (talep / arz  (istek cevap) ) şeklinde olmaktadır. Yani<a href="http://www.bilgisayarkavramlari.com/2007/12/13/istemci-client-talebe/"> istemci (müşteri , client)</a> bilgisayarı <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu (server) </a>bilgisayarından bir bilgiyi talep eder (request) ve sunucu bilgisayar bu bilgiye cevap olarak bir sonuç arz eder.</p>
<p>Bu iletişim şeklinde arz edilen (sunucudan döenen) bilgi içerisinde bir çerez bilgisi bulunabilir. Bu bilgiyi <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü </a>desteklemektedir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez5.jpg"></a><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez6.jpg"><img class="alignnone size-full wp-image-3364" title="cerez6" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez6.jpg" alt="cerez6" width="482" height="448" /></a></p>
<p>Örneğin yukarıdaki şekilde adım adım bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü</a> üzerinden iletişim temsil edilmiştir. Önce istemci tarafı internet üzerinden bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketi </a>ile www.bilgisayarkavramlari.com sitesinde bulunan index.html dosyasını talep etmektedir.</p>
<p>Ardından sunucu bu talebe yine bir<a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/"> HTTP paketi</a> ile cevap vermektedir. Bu paketin içeriğine dikkat edilecek olursa cevap <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP 1.1 sürümü</a> ile yapıldığını göstermektedir. Ayrıca 200 OK mesajı dönülmüştür. Yani istenen sayfanın bulunduğu ve başarılı bir talep olduğu anlamında bir HTTP kodu ile talep cevaplanmıştır.</p>
<p>Burada <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketinde</a> bizim için önemli olan Set-Cookie bökümüdür. Bu bölümde bir çerez&#8217;in istemciye yollandığı ifade edilmektedir ve isim=değer ibaresiyle herhangi bir bilgi istemciye çerez olarak yüklenmi olur.</p>
<p>Buradaki isim=değer bizim belirlediğimiz bir ismin değeridir. Örneğin : &#8220;Giriştarihi = 28102009 &#8221; şeklinde bir bilgi olabilir.</p>
<p>Bu şekilde istemci tarafı bilgiyi talep ettikten ve içeriğinde çerez bulunan bir bilgi geldikten sonra bir önceki bölümde açıkladığımız üzere bu bilgi bilgisayarımızda bir dosya olarak saklanır.</p>
<p>Bundan sonraki talepler (farklı sayfa veya aynı sayfanın tekrar talep edilmesi gibi), bu çerez bilgisi de <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketine</a> ilave edilir.</p>
<p><strong><a name="3"></a>PHP dilinde çerez programlama </strong></p>
<p>Sunucu tarafı betik dili (server side scripting language) php ile çerez programlamak mümkündür. Bir php sayfasında çerez belirlemek için aşağıdaki satırlar kullanılır:</p>
<pre>&lt;?php
<span style="color: #ff0000;">setcookie("kullanici", "Şadi Evren ŞEKER", time()+3600);</span>
?&gt;</pre>
<p>Yukarıdaki örnek kodda php sayfasında setcookie fonksiyonu marifetiyle &#8220;kullanici&#8221; adında bir değişken tanımlanmış ve içeriğine Şadi Evren ŞEKER bilgisi eklenmiştir. Fonksiyonun son parametresi ise çerezin yaşam süresidir. Burada yine php içerisinde tanımlı olan time() fonksiyonu kullanılarak mevcut zaman bilgisi sistemden (sunucunun saatinden) okunmuş ve bu süreye 3600 saniye (tam olarak 60 dakika veya 1 saat) ilave edilerek çerezin geçerli olacağı son an belirlenmiştir.</p>
<p>Yukarıdaki kodda belki dikkat çekmeyebilir ancak setcookie fonksiyonu her zaman için sayfanın en başında bulunmalıdır. Bunun sebebi daha önce de açıkladığımız HTTP paketinin başlık kısmında yer alan bir bilgi olmasıdır. Şayet sayfanın içeriğinde bir yerlerde bu bilgi gönderilirse <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolünün</a> bu bilgiyi ayırma şansı kalmaz.</p>
<p>Sitemizde yukarıdaki sayfa ile bir çerez üretilerek bu çerezin içerisinde kullanici=Şadi Evren ŞEKER bilgisi konulmuştur. Bu bilgiye erişilmek istendiğinde (yine bu sayfadan veya aynı sitedeki herhangi başka bir sayfadan) aşağıdaki şekilde ulaşılabilir:</p>
<pre>&lt;?php
<span style="color: #ff0000;">echo $_COOKIE["kullanici"];
print_r($_COOKIE);</span>
?&gt;</pre>
<p>Yukarıdaki kodun ilk satırı  ile $_COOKIE sistem değişkeni (ki bu değişken bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizidir (array)</a> ) içerisinde bulunan &#8220;kullanici&#8221; bilgisine erişilmiştir. Bu dizinin tamamının içeriğini görmek için ikinci satırda bulunan ve dizi içeriğini basmaya yarayan print_r fonksiyonundan yararlanılabilir.</p>
<p><strong><a name="4"></a>JSP dilinde çerez programlama</strong></p>
<p>JAVA&#8217;nın web tabanlı arayüzü kabul edebileceğimiz <a href="http://www.bilgisayarkavramlari.com/2009/01/01/1603/">java server pages (jsp)</a> ile de yukarıdaki php koduna benzer çerez tanımları yapmak mümkündür.</p>
<p>Örneğin aşağıdaki sayfa kodunu inceleyerek JSP üzerinden nasıl çerez kullanıldığını anlamaya çalışalım :</p>
<pre>        &lt;%<span style="color: #ff0000;">@ page language="java" import="java.util.*"</span>%&gt;
        &lt;%
        <span style="color: #ff0000;">User username = new User();</span>
        <span style="color: #ff0000;">Date now = new Date();
	String timestamp = now.toString();
	Cookie cookie = new Cookie ("username",username);
	cookie.setMaxAge(365 * 24 * 60 * 60);
	response.addCookie(cookie);</span>
        %&gt;
        &lt;html&gt;
        &lt;body&gt;
        &lt;p&gt;&lt;a href="iki.jsp"&gt;ikinci sayfa icin buraya basiniz&lt;/a&gt;&lt;p&gt;</pre>
<pre>        &lt;/body&gt;
        &lt;/html&gt;</pre>
<p>Yukarıdaki kodda basit bir web sayfası html dilinde kodlanmıştır. JSP dilinden hatırlanacağı üzere &lt;% %&gt; blokları arasındaki kod JSP&#8217;ye aittir. Bu alan kolay okunsun diye yukarıda kırmızı renkle belirlenmiştir.</p>
<p>Sayfamızda JSP alanı içerisinde amacımız Cookie <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfından (class) </a>bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> üretmektir. Bu nesnenin özelliği bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> ve bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> parametre almasıdır. Yukarıdaki kodda bulunan :</p>
<pre><span style="color: #ff0000;">	Cookie cookie = new Cookie ("username",username);</span></pre>
<p>Satırı aslında JSP için çerez kodlamanın yapıldığı satırdır. Bu satıra dikkat ederseniz Cookie <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcısının (constructor) </a>içerisine birinci parametre olarak bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> verilmiştir. Bu yazı yani &#8220;username&#8221; ilerde çerezimize erişmek için kullanacağımız bir etiket olarak düşünülebilir. Bu etiketle erişilecek olan bilgi ise Cookie <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcısının (constructor)</a> ikinci parametresi olan ve daha önceden bir nesne olarak tanımlanmış olan username değişkenidir.</p>
<p>Yukarıdaki örnekte username nesnesi, User ismindeki bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıftan</a> türetilmiştir. Siz uygulamanızda cookie olarak saklamak istediğiniz bir nesneyi buraya yerleştirebilirsiniz.</p>
<p>Yukarıdaki şekilde HTTP paketine yerleştirilen bir çereze yine JSP kodunu kullanarak erişmek için aşağıdaki kodlama işnize yarayabilir:</p>
<pre>&lt;%<span style="color: #ff0000;">@ page language="java" </span> %&gt;
&lt;%
   <span style="color: #ff0000;">String cookieName = "username";
   Cookie cookies [] = request.getCookies ();
   Cookie myCookie = null;
   if (cookies != null)
   {
		for (int i = 0; i &lt; cookies.length; i++)
		  {
				 if (cookies [i].getName().equals (cookieName))
				 {
						myCookie = cookies[i];
						break;
				 }
		  }
   }</span>
%&gt;
        &lt;html&gt;
        &lt;body&gt;
        &lt;%
        <span style="color: #ff0000;">if (myCookie == null) {</span>
        %&gt;
                &lt;%<span style="color: #ff0000;">=cookieName</span>%&gt; isminde bir çerez bulunamadı.
        &lt;%
        } else {
        %&gt;
                &lt;p&gt;Merhaba: &lt;%=<span style="color: #ff0000;">myCookie.getValue()</span>%&gt;.
        &lt;%
        }
        %&gt;
        &lt;/body&gt;</pre>
<pre>        &lt;/html&gt;</pre>
<p>Yukarıdaki kodda request.getCookies() fonksiyonu ile, sitemizden erişilebilen bütün çerezler alınmıştır. Ardından bir döngü ile bu çerezler arasında ismi &#8220;username&#8221; olan çerez aranmıştır. Bulunan bu çerez myCookie ismindeki çerezin içerisine konularak <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML sayfasının</a> içine myCookie.getValue() ile ekrana yazılmıştır.</p>
<p><strong><a name="5"></a>ASP dilinde çerzlerin kullanımı</strong></p>
<p>ASP Microsoft tarafından geliştirilen bir sunucu tarafı betik dilidir (server side scripting language). Bu anlamda JSP ve PHP&#8217;ye benzemektedir. Aşağıdaki örnek kod ile bir ASP sayfası üzerinden nasıl çerez üretildiğini anlayabiliriz:</p>
<pre>&lt;%
<span style="color: #ff0000;">Response.Cookies("kullanici")="Şadi Evren ŞEKER"
Response.Cookies("kullanici").Expires=#May 10,201o#</span>
%&gt;</pre>
<p>Yukarıdaki kodda daha önceki dillerde de gördüğümüz üzere çerezin ismi ve değeri atanmıştır. Çerezimize isim olarak kullanici ismi verilmiş ve değer olarak ilk satırda içeriğine &#8220;Şadi Evren ŞEKER&#8221; değeri konulmuştur. Çerezin yaşam süresi ise 10 mayıs 2010 olarak ikinci satırda atanmıştır.</p>
<p>Aşağıdaki kod ile, yukarıda atanan içeriğe farklı bir sayfadan erişebiliriz:</p>
<pre>&lt;%
<span style="color: #ff0000;">abc=Request.Cookies("kullanici")
response.write("Çerez bilgisi=" &amp; abc)</span>
%&gt;</pre>
<p>Yukarıdaki kodda, abc ismindeki değişkene öncelikle <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketinden</a> kullanici isimli değişken içeriği okunmuştur. Kodun ikinci satırında bu bilgi response.write ile istemciye geri yollanmış ve ekranda görüntülenmiştir.</p>
<p><strong><a name="6"></a>Çerezler ve güvenlik</strong></p>
<p>Yukarıda da açıklandığı üzere, çerezlerin siteler tarafından serbestçe erişilebilir olması bazı güvenlik sorunlarını da beraberinde getirmektedir. Aşağıda bu sorunlardan bazıları açıklanmıştır:</p>
<p><span style="text-decoration: underline;">İz takibi :</span> Bu güvenlik zaafiyeti birden fazla siteye tek bir elde yerleştirilen çerezlerde olur. Örneğin reklam yayını yapan bir şirket, reklamını yayınladığı yerlerde aynı zamanda çerezini de yayınlayabilir.  Bu tip çerezlere, üçüncü parti çerezler (third party cookies) ismi verilir. Bunun sebebi sitenin esas yayıncısı ve siteyi o anda ziyaret etmekte olan istemci (client) dışında üçüncü bir kişinin çerezi olmasıdır.</p>
<p>İşte bu üçüncü parti çerezler siteyi ziyaret eden kişinin bilgisayarına kaydedilir. Şayet reklam veren şirket isterse ziyaretçinin girdiği bütün sitelerin izini sürebilir. Yani reklamının yayınlandığı hangi sitelerin kullanıcı tarafından ziyaret edildiğini takip etmesi mümkündür.</p>
<p><span style="text-decoration: underline;">Çerez kaçırılması (cookie hijacking):</span> Bilindiği üzere çerezlerin içerisinde site ve kullanıcı ile ilgili çeşitli bilgiler tutulmaktadır. Saldırgan bir taraf sunucu ve istemci arasında gidip gelen bu çerezleri takip ederek veya istemcinin bilgisayarında saklanan çerez dosyalarına erişerek çeşitli bilgileri ele geçirebilir. Bu noktada sunucu üzerinden çerez programlayan tarafın oldukça hassas davranması ve kişisel bilgileri, şifre kullanıcı detayı gibi bilgileri çerez üzerinde tutmaması gerekir. Elbette internet gibi bir ortamda bu hassasiyet herkesten beklenemez bu da çerezlerin güvenlik açısından oluşturduğu bir problemdir. Diğer bir çözüm ise çerezlerin içindeki bilgilerin<a href="http://www.bilgisayarkavramlari.com/2009/06/16/simetrik-sifreleme-symmetric-encryption/"> şifreli (encrypted)</a> tutulmasıdır. Elbette bütün şifreler bir gün kırılabilir ancak bu vakit alacaktır ve daha organize bir saldırı gerektirecektir.</p>
<p><span style="text-decoration: underline;">Çerez zehirlemesi (cookie poisoning)</span>: Çerez zehirlemesindeki amaç, istemci taraftan sunucuya giden bilgilerin amaçlı olarak değiştirilmesidir. Örneğin bir alışveriş sitesinde, müşterilerin sepet bilgileri çerezde tutuluyor olsun. Ve büyük bir hata olarak müşterilerin sepetlerindeki eşyaların toplam fiyatı ve dolayısıyla müşterinin ödeyeceği fiyatın da çerezde tutulduğunu düşünelim. Kötü niyetli birisi bu değeri çerez üzerine elle müdahale ederek değiştirebilir ve aslında ödemesi gereken değerden çok daha ucuza sepetindeki eşyaları satın alabilir. Bu tip saldırılara çerez zehirlemesi ismi verilir.</p>
<p><span style="text-decoration: underline;">Oturum saldırısı (session hijacking): </span>Çerezlerin sıkça kullanıldığı yerlerden birisi de oturum bilgilerinin saklanmasıdır. Örneğin kullanıcının en son eriştiği sayfa, kullanıcının site üzerindeki ayarları veya kullanıcıya ait sitede tutulan bilgiler çerezlerde tutularak kullanıcının sonraki bağlantılarında sitede kaldığı yerden devam etmesi amaçlanır. Bu durum bir güvenlik zaafiyeti doğurur. Örneğin saldırgan bir kişi bu bilgileri kullanarak aslında hiç olmayan bir kullanıcı ile sitede erişme izni olmayan sayfalara sanki en son bu sayfada kalmış gibi erişebilir. Veya sahip olmadığı yetkiye çerez üzerinde değişiklikler yaparak erişmeye çalışabilir. Bu saldırının tek mantıklı çözümü ise daha dikkatli web siteleri programlamak ve programlcıların bu tip saldırılara karşı dikkatli olmasıdır.</p>

<p class="sayac_bilgi">789 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mana Ağları (Sematic Webs, Anlamsal Ağ)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/06/26/mana-aglari-sematic-webs/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/06/26/mana-aglari-sematic-webs/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 17:20:39 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2664</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER İnternetin (world wide web) bir alt uzayı olarak düşünülebilecek anlambilimsel ağlar, internet üzerinde bulunan ve doğal dilde yapılan yayınlara bir alternatiftir. Anlambilimsel ağlar, bir bilgi kaynağının makinelere (bilgisayarlar) tarafından işlenebilecek ve bu işleme sonucunda anlamı tam olarak anlaşılabilecek ağlardır. Mânâ ağları (anlambilimsel ağlar) üzerinde yapılan çalışmalarda henüz tam bir kesinlik [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>İnternetin (world wide web) bir alt uzayı olarak düşünülebilecek anlambilimsel ağlar, internet üzerinde bulunan ve doğal dilde yapılan yayınlara bir alternatiftir.</p>
<p>Anlambilimsel ağlar, bir bilgi kaynağının makinelere (bilgisayarlar) tarafından işlenebilecek ve bu işleme sonucunda anlamı tam olarak anlaşılabilecek ağlardır.</p>
<p>Mânâ ağları (anlambilimsel ağlar) üzerinde yapılan çalışmalarda henüz tam bir kesinlik yoktur. Farklı çalışma grupları, farklı standart ve alanlarda çalışmaktadırlar. Ancak <a href="http://www.bilgisayarkavramlari.com/2007/12/30/rdf-resource-description-framework-kaynak-tanim-cercevesi/">Kaynak Tanım Çerçevesi (resouce description framework)</a> ve XML kullanımları neredeyse standartlaşmıştır.  Örneğin <a href="http://www.bilgisayarkavramlari.com/2007/11/30/varlik-bilim-ontoloji-ontology/">varlıkbilim (onthology)</a> seviyesinde yapılan <a href="http://www.bilgisayarkavramlari.com/2007/12/04/owl-web-ontology-language-web-ontoloji-dili/">web ontology language (OWL) </a>çalışması <a href="http://www.bilgisayarkavramlari.com/2007/12/30/rdf-resource-description-framework-kaynak-tanim-cercevesi/">RDF</a> kullanımınn bir örneği olarak görülebilir. Ayrıca <a href="http://www.bilgisayarkavramlari.com/2009/06/22/malumat-ifadesi-knowledge-representation/">malumat seviyesi gösterimler (knowledge representation)</a> için çeşitli alternatifler de bulunmaktadır.</p>
<p>Mânâ ağlarının çıkış sebebi bilgisayarların malumat seviyesinde (knowldege) işlem yapma yetersizliğidir. Bir bilgisayarın işleyebileceği ve işlemi sonucunda çıkarabileceği anlam ile insanların anladığı anlam çok farklıdır. Örneğin &#8220;maymun&#8221; kelimesinin hangi dilden Türkçeye girdiğini araştırmak ve cevap olarak Asurcadan girdiğini bulmak insan için ulaşılabilir bir araştırma süreci iken, bilgisayarların bu konuda işlem yapmaları çelişik açıklamaları temizlemeleri ve bir malumat sahibi olmaları günümüz teknolojisinde insana göre oldukça ilkeldir. İşte bu sebeplerden oldayı İnternet üzerinde <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML</a> ile yapılan ve insanların okuyup anladığı sayfaların yanında bilgisayarların anlayabildiği mana ağları türemiştir.</p>
<p><img class="alignnone size-full wp-image-2665" title="sematicstack" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/06/sematicstack.png" alt="sematicstack" width="530" height="530" /></p>
<p>Yukarıda W3C&#8217;nin sitesinden alınmış mana ağı yığını (semantic web stack) resmi görülmektedir. Yukarıdaki değişik katmanlarda bulunan teknolojiler w3c tarafından standartlaştırılmış teknolojilerdir.</p>
<p>Yukarıdaki <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığına (stack) </a>bakılınca en alt seviyede URI (Unique resource identifier) seviyesi görülmektedir. Bu seviye mana ağlarının bulunduğu servis sağlayıcılarının internet üzerindeki adresleridir. Yine alt seviyelerden Unicode ile anlatılmak istenen ise verinin işlenmesi ve iletimi sırasında kullanılacak olan kodlama standardıdır.</p>
<p>Örneğin XML dosyalarının saklanması ve iletimi sırasında <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML dosyalarının</a> UTF (unicode transormation table) tablolarına uygun olması istenmektedir.</p>
<p>Yukarıdaki şekilde dikkat edilebilecek bir nokta ise Crypto katmanının en üst seviyeye kadar çıkıyor olmasıdır. Bunun sebebi kullanılacak olan dijital imza (digital signature) ve benzeri güvenlik uygulamalarının her katmandan kontrol edilebiliyor olması ve katmanların (örneğin <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML</a> veya <a href="http://www.bilgisayarkavramlari.com/2007/12/30/rdf-resource-description-framework-kaynak-tanim-cercevesi/">RDF</a>) güvenlik parçaları barındırmamasıdır. Yani örneğin <a href="http://www.bilgisayarkavramlari.com/2008/01/07/xml-extensible-markup-language-genisletilebilir-isaretleme-dili/">XML teknolojisinin </a>içerisinde doğrudan bir güvenlik çözümü söz konusu değildir. Yine kullanıcı katmanı (user interface &amp; application) ile geri kalan mana ağı yığını (semantic web stack) arasında bulunan güven (Trust) katmanı da bu amaca hizmet etmektedir ve kullanıcının şifre katmanı (crypto) ile erişimini ayarlamaktadır.</p>
<p>SPARQL yine w3c tarafından standartlaştırılmış <a href="http://www.bilgisayarkavramlari.com/2007/12/30/rdf-resource-description-framework-kaynak-tanim-cercevesi/">RDF</a> sorgulama dilidir. Yani bir RDF dökümanını işleyerek sorgulamaya yarayan dillerden birsidir.</p>

<p class="sayac_bilgi">110 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/06/26/mana-aglari-sematic-webs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVC (Model View Controller, Model Bakış Kontrolcü)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/04/16/mvc-model-view-controller-model-bakis-kontrolcu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/04/16/mvc-model-view-controller-model-bakis-kontrolcu/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 10:06:05 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/04/16/mvc-model-view-controller-model-bakis-kontrolcu/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Yazılım mühendisliğinde kullanılan bir mimari yaklaşımdır. Basitçe yazılımın tasarımı ve geliştirilmesi aşamalarında etkili olan bir bakış açısını yansıtır. Bu bakış açısına göre kullanıcı ara yüzü (user interface) ile iş mantığı (business logic) birbirinden ayrı olmalıdır. Yani kullanıcıların önündeki ekranların tasarlanması ve geliştirilmesi sırasında kullanıcı gözüyle analiz yapılmalı ve bu analize [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Yazılım mühendisliğinde kullanılan bir mimari yaklaşımdır. Basitçe yazılımın tasarımı ve geliştirilmesi aşamalarında etkili olan bir bakış açısını yansıtır.</p>
<p>Bu bakış açısına göre kullanıcı ara yüzü (user interface) ile iş mantığı (business logic) birbirinden ayrı olmalıdır. Yani kullanıcıların önündeki ekranların tasarlanması ve geliştirilmesi sırasında kullanıcı gözüyle analiz yapılmalı ve bu analize göre kullanıcıya en kullanışlı (user friendly) ekran tasarımı yapılarak geliştirilmelidir. Arka tarafta ise iş mantığı (business logic) gözetilmeli ve kullanıcı ara yüzlerinden bu mantığa bağlantı kurulmalıdır.</p>
<p>MVC yaklaşımı 3 parçadan oluşur bu parçalar isminde de geçen :</p>
<ul>
<li>Model (Model)</li>
<li>View (Bakış)</li>
<li>Conroller (Kontrolcü)</li>
</ul>
<p>parçalarıdır.</p>
<p>Bu parçalardan model, bilgiyi (information) veya veriyi (data) göstermek için kullanılır. View (Bakış) ise kullanıcı ara yüzünü ve kullanıcının sistem ile olan iletişimini ele alır. Controller (Kontrolcü) ise sistemin veri akışını ve bu verinin model ile olan bağlantısını kontrol etmek amacıyla kullanılır.</p>
<p><img class="alignnone size-full wp-image-1841" title="mvc" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/04/mvc.jpg" alt="" width="343" height="160" /></p>
<p>Yukarıdaki şekilde bu parçalar arasındaki bağlantı görülmektedir. Model parçasında modellenen veriye view(Bakıştan) doğrudan erişim bulunurken kontrolcü parçası iki parçaya da erişerek kontrolü sağlamaktadır.</p>
<p>MVC yaklaşımını gerçek hayattan bir örnek ile anlatmak gerekirse. Örneğin bir web sayfasının geliştirilemsi sırasında Bakış katmanı genelde <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML dilinde</a> üretilir. HTML dilindeki bu sayfaları üreten sunucu tarafında bir kodlama (örneğin PHP, <a href="http://www.bilgisayarkavramlari.com/2009/01/01/1603/">JSP</a> veya ASP gibi) bir katman bulunur ki bu katmana kontrolcü (controller) ismi verilir. Son olarak verinin tutulduğu ve modellendiği bir katman da bulunur ki bu katmanada Model ismi verilir. Dolayısıyla MVC yaklaşımına göre bazı teknolojilerin katmanlandırılması aşağıdaki şekilde olabilir:</p>
<p><img class="alignnone size-full wp-image-1842" title="mvc_katmanlar" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/04/mvc_katmanlar.jpg" alt="" width="343" height="168" /></p>
<p>Yukarıdaki katmanlar birer örnek olarak düşünülüp farklı teknolojilerinde burada kullanılabileceği unutulmamalıdır.</p>
<p>Günümüzde .NET J2EE gibi ortamları MVC mimarisine uygun geliştirme ortamları olarak görmek mümkündür. Ayrıca bu ortamlarda birden fazla MVC alternatifi çerçeve (Framework) de bulunmaktadır. Örneğin J2EE ortamı için <a href="http://www.bilgisayarkavramlari.com/2009/04/15/jsf-java-server-faces/">JSF (Java Server Faces) </a>, Structs, JSP gibi alternatifler sayılabilir.</p>

<p class="sayac_bilgi">731 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/04/16/mvc-model-view-controller-model-bakis-kontrolcu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF (Java Server Faces)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/04/15/jsf-java-server-faces/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/04/15/jsf-java-server-faces/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 08:22:41 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/04/15/jsf-java-server-faces/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER JAVA teknolojisi üzerine kurulu olan ve web üzerinden sunucu tarafı kod geliştirme (server side development) olanak sağlayan bir teknolojidir. JSF teknolojik olarak JSP (Java Server Pages) teknolojisinin üzerine kurulmuş bir çerçeve (framework) olarak düşünülebilir. Yani üretilen ve gösterilen kod olarak JSF teknolojisinin altında JSP teknolojisi kullanılmaktadır. Klasik talep tekileşimli MVC [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>JAVA teknolojisi üzerine kurulu olan ve web üzerinden sunucu tarafı kod geliştirme (server side development) olanak sağlayan bir teknolojidir.</p>
<p>JSF teknolojik olarak JSP (Java Server Pages) teknolojisinin üzerine kurulmuş bir çerçeve (framework) olarak düşünülebilir. Yani üretilen ve gösterilen kod olarak JSF teknolojisinin altında JSP teknolojisi kullanılmaktadır.</p>
<p>Klasik <a href="http://www.bilgisayarkavramlari.com/2009/04/16/mvc-model-view-controller-model-bakis-kontrolcu/">talep tekileşimli MVC (request driven Model View Controller)</a> yapısından farklı olarak JSF bileşen bazlı yaklaşımı kullanır. Yani istemci tarafında bir sayfadan başka sayfaya geçildiğinde JSF tarafında eski sayfa bileşenleri saklanır ve bu sayfaya geri dönüldüğünde saklanan bu bileşenler yüklenir.</p>
<p>JSF teknolojisinde aşağıdaki özelliklerden bahsedilebilir:</p>
<ul>
<li>Bileşen bazlı arayüz teknolojisi. Yani kullanılan bileşenlerin durumlarını (state) tutabilen, bu bileşenler üzerindeki eylemleri (event) takip edebilen, giriş değerlerini doğrulayabilen (validation), değerleri dönüştürebilen (converting), sayfa yönlendirmeleri (navigation) tanımlayabilen ve uluslar arası standartları destekleyebilen (dil, para birimi, klavye gibi (internationalization) ) bir <a href="http://www.bilgisayarkavramlari.com/2007/04/14/api-application-programming-interface/">uygulama geliştirme arayüzüdür (application programming interface , API)</a></li>
<li>JSF ayrıca sabit arayüz bileşenleri sunmaktadır ve geliştirici bu arayüz bileşenlerini kullanarak site geliştirebilmektedir.</li>
<li>JSP içerisindeki özel etiketler (tag) ile geliştiricilerin JSF sayfaları yazması mümkündür.</li>
<li>Sunucu tarafında etkileşimli olarak eylemlerin kontrol edilmesi mümkündür</li>
<li>Sunucu tarafında durumun (state) saklanması ve kullanılması mümkündür.</li>
<li>Yönetilen Çekirdek (managed beans) kullanmaya imkan sağlar (yönetilen çekirdekler kabaca JAVA çekirdeklerinin (JAVA Beans) bağımlılık zerk edilmiş halidir (dependency injection)</li>
<li>Ayrıca JSF 1.2&#8242;den sonra ve JSP 2.0&#8242;dan sonraki sürümlerde Birleştirilmiş İşlem Dili (unified expression language) desteği bulunmaktadır.</li>
</ul>
<p>Yukarıdaki sayılanlara ilave olarak AJAX teknolojisi ile yakın ilişki içerisinde olan JSF teknolojisinde çoğu ortama özgü olarak hazır bazı kütüphaneler bulunmaktadır.</p>

<p class="sayac_bilgi">147 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/04/15/jsf-java-server-faces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSP ile JAVA Bean Kullanımı</title>
		<link>http://www.bilgisayarkavramlari.com/2009/01/13/jsp-ile-java-bean-kullanimi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/01/13/jsp-ile-java-bean-kullanimi/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 23:46:33 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/01/13/jsp-ile-java-bean-kullanimi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilindiği üzere JSP internet üzerinden HTML etiketlerinin (tags) arasında değişken içerikli (dynamic content) üretilmesi için geliştirilmiş bir teknolojidir. Ancak JSP üzerindeki JAVA teknolojisinin sonuna kadar kullanılması sadece daha karmaşık kodlar ile sonuçlanmaktadır. Her ne kadar teknolojik olarak Bean bağımsız JSP kodları yazılabilese de kodlar çok karışmakta ve bir müddet sonra [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilindiği üzere <a href="http://www.bilgisayarkavramlari.com/2009/01/01/1603/">JSP </a>internet üzerinden HTML etiketlerinin (tags) arasında değişken içerikli (dynamic content) üretilmesi için geliştirilmiş bir teknolojidir.</p>
<p>Ancak JSP üzerindeki JAVA teknolojisinin sonuna kadar kullanılması sadece daha karmaşık kodlar ile sonuçlanmaktadır. Her ne kadar teknolojik olarak Bean bağımsız JSP kodları yazılabilese de kodlar çok karışmakta ve bir müddet sonra kod karmaşıklığı artmaktadır.</p>
<p>Çözüm olarak bean kullanılması ve JSP sayfalarından gerektikçe bu beanlerin çağırılması gerekmektedir.</p>
<p>Bir JSP sayfasında bean çağırmak için useBean komudu kullanılır. useBean komutunun 5 özelliği aşağıda verilmiştir:</p>
<ol>
<li>id : kullanılacak olan bean&#8217;in ismini belirlemeye yarar. Bu sayede JSP içerisinden kullanılabilecek bir isim verilmiş olunur.</li>
<li>class: kullanılacak olan java bean sınıfının ismidir. Bu isimdeki sınıftan bir nesne türetilir.</li>
<li>scope : <a href="http://www.bilgisayarkavramlari.com/2009/01/12/jsp-dahili-nesneleri-jsp-implicit-objects/">Bean &#8216;in geçerli olduğu alanı </a>belirlemektedir. Bu alanlar (page, request, application ve session olabilir)</li>
<li>type : Bu alan, sınıf (class) alanından farklı tipte bir bean tanımlanacağı durumdan hangi tipte olduğunu belirtmek için kullanılır.</li>
<li>beanName : Sınıf ismine alternatif olarak class alanıyla aynı amaçta kullanılmaktadır.</li>
</ol>

<p class="sayac_bilgi">256 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/01/13/jsp-ile-java-bean-kullanimi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JSP Dahili Nesneleri (JSP Implicit Objects)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/01/12/jsp-dahili-nesneleri-jsp-implicit-objects/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/01/12/jsp-dahili-nesneleri-jsp-implicit-objects/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 11:54:10 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/01/12/jsp-dahili-nesneleri-jsp-implicit-objects/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER JSP dilinde tanımlı olan ve çok kullanılan dört obje ve tanımı aşağıda verilmiştir: request response out session request nesnesi HttpServletRequest sınıfından (class) tanımlanan bu nesne kullanıcı isteklerini (Request) karşılamak amacıyla kullanılır. response nesnesi HttpServletResponse sınıfından (class) tanımlanmıştır ve kullanıcıya gönderilecek olan cevap bilgisinin oluşturulmasında kullanılır.  Servletlerden farklı olarak JSP dilinde [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/01/01/1603/">JSP dilinde</a> tanımlı olan ve çok kullanılan dört obje ve tanımı aşağıda verilmiştir:</p>
<ol>
<li>request</li>
<li>response</li>
<li>out</li>
<li>session</li>
</ol>
<p><strong>request nesnesi</strong> HttpServletRequest sınıfından (class) tanımlanan bu nesne kullanıcı isteklerini (Request) karşılamak amacıyla kullanılır.</p>
<p><strong>response nesnesi</strong> HttpServletResponse sınıfından (class) tanımlanmıştır ve kullanıcıya gönderilecek olan cevap bilgisinin oluşturulmasında kullanılır.  Servletlerden farklı olarak JSP dilinde kullanıcıya gönderilecek olan cevap (response) hafızalanmıştır (buffered) ve bu hafızalanmış veriye istenilen bir anda erişmek mümkündür.</p>
<p><strong>out nesnesi </strong>sanılanın aksine PrintWriter sınıfından (class) değildir. Bunun yerine Writer sınıfının bir çeşidi olan ve hafızalama (buffer) yeteneği bulunan JSPWriter sınıfından bir nesnedir. out nesnesi ile üretilen sayfanın içerisine veri yazmak ve değişken sayfalar üretmek mümkündür.</p>
<p><strong>session nesnesi</strong> HttpSession sınıfından bir nesne olup <a href="http://www.bilgisayarkavramlari.com/2009/01/01/jps-oturumlari-jsp-sessions/">kullanıcı oturumlarını (detay için tıklayınız)</a> takip etmek için kullanılır.</p>
<p>Ayrıca JSP dilinde application, config, pageContext ve page isimli nesnelerde sıklıkla kullanılmaktadır.</p>
<p><strong>application nesnesi</strong> ServletContext sınıfından olup JSP sayfaları bu nesneler içerisinde kalıcı veriler (persistent data) tutabilmektedirler.</p>
<p><strong>config parametresi </strong>ServletConfig sınıfından olup JSP sayfasının ilk oluşturulması sırasında çalıştırılan jspInit fonksiyonunun içerisindeki ayarları (Değerleri) tutmak için kullanılır.</p>
<p><strong>PageContext sınıfından</strong> oluşturulan pageContext nesnesinde ise sayfa içeriği bilgisi durmaktadır.</p>
<p>Son olarak <strong>page nesnesi</strong> aslında bir takma ad gibi düşünülebilir ve this nesnesi yerine kullanılır. this nesnesinin yoğun kullanımından dolayı page ismi nadiren kullanılmaktadır. İkisi aynı anlama gelmektedir.</p>

<p class="sayac_bilgi">82 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/01/12/jsp-dahili-nesneleri-jsp-implicit-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Türkçe Netbeans</title>
		<link>http://www.bilgisayarkavramlari.com/2009/01/04/1640/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/01/04/1640/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 23:22:45 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/01/04/netbeans-projelerinin-turkce-destegi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Netbeans ile oluşturulan projelerde türkçe karakter desteği için projenin ilgili karakter kümesinin (character set) ayarlanması gerekir. Bunun için netbeans üzerindeki proje özelliklerinin ayarlanması gerekir. Öncelikle projenin özelliklerine girmek için proje listesindeki projenin üzerinde sağ tuşa tıklayarak özelliklere (properties) giriniz: Ardından açılan aşağıdaki ekranda encoding seçeneğinden ISO-8859-9 seçilir : Ekran onaylandıktan [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER<br />
Netbeans ile oluşturulan projelerde türkçe karakter desteği için projenin ilgili karakter kümesinin (character set) ayarlanması gerekir. Bunun için netbeans üzerindeki proje özelliklerinin ayarlanması gerekir.  Öncelikle projenin özelliklerine girmek için proje listesindeki projenin üzerinde sağ tuşa tıklayarak özelliklere (properties) giriniz:</p>
<p><img class="alignnone size-full wp-image-1638" title="netbeanstr" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/01/netbeanstr.jpg" alt="" width="325" height="498" /></p>
<p>Ardından açılan aşağıdaki ekranda encoding seçeneğinden ISO-8859-9 seçilir :</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/01/netbeanprojeozellikleri.jpg"><img class="alignnone size-full wp-image-1639" title="netbeanprojeozellikleri" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/01/netbeanprojeozellikleri.jpg" alt="" width="500" height="359" /></a><br />
Ekran onaylandıktan sonra proje karakterleri Türkçe olarak düzelir.</p>

<p class="sayac_bilgi">157 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/01/04/1640/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSP Oturumları (JSP Sessions)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/01/01/jps-oturumlari-jsp-sessions/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/01/01/jps-oturumlari-jsp-sessions/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 00:57:47 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/01/01/jps-oturumlari-jsp-sessions/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER JSP kullanarak bir oturumun takip edilmesi mümkündür. Basitçe bir kullanıcının siteye bağlanmasından başlayarak sitede yaptığı her işlemin takip edilmesi ve siteyle olan iletişiminin kayıt altında tutulması örneğin kullanıcı adı ve şifresinin bir kere sorulduktan sonra bütün sayfalardan erişilebilmesi mümkündür. Bu işlem aslında web sunucusu (web server) üzerindeki bir oturum (session) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>JSP kullanarak bir oturumun takip edilmesi mümkündür. Basitçe bir kullanıcının siteye bağlanmasından başlayarak sitede yaptığı her işlemin takip edilmesi ve siteyle olan iletişiminin kayıt altında tutulması örneğin kullanıcı adı ve şifresinin bir kere sorulduktan sonra bütün sayfalardan erişilebilmesi mümkündür.</p>
<p>Bu işlem aslında web sunucusu (web server) üzerindeki bir oturum (session) ile yapılmaktadır. Kullanıcının verileri web sunucusunda durmaktadır ve JSP dosyaları bu bilgilere sunucu üzerinden erişmektedir. Nitekim sunucuya bağlanan her kullanıcı için ayrı bir oturum bilgisi bulunmakta ve bu bilgilerin takibini web sunucusu yapmaktadır.</p>
<pre><tt>&lt;HTML&gt;</tt></pre>
<pre><tt>&lt;BODY&gt;</tt></pre>
<pre><tt>&lt;FORM METHOD=POST ACTION="kaydet.jsp"&gt;</tt></pre>
<pre><tt>Adınız? &lt;INPUT TYPE=TEXT NAME=kullanici SIZE=20&gt;</tt></pre>
<pre><tt>&lt;P&gt;&lt;INPUT TYPE=SUBMIT&gt;</tt></pre>
<pre><tt>&lt;/FORM&gt;</tt></pre>
<pre><tt>&lt;/BODY&gt;</tt></pre>
<pre><tt>&lt;/HTML&gt;</tt></pre>
<p>Yukarıdaki kodda basit bir form oluşturulmuş ve form gönderilmesi (Submit) durumunda &#8220;kaydet.jsp&#8221; dosyasının çağrılması söylenmiştir.</p>
<p><img class="alignnone size-full wp-image-1632" title="jspoturum" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/01/jspoturum.jpg" alt="" width="413" height="235" /></p>
<p>Yukarıdaki  çalışmış halinden de görüleceği üzere bir metin kutusu (textbox) ve bir düğmeden (buton) oluşan yukarıdaki sayfada kutuya bir isim girilmesi ve &#8220;Sorguyu Gönder&#8221; düğmesine basılması ile sorgu sunucuya yollanacak ve kaydet.jsp dosyasına POST olarak parametre geçecektir.</p>
<p>Kaydet.jsp dosyasında ise :</p>
<pre>&lt;%</pre>
<pre>   String isim = request.getParameter( "kullanici" );</pre>
<pre>   session.setAttribute( "kullaniciIsmi", isim );</pre>
<pre>%&gt;</pre>
<pre>&lt;HTML&gt;</pre>
<pre>&lt;BODY&gt;</pre>
<pre>&lt;A HREF="deneme.jsp"&gt;Deneyelim Bakalım&lt;/A&gt;</pre>
<pre>&lt;/BODY&gt;</pre>
<pre>&lt;/HTML&gt;</pre>
<p>Yukarıdaki şekilde yazılmış olan kodda öncelikle POST olarak sayfaya gelen kullanıcı değeri bir JSP değişkenine (String tipindeki isim değişkenine) konulmuş ardından da session nesnesinin setAttribute fonksiyonu ile oturumda oluşturulan &#8220;kullaniciIsmi&#8221; isimli değişkene değeri atanmıştır.</p>
<p>Bir defa bu değişkene değer atandıktan sonra istenilen sayfadan bu değere ulaşmak mümkündür. Nitekim yukarıdaki sayfada bulunan bir bağlantı (link) ile gidilen deneme.jsp sayfasına herhangi bir bilgi geçirilmemiş olmasına rağmen :</p>
<pre>&lt;HTML&gt;</pre>
<pre>&lt;BODY&gt;</pre>
<pre>&lt;%= session.getAttribute( "kullaniciIsmi" ) %&gt; Sitemize hoş geldiniz.</pre>
<pre>&lt;/BODY&gt;</pre>
<pre>&lt;/HTML&gt;</pre>
<p>Kodunu içeren bu sayfadan kullaniciIsmi isimli oturum değişkenine (session variable) erişilerek ekrana basılmıştır.</p>

<p class="sayac_bilgi">98 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/01/01/jps-oturumlari-jsp-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

