Java Servlet ve JSP ile MVC Kalıbı Tasarımı

0

Tarih : 08-07-2010 | Yazan : Hüseyin Bora | Kategori : Framework, Java, MVC, Yazılım Mimarileri

Java’nın Doğası MVC Kalıbı
Java da malum pek çok mvc çatısı var struct,jsf,spring velhasıl kelam bu yazıda java servlet kullanarak kendi mvc kalıbımızı oluşturup Java’nın doğasındaki mvc yi dışarı çıkaracağız.

Öncelikle Controller sınıfımız HttpServlet sınıfından türetmeliyiz. Bir özet sınıf olarak tanımladığımız controller sınıfı Controller() adında bir özet metot tanımlar ki bu özet metodu kontrolcümüzü genişleten sınıflar uygulamak zorundadırlar.

HttpServletRequest objesinin getRequestDispatcher metodu kendisine argüman olarak verilen dosyayla ilişkili bir RequestDispatcher nesnesi getirir. Görüldüğü gibi servletin doğasında MVC yatmakta Controller servletimize dispatch adında bir method ekliyorum Conrollerden türetilen diğer sınıflar bu metoda başvurarak dispacth işlemini gerçekleştirecekler.

package mvc;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public abstract class Controller extends HttpServlet {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    abstract public void Controller();
    public void dispatch(String file, Object data) {
        try {
            RequestDispatcher dispatcher = request.getRequestDispatcher(file);
            getServletContext().setAttribute(data.getClass().getName(), data);
            dispatcher.include(request, response);
        } catch (Exception ex) {
        }
    }
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.request = request;
        this.response = response;
        this.Controller(); //genişleten sınıfların controller metodu çağrılıyor.
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}

getServletContext().setAttribute(String key,Object o) metodu ile yönlendirdiğimiz jsp sayfasına veri taşıyoruz.

Model kısmını ufak bir bean ile hallediyoruz burada her hangi bir veri katmanı kullanılabilir.

package model;
public class User {
private String name;
private String email;
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

View(Görünüm) tarfında JSP kullanıyoruz.

anasayfa.jsp varsayılan durumda controller anasyfa.jsp yi görüntüleyecek

<%@page contentType="text/html" pageEncoding="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>Ana Sayfa</title>
</head>
<body>
<h2>Hoşgeldiniz</h2>
<a href=”?sayfa=”uye”> Uye </a>
</body>
</html>

Uye.jsp page parametresine uye değeri verildiğinde Kontrolcümüz uye.jsp sayfasını görüntüleyecek

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean class="model.User" scope="application"/>
<!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>JSP Page</title>
</head>
<body>
<h2>Hello World!</h2>
User name :<% out.print(User.getName());  %>
<br>
User name :<% out.print(User.getEmail());  %>
</body>
</html>

User.jsp de ile user sınıfını bir global olarak jsp sayfamızda belirtiyoruz

Evet artık sıra kontrolcümüzü türetmeye geldi.

package mvc;
import java.io.IOException;
import model.User;
public class Test  extends Controller {
public void Controller() {
{
String page = (String) request.getParameter("page");
if (page == null) {
this.dispatch("views/anasayfa.jsp", null);
} else if (page.equals("user")) {
User u = new User();
u.setName("hbora");
u.setEmail("hborat@email.com");
this.dispatch("views/user.jsp", u);
}
}
}
}

Servletimiz için web XML yapılandırması aşağıdaki gibi olmalı

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>mvc.Controller</servlet-class>
</servlet>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>mvc.test</servlet-class>
</servlet>
>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/Controller</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>

Şimdilik bukadar yakında basit mvc adını verdiğim bir mvc aplikasyonunu yayınlayıp yine burada kullanımından ve mvc den bahsedeceğim.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

PHP Faces Programlanabilir Şablonlar

0

Tarih : 17-11-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Programlanabilir şablonlar @htmlpattern lerdir yapısal geliştirme çalışmaları sürmektedir.
Örnek kullanıldığı her yerde1 ile 12 arasındaki sayıları gösteren pattern
Sablon.ptrn dosyası

<faces>
<@htmlpattern name="yaz" useprefix="my">
<c:for var="$i" begin="1" to="12" step="1">
<div style="color:red;font-weight:bold;" > #{$i}  </div>
</c:for>
</@htmlpattern>
</faces>

View dosyası

<faces>
<@face file="sablon.ptrn"/>
<my:yaz/>
</faces>

Örneğin kullanıcı girişi için kullandığımız bir formumuz olsun formumuzu kullmak istediğimiz dosyaya include ederiz ve ismi ile etiketleriz

Sablon.ptrn dosyası

<faces>
<@import taglib="phpf.ui.*" prefix="f"/>
<@import taglib="phpf.core" prefix="c" type="static"/>
<@htmlpattern name="login" useprefix="my">
<f:form id="loginform">
<table>
    <tr>
        <td>User Name</td>
        <td><f:textbox id="name"/></td>
    </tr>
      <tr>
        <td>Password</td>
        <td><f:textbox id="pass"/></td>
    </tr>
    </tr>
      <tr>
        <td>Password</td>
        <td><f:button id="send" forname="loginform" text="Login" onclick="actionevent"/></td>
    </tr>
</table>
</f:form>
</@htmlpattern>
</faces>

View dosyası

<faces>
<@face file="sablon.ptrn"/>
<my:login/>
</faces>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

PHP Faces da Ön ek ile kullanılabilir Şablonlar (Patternler)

0

Tarih : 17-11-2009 | Yazan : Hüseyin Bora | Kategori : FDL, PHP Faces

Daha öncede bahsettiğim gibi (Şablon)patternler view dosyalarında tanımlanan bir çeşit veri yapılarıdır. Pattern kullanımındaki amaç kod yazımını minimuma indirmektir.

Örneğin veri girişi için kullandığımız formlarda çeşitli alanlar vardır örneğin textbox ve çoğuna validation (doğrulama) işlemleri uygularız her etiket için benzer niteliklere değerler aktarırız ve bu böyle uzar gider.

Bu arada PHP faces a pattrenlere yeni eklenen bir özellikte useprefix niteliğidir bu sayede oluşturduğumuz pattern useprefix niteliğine verdiğimiz ön ek ile ilişkilendirilir.

UI Patternler OOP deki sınıflara benzerler her bir nitelik override edilerek(geçersiz kılınabilir)
Örneğin bir formumuz olsun ve bu formdan sunucumuza ad,soyad,dogumyeri bilgileri gönderilecek olsun ve hiçbir bilginin boş bırakılmasını istemiyoruz.

Patterns.ptrn dosyası

<faces>
<@import taglib="phpf.ui.*" prefix="f"/>
<@pattern name="text"  prefix="f" extends="textbox" useprefix="phpf"
     validator="validator"
     rule="required"
     messagefor="label"
     message="Lütfen bu alanı boş bırakmayın"/>
</faces>

Patterns.ptrn dosyamızı include ettiğimiz her dosyada phpf ön eki ile patternimize erişebiliriz

View dosyamız

<html>
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<faces>
    <@face file="patterns.ptrn"/>
    <f:form id="form">
        ad <phpf:text id="ad"/>
        </br>
        soyad<phpf:text id="soyad"/>
        </br>
        sehir<phpf:text id="sehir"/>
        <f:message id="label"/>
        <f:button id="btn" text="Gonder" onclick="actionevent" forname="form"/>
    </f:form>
</faces>
</body>
</html>
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)