İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

JSP Mimarisi

JSP Mimarisi

JSP nin amacı servlet geliştirmek için tanımsal ve gösterim merkezli bir metod sunmaktır.JSP spesifikasyonunun servlet API üzerine geliştirilmiş olan bir uzantı olduğunu daha önce söylemiştik.Bu sebepten servlet ve jsp sayfalarının birbirine ortak birçok özelliği bulunmaktadır.

Tipik olarak sayfaları bir çevrim fazı ve ve bir istek işleyici fazına maruz kalmaktadırlar.Çevrim aşaması sadece bir kere işletilir ve değişimi ancak JSP nin değişimi ile mümkündür.Sayfa içerisinde herhangi bir yazım hatası olmadığı düşünülürse sonu. JSP sayfasını simgeleyen ve derlenmiş bir servlet arayüzüdür.

Çevrim işlemi tipik olarak JSP ye herhangi bir sitek ilk defa geldiği anda JSP motorunun içerisinde gerçekleştirilmektedir.JSP 1.1 spesifikasyonu JSP sayfalarının .class dosyaları na çevrilmesine izin vermektedir.Önderleme ilk istekteki derlenme sonucunda oluşturulan kodun daha sonra kaynak kodunu getirip çevrim işleminden doğacak gecikme sorununu ortadan kaldırmaktadır.Kaynak dosya ve derleme dosyalarının oluşturulma yerleri gibi çevrim detayları implementasyona bağlıdır.Yukarıdaki JSP .class dosyası için Tomcat tarafından oluşturulan kaynak dosyası izleyen şekildedir.

jsptest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 package jsp;
  2 import javax.servlet.*;
  3 import javax.servlet.http.*;
  4 import javax.servlet.jsp.*;
  5 import javax.servlet.jsp.tagext.*;
  6 import java.io.PrintWriter;
  7 import java.io.IOException;
  8 import java.io.FileInputStream;
  9 import java.io.ObjectInputStream;
 10 import java.util.Vector;
 11 import org.apache.jasper.runtime.*;
 12 import java.beans.*;
 13 import org.apache.jasper.JasperException;
 14 import java.text.*;
 15 import java.util.*;
 16 public class _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0
 17 extends HttpJspBase {
 18 static {
 19 }
 20 public _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0( ) {
 21 }
 22 private static boolean _jspx_inited = false;
 23 public final void _jspx_init() throws JasperException {
 24 }
 25 public void _jspService(HttpServletRequest request,
 26 HttpServletResponse response)
 27 throws IOException, ServletException {
 28 JspFactory _jspxFactory = null;
 29 PageContext pageContext = null;
 30 HttpSession session = null;
 31 ServletContext application = null;
 32 ServletConfig config = null;
 33 JspWriter out = null;
 34 Object page = this;
 35 String _value = null;
 36 try {
 37 if (_jspx_inited == false) {
 38 _jspx_init();
 39 _jspx_inited = true;
 40 }
 41 _jspxFactory = JspFactory.getDefaultFactory();
 42 response.setContentType("text/html");
 43 pageContext = _jspxFactory.getPageContext(this,
 44 request,response, "", true, 8192, true);
 45 application = pageContext.getServletContext();
 46 config = pageContext.getServletConfig();
 47 session = pageContext.getSession();
 48 out = pageContext.getOut();
 49 // begin
 50 out.write("\r\n<html>\r\n<body>\r\n");
 51 // end
 52 // begin [file="E:\\jsp\\jsptest.jsp";from=(3,2);to=(5,0)]
 53 Date d = new Date();
 54 String today = DateFormat.getDateInstance().format(d);
 55 // end
 56 // begin
 57 out.write("\r\nToday is: \r\n<em> ");
 58 // end
 59 // begin [file="E:\\jsp\\jsptest.jsp";from=(7,8);to=(7,13)]
 60 out.print(today);</b>
 61 // end
 62 // begin
 63 out.write(" </em>\r\n</body>\r\n</html>\r\n");
 64 // end
 65 } catch (Exception ex) {
 66 if (out.getBufferSize() != 0)
 67 out.clear();
 68 pageContext.handlePageException(ex);
 69 } finally {
 70 out.flush();
 71 _jspxFactory.releasePageContext(pageContext);
 72 }
 73 }
 74 }

JSP sayfa implementasyon sınıf dosyası Servlet arayüzünü implemente eden HttpJspBase i genişletmektedir.Bu sınıfın _jspService() servis metodu JSP sayfasının içeriğini belirlemektedir._jspService() metoduna override işlemi yapılamamasına rağmen uygulama programcısı initialization ve yoketme olaylarını jspInit() ve jspDestroy() metodlarına erişerek JSP sayfalarında bunları kontrol edebilirler.

Bu sınıf dosyası servlet onteynerine yüklendiği zaman , _jspService() metodu istemcinin isteklerine cevap vermekle yükümlüdür.Varsayılan durumda _jspService() metodu servlet konteynerinde ayrı bir thread halinde gelen istemci request(istekleri) ne cevap verir.

JSP Erişim Modelleri

Model 1

JSP Model 1 Mimarisinde bir web tarayıcısından gelen istek direkt olarak JSP sayfasına iletilmektedir.JSP bu isteği işlemek ve istemciye cevabı vermekle sorumludur.Yine de gösterim içerikten ayrılmıştır çünkü tüm veri erişimi bean ler aracılığı ile geröekleştirilmektedir.

Model 1 basit uygulamalar için uygun olmasına rağmen kompleks implementasyonlarda kullanılması tavsiye edilmemektedir.Bu mimarinin çok kullanımı JSP kodu ile birlikte çok fazla scriptlet ve gömülü Java kodu oluşturulmasına sebep olmaktadır.Bu Java geliştiricileri için bir problem teşkil etmemekte fakat JSP sayfaları eğer web dizayncıları tarafından kullanılıyor ise ki bu genellikle kullanılan yöntemdir, o zaman yapılacak işlerin biraz karmaşıklaşmasına yol açmaktadır.

Bu modelin diğer bir dezavantajı her JSP sayfasının bireysel olarak uygulama durumundan sorumlu olması ve authorızation ve güvenlikten sorumlu olmasıdır.

Model 2

Model 2 mimarisi , popüler Model / Görüntü / Kontrolcü (MVC) dizayn paterninin bir sunucu taraflı implementasyonudur.Burada işlem görüntüleme ve in bileşenler arasında paylaştırılmıştır.Gösterim bileşenleri HTML / XML tepkisi (response) döndüren ve kullanıcı arayüzünü tarayıcı tarafından işlendiğinde belirleyen JSP sayfalarıdır.Ön bileşenler (Kontrolcüler) herhangi bir gösterim işlemi yapmazlar fakat sadece gelen HTTP isteklerini karşılarlar.Burada gösterim bileşenleri tarafından kullanılan herhangi ir nesne veya bean bulunuyor ise ön bileşenler bunlarun oluşturulması ile sorumludur ve kullanıcının eylemlerine göre isteği hangi gösterim bileşenine yönlendirilmesi gerektiğine karar verirler.Ön bileşenler bir JSP sayfası veya bir Sevlet sayfası şeklinde implemente edilebilirler.

Bu mimarinin avantajı gösterim bileşeninde herhangi bir işlem mantığı bulunmamasıdır;bu kısım sadece kontrolcü tarafından daha önceden oluşturulan bean veya nesneleri ele almakla ve kendi içerisinde statik şablonlara dinamik içeriği aktarmakla yükümlüdür.Buna dayalı olarak bu gösterim ayrımı büyük ölçekli bir projede iş bölümüne yardımcı olmaktadır.

Yine projenin diğer bir yararı ön bileşenlerin uygulamaya giriş için tek nokta belirlemesi ve böylelikle uygulama durumu , güvenlik ve gösterimin tek ve tedariğinin daha basit olmasını sağlamaktadır.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır