Tuesday, January 31, 2012

JSP သင္ခန္းစာ ၅

pizza.html

[html]
  [head]
    [title]Take The Pizza[/title]
    [style type="text/css"]
      H1 {
        font-size: 12pt;
        font-weight: bold;
      }
    [/style]
  [/head]
  [body]
    [form action="process.jsp" method="post"]
      [p]
      Welcome to Take the Pizza Online! We're eager to take your order
      for pizza via our new web form.
      [/p]
      [p]
      Please fill out the fields below and click on "Place Order" when
      you're done.
      [/p]
      [h1]Your Information:[/h1]
      [table]
        [tr]
          [td]
            Name:
          [/td]
          [td]
            [input type="text" name="name" size="30"/]
          [/td]
        [/tr]
        [tr]
          [td]
            Address:
          [/td]
          [td]
            [textarea rows="4" cols="40" name="address"][/textarea]
[!--
            [input type="text" name="address" size="70"/]
--]
          [/td]
        [/tr]
      [/table]

      [h1]Order Type:[/h1]
      [table]
        [tr]
          [td]
            [input type="radio" name="purchaseType" value="Home Delivery" checked="true"/]
          [/td]
          [td]
            Home Delivery
          [/td]
        [/tr]
        [tr]
          [td]
            [input type="radio" name="purchaseType" value="Take Away"/]
          [/td]
          [td]
            Take Away
          [/td]
        [/tr]
      [/table]

      [h1]Please Select Any Additional Toppings:[/h1]
      [table]
        [tr]
          [td]
            [input type="checkbox" name="topping" value="Peppers"/]
          [/td]
          [td]
            Peppers
          [/td]
        [/tr]
        [tr]
          [td]
             [input type="checkbox" name="topping" value="Sweetcorn"/]
          [/td]
          [td]
            Sweetcorn
          [/td]
        [/tr]
        [tr]
          [td]
            [input type="checkbox" name="topping" value="Mouse innards"/]
          [/td]
          [td]
            Mouse Innards
          [/td]
        [/tr]
      [/table]
      [h1]Pizza Size:[/h1]
      [table]
        [tr]
          [td]
            Size:
          [/td]
          [td]
            [select name="size"]
              [option]Small[/option]
              [option selected="true"]Medium[/option]
              [option]Large[/option]
            [/select]
          [/td]
        [/tr]
      [/table]

      [input type="submit" value="Place Order"/]
    [/form]
  [/body]
[/html]

http မွာ GET, POST,DELETE,TRACE အပါအ၀င္ တျခား method တစ္ခ်ိဳ႕ရိွပါတယ္။ jsp အပါအ၀င္ server side programming laguage ေတြမွာေတာ႔ Get နဲ႕ Post ကိုပဲ အဓိကသံုးၾကပါတယ္။ get method ကို အသံုးျပဳရင္ url မွာ parameter ေတြကိုျမင္ရပါတယ္။ url ရဲ႕ character limitation လည္းရိွပါတယ္။ parameter ေတြသိပ္မ်ားေနရင္ url ရွည္လာျပီး limit ေက်ာ္တဲ႔ျပႆနာရိွႏိုင္သလို၊ plain text နဲ႕ value ေတြကို url မွာျမင္ေနရတာလည္း security အရမေကာင္းပါဘူး။ post မွာေတာ႔ ဒီျပႆနာမရိွပါဘူး။ url ထဲမွာလည္း  parameter ေတြမျပသလို၊ url limitation ေက်ာ္တာမ်ိဳးလည္းမရိွႏိုင္ပါဘူး။

  [form action="process.jsp" method="post"]

ဆိုတာေလးကိုၾကည္႕လုိက္ပါ။ form တစ္ခုမွာ action နဲ႕ method ဆိုတာကိုေတြ႕ရပါတယ္။ action ဆိုတာကေတာ႔ ဒီ form ကို submit လုပ္လုိက္ရင္ ဘယ္သြားမလဲဆိုတာပါပဲ။ တကယ္လုိ႕ action="http://google.com" ဆိုရင္ form ကို submit လုပ္တဲ႔အခ်ိန္မွာ google.com ကိုသြားပါလိမ္႔မယ္။ အခုဒီေနရာမွာ process.jsp ဆိုတဲ႔အတြက္ process.jsp ကုိသြားပါလိမ္႔မယ္။ process.jsp ေရွ႕မွာ ဘာမွထူးေထြညႊန္ျပမေနတဲ႔အတြက္ အခု pizza.html နဲ႕folder တစ္ခုတည္းမွာရိွတယ္လုိ႕ယူဆရပါမယ္။ method="post" ဆိုတဲ႔ေနရာမွာ method="get" နဲ႕လည္းစမ္းၾကည္႕ႏုိင္ပါတယ္။ method ကိုမထည္႕ဘဲ စမ္းၾကည္႕ရင္ get မလား post မလားဆိုတာေလးလည္း စူးစမ္းသင္႔ပါတယ္။

process.jsp

[html]
  [head]
    [title]Your details[/title]
    [style type="text/css"]
      H1 {
        font-size: 12pt;
        font-weight: bold;
      }
    [/style]
  [/head]

  [body]
    [h1]Your Details[/h1]

    [table]
      [tr]
        [td]Name: [/td]
        [td]${param.name}[/td]
      [/tr]
      [tr]
        [td]Address:[/td]
        [td]${param.address}[/td]
      [/tr]
      [tr]
        [td]Delivery type:[/td]
        [td]${param.purchaseType}[/td]
      [/tr]
      [tr]
        [td]Toppings:[/td]
        [td]${paramValues.topping[0]}[/td]
      [/tr]
      [tr]
        [td][/td]
        [td]${paramValues.topping[1]}[/td]
      [/tr]
      [tr]
        [td][/td]
        [td]${paramValues.topping[2]}[/td]
      [/tr]
      [tr]
        [td]Pizza size:[/td]
        [td]${param["size"]}[/td]
      [/tr]
    [/table]

    [p]Thank you for ordering.[/p]

  [/body]
[/html] 

ဒီမွာစိတ္၀င္စားစရာေကာင္းတာတစ္ခုေတြ႕ရပါမယ္။ ဟိုဘက္ကေနပို႕လုိက္တဲ႔ parameter ေတြကို ဒီဘက္ကေနျပန္ၾကည္႕တာပါ။ ဒါမ်ိဳးေတြကို confirmation page ေတြမွာသံုးေလ႔ရိွပါတယ္။ ေသခ်ာျပီလား ...၊ ဒါေတြမွန္တယ္ေနာ္ဆိုျပီး ျပတဲ႔အခါမ်ိဳးေတြမွာ $ sign ေလးနဲ႕ paramater ေတြကို ျပန္ထုတ္ျပီး ျပတာမ်ိဳးပါ။ Servlet မွာေရးေရးေနတဲ႔ HttpRequest ရဲ႕ getParameter ဆိုတဲ႔ method ပါပဲ။ အတိုေလးပဲေရးရတာ လက္ေညာင္းသက္သာပါတယ္။

${param.name}
ဒါကို EL နဲ႕ေရးတယ္လုိ႕ေခၚပါတယ္။ ေရွ႕မွာ %% နဲ႕တစ္ခုေရးျပခဲ႔တာေတြ႕မွာပါ။ အဲဒါကိုၾကေတာ႔ scriptlet လုိ႕ေခၚပါတယ္။ scriptlet ကို အေၾကာင္းႏွစ္မ်ိဳးေၾကာင္႔ မသံုးသင္႔ဘူးလို႕ဆိုပါတယ္။ ပထမတစ္ခ်က္က horribly structured and difficult to maintain ပါ။  ဒါကေတာ႔ရွင္းပါတယ္။ java code ဗလပြနဲ႕ဆိုရင္ ေရးတဲ႔သူေတာင္ code လုိင္း ႏွစ္ရာေလာက္ဆိုရင္ စျပီး အူလည္လည္နဲ႕ရွာရေတာ႔ပါမယ္။ အဲဒီလူ အလုပ္ထြက္ျပီး ေနာက္၀င္လာတဲ႔သူကေတာ႔ တစ္ေန႕တစ္ေန႕ ေရွ႕ကလူကို ေမတၱာပို႕ေနပါလိမ္႔မယ္။ ဒုတိယတစ္ခ်က္က Designer ေတြအတြက္ မ်က္စိေနာက္လုိ႕ပါ။ သူတုိ႕ရဲ႕ design process မွာ java code ေတြက မ်က္စိေနာက္စရာေကာင္းပါတယ္။ ညစ္ပတ္ေနသလိုေတာင္ျဖစ္ေနပါတယ္။ အဲဒါေတြေၾကာင္႔ scriptlet ကို မသံုးဖုိ႕ ေမတၱာရပ္ၾကပါတယ္။ ဒါေပမယ္႔ စင္ကာပူမွာေတာ႔ နားမေထာင္ဘူးခင္ဗ်။ ၾကံဳသလိုေရးၾကပါတယ္။ 

ဒါေလးကိုၾကည္႕ျပီး pizza မွာၾကည္႕လုိ႕ရပါျပီ။ html code ေတြကိုေတာ႔ အေထြအထူးမရွင္းေတာ႔ပါဘူး။
http://localhost:8080/jsp-example/pizza.html မွာ pizza မွာၾကည္႕လုိက္ပါဦး။

Regards,
Zero

JSP သင္ခန္းစာ ၄

goodAfternoon.jsp


ေနာက္ထပ္အလြယ္စားတစ္ခုပါ။
ဒီမွာ ပထမဆံုး page ထဲကို import လုပ္တာကေတာ႔ java.util.Calendar package ပါ။ Java ကို စိတ္ကုန္သြားၾကတာက အဲဒါေတြေၾကာင္႔ထင္ပါတယ္။ ဟိုpackage က ဟုိထဲ။ ဒီ package ကဒီထဲ။ မသိရင္ ဘယ္လုိလုပ္မလဲဆိုေတာ႔လည္း ေရးရင္းျပဳရင္းသိလာမွာဆိုတာေလာက္ပဲ။

[%@ page import="java.util.Calendar"%]
[html]
  [body]
    Good
    [%
      Calendar calendar = Calendar.getInstance();
      if (calendar.get(Calendar.AM_PM) == Calendar.AM) {
        out.print("Morning");
      } else {
        out.print("Afternoon");
      }
    %]
  [/body]
[/html]


%% ဆိုတဲ႔ ႏွစ္ခုၾကားမွာ ေရးထားတာေတြက java code စစ္စစ္ေတြပါ။ out.print ေတြ၊ ; ေတြကိုလည္း ေတြ႕ႏုိင္ပါေသးတယ္။ if ေတြ else ေတြလည္း ပါတယ္ခင္ဗ်။ ဒီေနရာမွာ အလ်ဥ္းသင္႔လုိ႕ေျပာရရင္ jsp ေျပာေနတုန္း java programming basics ေတြကို ျပန္ေျပာမွာမဟုတ္ပါဘူး။ မဆိုင္ဘူးထင္လုိ႕ပါ။ jsp မွာ ဘာေတြ ဘယ္လုိလုပ္လုိ႕ရသလဲဆိုတာကိုပဲေျပာခ်င္ပါတယ္။ java မသိဘူးဆိုရင္လည္း jsp မွာ java ဒီလိုထည္႕ေရးလုိ႕ရတယ္ဆုိတာ သိရင္ရပါျပီ။ tomcat ကို ဘယ္လုိ install လုပ္သလဲဆိုတာမ်ဳိးကို မေရးတာလည္း အဲဒါေၾကာင္႔ပါပဲ။ Calender object ကိုၾကည္႕ျပီး မနက္ဆိုရင္ good Morning၊ ေန႕လည္ဆိုရင္ good Afternoon ဆိုျပီး ႏႈတ္ဆက္ပါလိမ္႔မယ္။

Regards,
Zero

JSP သင္ခန္းစာ ၃

Our Very first JSP, index.jsp


အခြ်န္အတက္ေတြပါရင္ blog မွာမေပၚတဲ႔အတြက္ greater than နဲ႕ less than TAG ေတြကို [] နဲ႔အစားထိုးပါတယ္။ အဆင္ေျပမယ္လုိ႕ေမွ်ာ္လင္႔ပါတယ္။


[html]
  [head]
    [title]My First JSP[/title]
  [/head]
  [body]
    Hello, world!
    [p/]
    2 + 2 is ${2 + 2} and 4 * 4 is ${4 * 4}
  [/body]
[/html]


ၤဒီ code ကို index.jsp လို႕နာမည္ေပးျပီး jsp-example ထဲကိုထည္႕ျပီး run ၾကည္႕ပါ။ index.html ကိုဖ်က္လုိက္ပါ။ မဖ်က္ရင္လည္း နာမည္ေျပာင္းထားပါ။ မဟုတ္ရင္ index.html နဲ႕ index.jsp ႏွစ္ခုယွဥ္လာရင္ index.html ပဲေပၚလာပါမယ္။

အဲဒီ index.jsp ကို http:localhost:8080//jsp-example/ or http:localhost:8080//jsp-example/index.jsp ဆိုျပီး ေခၚလုိက္လုိ႕ရပါတယ္။

ေဟာသလိုေပၚလာပါမယ္။
Hello, world!
2 + 2 is 4 and 4 * 4 is 16

တကယ္႔ကို မယံုႏိုင္စရာပါပဲ။ jsp တစ္ခုေရးတတ္သြားပါျပီ။ ျမန္မာကားထဲမွာဆိုရင္ေတာ႔ ဒီေနရာေလာက္မွာ မုတ္ဆိတ္ျဖဴနဲ႕ဆရာၾကီးက၀င္လာျပီး အိမ္း အေတာ္သိလာျပီပဲဆိုျပီး ပခံုးကို ပုတ္ျပီး ခ်ီးက်ဴးသြားတဲ႔အခန္းမ်ိဳး။ ကိုးရီးယားကားထဲမွာဆိုရင္ေတာ႔ မင္းသမီးက မင္းသား ၁ ၂ ၃ ၄ ကို အဂၤလိပ္လိုေျပာတာကို အဂၤလိပ္စာတယ္ကြ်မ္းတာပဲဆိုျပီး ခ်ီးက်ဴးတဲ႔အခန္းေပါ႔။

ေနာက္မွာဘာေတြျဖစ္ပ်က္သြားသလဲဆိုတာကိုေျပာပါမယ္။ Java တို႕မည္သည္ jvm နဲ႕ကင္းကြာျပီး ဘာမွမလုပ္ႏိုင္။ java တို႕မည္သည္ bytecodes ျဖစ္ေသာ class တို႕ႏွင္႔ကင္း၍မျဖစ္ဆိုျပီး သိထားဖုိ႕လုိပါတယ္။ .jsp ဆိုတာေလးကို jvm ကမသိပါဘူး။ မသိဘဲနဲ႕။ အေပၚက ဥပမာမွာ တကယ္ၾကီးတြက္ေနတာ အေၾကာင္းေတာ႔ရိွပါလိမ္႔မယ္။

အေၾကာင္းကေတာ႔ jsp ဆိုတာ အေပၚယံပါ။ အခုနက index.jsp ရဲ႕ ဇစ္ျမစ္ကို
[tomcat-folder-path]\work\Catalina\localhost\jsp-example\org\apache\jsp
ဆိုတဲ႔ထဲမွာ index.java နဲ႕ index.class ကိုေတြ႕ႏိုင္ပါတယ္။ index.java က ၆၇ လိုင္းရွည္လ်ားေထြျပားပါတယ္။ ဘ၀သံသရာသီခ်င္းေလာက္နီးပါးပါပဲ။ အဲဒါေတြကို အေနာက္ကေန သူ႕ဘာသာသူေရးပါတယ္။ jsp ဟာလည္း တစ္ကယ္ေတာ႔ အေနာက္မွာပုန္းေနတဲ႔ java အပုန္းပါပဲ။ ဒီေလာက္ေလးလုပ္တာကို index.java က 3KB ေလာက္ျဖစ္ျပီး index.class ဖိုင္ကေတာ႔ 4KB ေလာက္ယူပါတယ္။ text editor တစ္ခုခုနဲ႕ဖြင္႔ၾကည္႕လုိ႕ရပါတယ္။ ဘာေတြေရးထားသလဲသိခ်င္ရင္ေပါ႔။

အဲဒီမွာတင္ တစ္ခုခုကို သေဘာေပါက္ဖုိ႕ေကာင္းပါတယ္။ ဒီ jsp ဖုိင္ကို compile လုပ္တာ အခ်ိန္မၾကာဘူးလားဆိုတာပါ။ ၾကာတာေပါ႔။ ဖုိင္ၾကီးလာရင္ ၾကီးသေလာက္ၾကာပါတယ္။ ပထမဆံုးအၾကိမ္ jsp နဲ႕ေရးထားတဲ႔  .jsp ဖိုင္ကို run တဲ႔အခါမွာ .jsp ကေန .java file ထုတ္၊ ျပီးရင္ complie လုပ္ျပီး .class ထုတ္ေနရတဲ႔အခ်ိန္ရိွပါတယ္။ အဲဒါေၾကာင္႔ jsp page ေတြကပထမဆံုးအၾကိမ္ ဆိုရင္ ေႏွးတတ္ပါတယ္။ ဒုတိယအၾကိမ္မွာေတာ႔ compile လုပ္စရာမလိုေတာ႔ဘဲ ျမန္လာပါလိမ္႔မယ္။ ေတာ္ေတာ္ အူတိအူေၾကာင္ၾကီးပါပဲ။

.jsp ေတြကို ဒီလို process လုပ္ဖုိ႕လုိတဲ႔အေၾကာင္းကို Java Web Server ေတြက သိတဲ႔အခါသိပါတယ္။ တစ္ခ်ိဳ႕ဟာေတြမွာေတာ႔ သိဖုိ႕ကို config လုပ္ဖုိ႕ လိုတဲ႔အခါ လိုပါမယ္။ မ်ားေသာအားျဖင္႔ေတာ႔ by default သိေလ႔ရိွပါတယ္။

.jsp ကို web server မွာ run ထားတုန္း view source ၾကည္႕ၾကည္႕ရင္ ဘာမ်ားေတြ႕မယ္ထင္သတုန္း။ ကိုယ္႔ဘာသာကိုယ္ရွဳစားေတာ္မူၾကပါ။

2 + 2 is 4 and 4 * 4 is 16


ဆိုျပီးေတြ႕ရပါလိမ္႔မယ္။ အဲဒါဘာျဖစ္သြားတာလဲဆိုေတာ႔ view source နဲ႕ၾကည္႕ရင္ ေရးထားတဲ႔ code မျမင္ရေတာ႔တဲ႔သေဘာပါပဲ။ html လုိ view source ၾကည္႕ျပီး အကုန္ကူးသြားလုိ႕မရေတာ႔ပါဘူး။ result ကိုပဲျမင္ရပါမယ္။ java code ေတြကိုေတာ႔ မျပပါဘူး။ ျပရင္လည္း security မေကာင္းေတာ႔ပါဘူး။

ဘာပဲျဖစ္ျဖစ္ အခုအခ်ိန္မွာ jsp ေရးတတ္ျပီလုိ႕ေျပာႏိုင္တာေပါ႔ဗ်ာ။ basic calculation ေလးပဲျဖစ္ျဖစ္ေပါ႔။

JSP သင္ခန္းစာ ၂

JSP သင္ခန္းစာ ၂

podcast လုပ္ရင္ေတာင္ ေလကုန္သက္သာမယ္ထင္တယ္။ စကားနဲ႕ေျပာရတာ ပိုလြယ္ျပီး ျမန္တယ္။
သင္ခန္းစာ ၂ ကေတာ႔ web server ေတြေပါ႔ဗ်ာ။ ဥပမာ tomcat, weblogic ေပါ႔။ အဲဒါေလး နည္းနည္းရွာဖတ္ပါ။

Tomcat version 5 နဲ႕အထက္ တစ္ခုခု install လုပ္ပါ။ install လုပ္ပါလုိ႕ေျပာတာက သိပ္မမွန္လွဘူး။ window service မွာ run ခ်င္တဲ႔ဟာေတြကိုပဲ window အတြက္ ထုတ္တဲ႔ tomcat ကို install လုပ္ၾကတယ္။ ဒီအတုိင္း zip ကို ျဖည္လုိက္တဲ႔ဟာလည္း အလုပ္ျဖစ္ေလာက္ပါတယ္။

service မွာခ်ိတ္ထားရတဲ႔ ရည္ရြယ္ခ်က္ကေတာ႔ server down သြားတယ္ဆုိဦးေတာင္မွ server ျပန္စရင္ auto start လုပ္လို႕ရေအာင္ စတဲ႔ရည္ရြယ္ခ်က္ေတြနဲ႕ပါ။

tomcat ကို သြင္းျပီးျပီဆိုပါေတာ႔။

bin ဆိုတဲ႔ folder ေအာက္မွာ startup.bat နဲ႕ stop.bat ရိွပါတယ္။ window မွာ install လုပ္ထားတဲ႔ versionမွာေတာ႔  tomcat5.exe ဆိုတာမ်ိဳးပဲပါပါလိမ္႔မယ္။

webapps
webapps ဆိုတဲ႔ folder ကေတာ႔ application ေတြထားဖုိ႕ပါပဲ။

webapp ေအာက္မွာ
jsp-example ဆိုတဲ႔ folder တစ္ခုေဆာက္ျပီး အထဲမွာ index.html ဆုိျပီး html တစ္ခုေရးပါ။

Localhost, IP, Domain Name အလႅာပသလႅာပ

http://localhost:8080/ ဆိုရင္ tomcat run ေနရင္ သူ႕ရဲ႕ main page တက္လာပါမယ္။ http://localhost ဆိုတာကေတာ႔ http://127.0.0.1  ပါပဲ။  : ေနာက္မွာ 8080 ကေတာ႔  port noပါ။ Default အားျဖင္႔ အဲဒီ port အဲဒီ IP မွာ run တယ္လို႕ သိရပါမယ္။ ကြ်န္ေတာ္တို႕သိေနတဲ႔ domain name ေတြေနာက္မွာ ip address တစ္ခုစီရိွတယ္လို႕မွတ္ထားလုိက္ရင္လြယ္ပါတယ္။ ဥပမာ google.com ဆိုပါေတာ႔ တကယ္ေတာ႔ google.com ဆိုတာက သူ႕ရဲ႕ IP ကို map လုပ္ထားတဲ႔ name ပဲျဖစ္ပါတယ္။ DNS ကေန domain name နဲ႕ IP ကို ျပန္ရွာျပီး သြားလုိက္တာပါပဲ။ အလြယ္ေျပာရရင္ေတာ႔ Ctrl+R နဲ႕ command prompt ကိုသြားျပီး ping google.com ကိုရိုက္ၾကည္႔ရင္ google.com ရဲ႕ IP ေပၚလာပါမယ္။ http://74.125.235.16/
ဆိုပါေတာ႔။ အဲဒီလို IP နဲ႕ျပန္သြားၾကည္႕ရင္ google.com ဆီပဲေရာက္ပါမယ္။ domain name ဟာ မွတ္ရလြယ္ေအာင္ map လုပ္ထားတဲ႔သေဘာပါပဲ။

index ?

Tomcat ရဲ႕ webapps ေအာက္မွာ jsp-example ဆိုတဲ႔ folder ကိုေဆာက္လုိက္ျပီးပါျပီ။ တကယ္ေတာ႔ jsp-example ဆိုတဲ႔ folder ဟာ ႏွယ္ႏွယ္ရရမဟုတ္ေတာ႔ပါဘူး။ ဒါဟာ web application တစ္ခုျဖစ္သြားပါျပီ။ အင္မတန္ၾကီးက်ယ္ခမ္းနားတဲ႔ web application ေတြလည္း ဒီလုိပဲ တည္ေဆာက္ရပါတယ္။ ဘာမွသိပ္မထူးပါဘူး။ အခုအခ်ိန္မွာ http://localhost:8080/jsp-example ဆိုျပီးေခၚလိုက္ရင္ အဲဒီ jsp-example ထဲက index.html က အလုိအေလ်ာက္ေပၚလာပါမယ္။ ဘာလို႕ေပၚလာသလဲဆိုတာကေတာ႔ default config ေတြေၾကာင္႔ပါပဲ။ tomcat server က application တစ္ခုကို ေရာက္ရင္ ဘယ္သြားရမွန္းမသိရင္ သူရွာတာက index ဆိုတဲ႔ filename ပါ။ အဲဒီဖုိင္က jsp ျဖစ္ရင္လည္းျဖစ္မယ္။ html ျဖစ္ရင္လည္းျဖစ္မယ္။ အဲဒါေတြ႕ရင္ သူက ျပလိုက္တာပဲ။ တျခား file ေတြကိုေတာ႔ သူတုိ႕နာမည္နဲ႕ေခၚမွရလိမ္႔မယ္။ http://localhost:8080/jsp-example  အဲဒါေလးစမ္းၾကည္႕ပါဦး။

tomcat ဘယ္လို run သလဲ ဘာညာေတြကိုေတာ႔ googling လုပ္လုိက္ပါ။ အခုတစ္သိန္းတစ္ေသာင္းခုနစ္ေထာင္႔တစ္ရာေလာက္ရိွႏုိင္ပါတယ္။

Regards,
Zero

JSP သင္ခန္းစာ ၁

Scope in JSP

ပထမဆံုး JSP ကိစၥကေတာ႔ Scope ေလးမ်ိဳးပါပဲ။
Page Scope
Request Scope
Session Scope
Application Scope
ဆိုျပီး Scope ေလးမ်ိဳးရိွပါတယ္။ အဲဒါေလးေတြကို နည္းနည္းစီေလာက္ရွာဖတ္ၾကည္႕လုိက္ပါ။

ဒါဟာ ကြ်န္ေတာ္တို႕ရဲ႕ သင္ခန္းစာအစပါ။
HTML နဲ႕ CSS အေၾကာင္းကိုလည္း http://w3schools.com/ မွာ တီးၾကည္႕ေခါက္ၾကည္႕ပါ။

JSP ကို အရင္ကေရးတဲ႔ပံုစံက codes ေတြ၊ business logic ေတြ အကုန္ေပါင္းေရးထားတာပါ။ view အတြက္တစ္ခုတည္း မရည္ရြယ္ခဲ႔ပါဘူး။ အဲဒီေတာ႔ ေရးရတာျမန္ျပီး၊ ျပင္ရတာခက္ပါတယ္။ ဒီဇုိင္နာေတြလည္း မ်က္စိေနာက္ပါတယ္။ ေနာက္ပုိင္းမွာ framework ေတြနဲ႕ၾကမွ JSP ရဲ႕ role က view အတြက္ပိုပီျပင္လာပါတယ္။

ေရွ႕သင္ခန္းစာေတြမွာေရးတဲ႔အခါ ပိုသိလာပါလိမ္႔မယ္။

ISBN for Apress JSP2 book

ISBN for Apress JSP2

1590593391

Go to Apress.com , Search the book with above ISBN. or click http://www.apress.com/9781590593394
Download the source code.

Regards,
Zero

Monday, January 30, 2012

Ant in Eclipse

Project ေတြကို Ant Build နဲ႕သံုးတဲ႔အခါ သတိထားစရာတစ္ခုကိုေျပာခ်င္တာပါ။
တစ္ခုထက္ နည္းနည္းပိုရင္လည္းပိုမယ္။

Eclipse မွာ ANT ပါတယ္။ ဘာ ANT လည္းဆိုရင္ေတာ႔ Apache ANT ပါပဲ။ Apache က ANT ကို ဒီအတုိင္း သူ႕ jar ေလးနဲ႕ run လည္းရပါတယ္။ Eclipse မွာ တခါတည္းပါေတာ႔ အလုပ္ရွဳပ္သက္သာတာေပါ႔ဗ်ာ။

ANT အေၾကာင္းလည္း ၾကံဳမွပဲပြားပါေတာ႔မယ္။ အခုဟာက ဖုတ္ပူမီးတုိက္ build.xml ကို run မယ္႔သူေတြအတြက္ သတိထားစရာေလးတစ္ခုပါ။ ဆွာ႔ ဆွာေတြကေတာ႔ မလိုပါဘူး။ ANT မွာ procedure ေတြေပးလုိ႕ရတယ္ဆိုတာကို သိရပါမယ္။ ဒီ files ေတြကို dist ဆိုတဲ႔ distination folder မွာစုပါ၊ ျပီးရင္ jar file/ war file ေျပာင္းပါ။ မေျပာင္းခင္မွာ config folder က properties files/ xml ေတြကူးပါ ဆိုတဲ႔ steps ေတြရိွပါတယ္။ deploy လုပ္မလား၊ clean လုပ္မလား၊ compile လုပ္မလား၊ အားလံုးလုပ္မလား ဆိုတာေတြလည္းရိွပါတယ္။ အဓိကေျပာခ်င္တာ အဲဒီနားေလးမွာပါ။

clean
compile
deploy
ဆုိတဲ႔သံုးခုကို check box မွာ click click လုပ္ျပီး သူသူကိုယ္ကိုယ္ ေမွ်ာ္လင္႔တာက sequential order နဲ႕ clean-->compile-->deploy ပါ။ အမွန္ကေတာ႔ အဲဒိီလို လုပ္ခ်င္မွလုပ္ပါတယ္။ မလုပ္တဲ႔အခါဘာျဖစ္တတ္လဲဆိုေတာ႔၊ deploy-->clean-->compile ဆိုရင္ အရင္ကရိွျပီးသား jar/war files ကို သြားျပီး deploy လုပ္ေနတာမ်ိဳးလည္းျဖစ္သြားႏုိင္ပါတယ္။ အခုလုိဖတ္လုိက္ရင္ ဂလိုျဖစ္တတ္ပါကလားဆိုျပီး အလင္းပြင္႔သြားႏုိင္ပါတယ္။

အဲဒီလုိ ျဖစ္တတ္ရင္ သတိထားလုိက္ရင္ရပါျပီ။ ေသခ်ာၾကည္႕လုိက္ေတာ႔ ANT မွာ Target execution order ဆိုတာကို ေတြ႕ပါလိမ္႔မယ္။ အဲဒီမွာ ကိုယ္အဆင္ေျပသလိုေလး order ကို change လုိ႕ရပါတယ္။

Eclipse မွာ bulid.xml ကို right click လုပ္လုိက္ရင္ Run As ထဲမွာ
1. Ant Build Alt+Shit X,Q
2. Ant Build ...
ဆိုျပီး ႏွစ္ခုရိပါတယ္။ 2. Ant Build .. ဆိုတာက config ပါ။ အဲဒီမွာ excecution order ေျပာင္းတာတို႕ ဘယ္ target ေတြ run မယ္တုိ႕ ေျပာထားလုိ႕ရပါတယ္။ JRE ကိုလည္း အဲဒီမွာ ေျပာင္းလို႕ရပါတယ္။

ဗဟုသုတအေနနဲ႕ပါပဲ။ ခက္ခဲတဲ႔အေၾကာင္းအရာမဟုတ္ပါဘူး။ စေရးတဲ႔သူေတြ လြယ္ကူေအာင္ေျပာတာျဖစ္ပါတယ္။ Java ေရးမယ္႔သူေတြအေနနဲ႕ ANT ကိုလည္း အလုပ္ျဖစ္ရံုေလာက္သိရပါမယ္။ အလ်င္းသင္႔ရင္ နမူနာတစ္ခုေလာက္နဲ႕ရွင္းျပတာ ေရးလုိက္ပါဦးမယ္။

JSPသင္ခန္းစာေရးဖုိ႕ရိွပါတယ္။ Apress ရဲ႕ Beginning JSP2, from novice to professional ကို အဆင္ေျပသလို ပိုင္းျဖတ္ျပီး ေရးၾကည္႕ပါမယ္။

ဒီႏွစ္ထဲမွာ Spring နဲ႕ Web Service ေတြကိုလည္း မ်ားမ်ားေရးဖုိ႕ရိွပါတယ္။ ၀ါသနာပါတဲ႔သူေတြဖတ္ႏုိင္ပါတယ္။

Sunday, January 15, 2012

IOC container and DI pattern

IoC containers and DI pattern

ဒါကေတာ႔ ေလ႔လာသင္႔တဲ႔ေခါင္းစဥ္မို႕လို႕ လင္႔ခ္ထားတာပါ။
Spring မွာေတာ႔ DI ဟာ အေရးၾကီးပါတယ္။ Martin Fowler ေရးတာျဖစ္ပါတယ္။

ref link:
http://martinfowler.com/articles/injection.html

Monday, January 9, 2012

Java Syllabus from O'reilly

Java Syllabus from O'reilly

Head First Java,

Java In A Nutshell

အဆင္႔တစ္ခုခ်င္းစီမွာျပဌာန္းထားတဲ႔ စာအုပ္တစ္အုပ္စီပါ။ လုပ္ငန္းသေဘာအရ ေက်ာ္ခြေလ႔လာထားမိတဲ႔ သူေတြအေနနဲ႕လည္း ျပန္လည္ ေလ႔က်င္႔ၾကည္႕၊ နားလည္ၾကည္႕ဖုိ႕ လိုအပ္မယ္ထင္ရင္ ဒီစာအုပ္ေလးအုပ္ကို ေလ႔လာဖုိ႕ oreilly course ေတြသြားၾကည္႕ျပီး အၾကံေပးပါတယ္။ ေနာက္ဆံုးႏွစ္အုပ္ကိုေတာ႔ ဖတ္ဖူးပါတယ္။ အကုန္ေတာ႔မဟုတ္ပါဘူး။ လုိတာေတြဖတ္ၾကည္႕ပါတယ္။ ဒီမွာက ဘာ course မဆို ေစ်းၾကီးပါတယ္။ online ကေန နာရီ အနည္းငယ္သင္တာေတြကအစ အနည္းဆံုး ၃၀၀ ၊ ၄၀၀ ေလာက္ကစပါတယ္။ ျခြင္းခ်က္ကေတာ႔ java passion site ထင္တယ္။ ေစ်းေပါေနေသးတယ္။

ဒုတိယေစ်းအေပါဆံုးက oreilly က course ေတြျဖစ္ပါတယ္။ USD 340 ၀န္းက်င္ေလာက္ပါပဲ။ level 4 ခုသတ္မွတ္ထားပါတယ္။

က်န္တာေတြကေတာ႔ ၃၀၀၀၊ ၄၀၀၀ ေလာက္ေပးျပီး ႏွစ္ရက္ေလာက္ ေျပာတာေတြျဖစ္ေနတတ္ပါတယ္။ ကြ်န္ေတာ္႔သေဘာကေတာ႔ စာအုပ္၀ယ္ျပီး ျဖည္းျဖည္းခ်င္း ဖတ္တာက ပိုျပီးမ်ားတတ္ႏိုင္မလားလုိ႕ ထင္မိတယ္။ ကိုယ္ၾကိဳက္တာကို ေလ႔လာျပီး အသိအမွတ္ျပဳတဲ႔စာေမးပြဲတစ္ခုခု ၀င္ေျဖၾကည္႕လုိက္ရင္ ပိုျပီး ထိေရာက္မယ္ထင္ပါတယ္။ သင္တန္းတက္လုိ႕ ကုန္သြားမယ္႔ ပိုက္ဆံကို university သြားျပီးတက္လုိက္ရင္ေတာင္ ၂ ေသာင္းေလာက္ဆို မာစတာ တစ္ဘြဲ႕ရေလာက္ပါတယ္။ သင္တန္းမွာဆိုရင္ေတာ႔ ရွစ္ရက္ေလာက္နဲ႕တင္ ႏွစ္ေသာင္းကုန္သြားႏုိင္ပါတယ္။

စင္ကာပူမွာ ကြန္ျပဴတာစာအုပ္ေတြက amazon ထက္ ႏွစ္ဆေစ်းပိုၾကီးပါတယ္။ ေစ်းခန္႕မွန္းလို႕ရေအာင္ link ေတြထည္႕ထားပါတယ္။ click ၾကည္႕ျပီး စာအုပ္အဖံုးေလးဘာေလးၾကည္႕လုိ႕ရသလို၊ နမူနာ စာမ်က္ႏွာတစ္ခ်ိဳ႕လည္း ဖတ္လုိ႕ရေကာင္းရႏိုင္ပါလိမ္႔မယ္။

online မွာ ebooks ေတြကေတာ႔ရိွပါလိမ္႔မယ္။ ebooks နဲ႕ဖတ္ႏိုင္ရင္ေတာ႔ ေစ်းသက္သာျပီး ထိေရာက္ပါတယ္။ သြားေလရာမွာ ဖတ္ခ်င္တဲ႔အခါဖတ္ႏိုင္ပါတယ္။

ထိထိေရာက္ေရာက္ ေလ႔လာႏိုင္သူေတြျဖစ္ၾကပါေစ။

Regards,
Zero

Head First Java စာအုပ္ကိုေတာ႔ online မွာ search လုပ္ရင္းေတြ႕လုိက္ပါတယ္။ download လုပ္ျပီးေလ႔လာၾကည္႕ပါ။
http://www.mediafire.com/?ddzyyaulba90ywn

Sunday, January 8, 2012

အိုဘယ္႔ Filezilla

အိုဘယ္႔ Filezilla

အခုေရးမယ္႔ အေၾကာင္းအရာကေတာ႔ I.T သမားတုိင္းမကင္းႏိုင္တဲ႔အရာပါ။
စဥ္းစားၾကည္႕ပါဦး။ ဘာမ်ားျဖစ္မလဲလို႕။

Bug လား။
Shedule Deadline လား။
Version Control လား။
IDE လား။
အဲဒါေတြမဟုတ္ေသးပါဘူး။ တျခားတစ္ခုပါ။
File Sharing အေၾကာင္း သံုးမိနစ္စာေလာက္ေျပာခ်င္ပါတယ္။

လူရယ္လုိ႕ျဖစ္လာရင္ မိဘလုပ္စာခ်ည္းထုိင္စားေနလို႕ မတင္႔တယ္ဘူးဆိုသလို file ရယ္လုိ႕ျဖစ္လာရင္ ကိုယ္႔စက္မွာခ်ည္း ေနခ်င္လုိ႕မျဖစ္ဘူး။ အတူတူသံုးဖုိ႕အတြက္ share ခံရတယ္။ သနားဖုိ႕ေတာင္ေကာင္းတယ္။ ေဘာလီေဘာပြဲကလိုပဲ ဟိုဘက္ကို ပို႕တယ္ခင္ဗ်၊ ဟုိဘက္က download ၾကီးနဲ႕ ပင္႔တင္မလိုနဲ႕ဆြဲခ်လုိက္တယ္ခင္ဗ်။ ျပန္ျပီး upload ပါတယ္ခင္ဗ်ာ။ ဒီဘက္အသင္းကလည္း download ၾကီးနဲ႕ျဗဳန္းခနဲခုတ္ခ်ပါတယ္ခင္ဗ်ာ။ corrupted ျဖစ္ပါတယ္။ တစ္ခါတစ္ေလ File Size ၾကီးက mail ကေန ပို႕မရေလာက္ေအာင္ၾကီးပါတယ္။ third party ေတြဆီကပို႕ရင္လည္း ကိုယ္႔ရဲ႕ confidential data ေတြကို တျခားသူဆီမွာ ယံုယံုၾကည္ၾကည္ထားေပးရာေရာက္ပါတယ္ခင္ဗ်။

တစ္ရံုးထဲမွာေတာင္ security ေကာင္းေကာင္းနဲ႕ share ဖုိ႕ဆိုတာ AD ရိွရင္သာလြယ္တယ္ခင္ဗ်။ AD မွာ define လုပ္ထားတဲ႔ usears ေတြကို share လုပ္ခါနီးမွာရွာျပီး user A ကို folder A share မယ္။ user B ကို folder A မ share ဘူး။ စသျဖင္႔ေရြးလို႕ရပါတယ္။ ဆိုးတာက ကိုယ္ဘာသာ ဘာေတြ ဘယ္လုိ share ထားမွန္း မွတ္မထားခ်င္တာပါ။ Manage ျပန္လုပ္ရတာလည္း ပ်င္းစရာေကာင္းပါတယ္။

အလြယ္တကူ shareခ်င္ျပီး access right ေတြဘာေတြနဲ႕ သပ္သပ္ရပ္ရပ္ေလးလုပ္ခ်င္ရင္ ftp server သံုးလုိ႕ရပါတယ္။ ရည္ရြယ္ခ်က္ အၾကီးၾကီးနဲ႕ထုတ္လုိက္တဲ႔ ftp server ေတြကို ရည္ရြယ္ခ်က္ေသးေသးေလးနဲ႕ျပန္သံုးတဲ႔သေဘာပါခင္ဗ်။

Filezilla server ကို သံုးၾကည္႕ပါ။ မေလးပါဘူး။ ေပါ႔ေပါ႔ပါးပါးရိွပါတယ္။ Download+install လုပ္ခ်ိန္ ၇ မိနစ္၀န္းက်င္။ user create လုပ္၊ folder access ေပး၊ password ေပးတာက ၅ မိနစ္ခန္႕။ စုစုေပါင္း ၁၂ မိနစ္ေလာက္ဆိုရင္ ftp server up ေလသတည္း။

server ရိွရင္ client ရိွရမယ္။ ဆရာနဲ႕ တကာပဲ။ ကယ္တင္ရွင္နဲ႕ေ၀ေနယ်လိုပဲ။ တျခား network အတူတူထဲက စက္တစ္ခုခုမွာ filezilla client သြင္းပါ။ FTP Server သြင္းထားတဲ႔စက္ရဲ႕ IP ကို ခ်ိတ္ပါ။ shared ထားတဲ႔ folder ကို ျမင္ရပါျပီ။ စုစုေပါင္း ၈ မိနစ္ခန္႕။ total မိနစ္ ၂၀ ေလာက္မွာ ခင္ဗ်ားတို႕ ftp server နဲ႕client ကို ပတၱလားပမာ တီးမိေခါက္မိသြားျပီ။

ကိုယ္႔ရံုးမွာ public IP ရိွတဲ႔ Server မွာ Filezilla Server သြင္းထားျပီး အျပင္မွာ storage space ေရာင္းစားလို႕ရႏိုင္တယ္။ ဒါမွမဟုတ္ တျခားရံုးေတြကို security ေကာင္းေကာင္းနဲ႕ share ႏိုင္ပါတယ္။

Multiple folders share တဲ႔အခါ စလုပ္လုပ္ခ်င္း နည္းနည္း ခက္တတ္ပါတယ္။ Home ေပးထားတာကို နည္းနည္း နားလည္ေအာင္ၾကည္႕ပါ။
C:/folderA ကို H (Home) Folder ေပးထားတယ္ဆုိပါေတာ႔ ။ Folder ႏွစ္ခုရိွတယ္လို႕ယူဆလုိက္။

C:/folder A
D:/folder B

အဲဒီႏွစ္ folder ကို user A ကို share ထားရင္ user A က ftp client နဲ႕၀င္ရင္
\ ဆိုျပီး root folder က server မွာ home ေပးထားတာပဲ ျမင္ရပါတယ္။ အဲဒီေတာ႔ folder A က home folder ဆိုရင္ folder A ကိုပဲျမင္ရပါမယ္။ folder B ကိုပါျမင္ခ်င္ရင္ folder B ရဲ႕ alias ကိုေျပာင္းရပါမယ္။ full path နဲ႕ေရးရပါတယ္။ ဥပမာ folder B ရဲက alias=C:/folder A/ folder B

အဲဒီလိုေပးလုိက္ရင္ client ဘက္မွာ \ (root directory) ေအာက္မွာ folder B လုိ႕ေပၚပါမယ္။ ေထြေထြထူးထူးေတာ႔မဟုတ္ပါဘူး။ shortcut တစ္ခု folder A ထဲမွာ လာလုပ္သလုိမ်ိဳးပါပဲ။

alias=C:/folder A/myfav ဆိုရင္လည္းရပါတယ္။ client ဘက္ကၾကည္႕ရင္ root directory (\) ေအာက္မွာ myfav ဆိုတဲ႔ folder ေပၚေနပါမယ္။ အဲဒါဟာ folder B ပါပဲ။ client ဘက္က နာမည္မွန္မသိေစခ်င္ဘူးဆိုရင္ alias=C:/folderA/pyawpyabu ဆိုျပီးေပးလည္းရေလာက္ပါတယ္။ pyawpyabu ဆိုတာကေတာ႔ ပါဠိလို (မေျပာျပဘူးလုိ႕ အဓိပၸာယ္ရပါတယ္။ :})

ကဲ ftp တရားနာကုန္ေသာ တကာ၊တကာမတို႕သည္လည္း မိမိတို႕ အသီးသီး ဦးတည္ကုန္ရာ ရည္မွန္းခ်က္မ်ား ေပါက္ေျမာက္ေအာင္ျမင္ၾကပါေစကြယ္ရ္။

Regards,
Zero

Notes:
Window firewall မွာ port ေတြပိတ္ထားတတ္တဲ႔အတြက္ စမ္းတဲ႔အခါ server ဘက္က local network မွာ window firewall ကို off ထားပါ။

telnet (IP)(Space)(Port)
နဲ႕ port 21 ပြင္႔မပြင္႔စမ္းၾကည္႕လုိ႕ရပါတယ္။

Window 7 မွာဆုိရင္ telnet client ကိ on ျပီးမွ telnet လုပ္ၾကည္႕လုိ႕ရပါတယ္။
telnet client က Xp မွာဆုိရင္ေတာ႔ auto on ျပီးသားပါ


Start
Control Panel
Programs And Features
Turn Windows features on or off
Check Telnet Client
Hit OK

Web Service Part 1. JAX-WS 2.1

Web Service Part 1. JAX-WS 2.1

O'Reilly ကထုတ္တဲ႔ Java Web Services Up and Running ကိုဖတ္ၾကည္႕ေနပါတယ္။ ဖတ္ရင္းနဲ႕နည္းနည္းေရးလုိက္ပါတယ္။ လုိက္လုပ္ခ်င္ရင္လုပ္လုိ႕ရပါတယ္။ စုစုေပါင္းအခ်ိန္ ဆယ္႔ငါးမိနစ္ေလာက္ပဲလုိပါတယ္။

Java 6 ကိုသံုးပါမယ္။ သံုးရတာကလည္းအေၾကာင္းရိွပါတယ္။ Java 6 မွာပါတဲ႔ JAX-WS ေၾကာင္႔ျဖစ္ပါတယ္။ JAX-WS ရဲ႕အရွည္ကေတာ႔ Java API for XML-WEB Services ျဖစ္ပါတယ္။ SOAP-based ေရာ REST-style အတြက္ပါ JAX-WS က support လုပ္ပါတယ္။

Web Service က ဘာအတြက္ေကာင္းလဲဆိုတာကို အင္တာဗ်ဴးမွာေမးခဲ႔ရင္ေျဖဖုိ႕ကေတာ႔ အလြယ္ဆံုးနဲ႕အတိုဆံုးအေနနဲ႕ Legacy Systems ေတြမွာ တျခား systems ေတြနဲ႕ communicate လုပ္ရလြယ္ဖုိ႕အတြက္အဓိကသံုးပါတယ္။ ဟိုဘက္က .net ဒီဘက္က java ေရးထားလည္းရတယ္။ တစ္ဖက္ဖက္က web service provide လုပ္လုိက္ရင္ ေခၚသံုးလို႕ရျပီ။ .net နဲ႕ေရးထားတဲ႔ဘက္က program ရဲ႕ result ကို webservice ထုတ္ထားေပးရင္ အဲဒီ program ကို java နဲ႕ေနာက္တစ္ခါ ထပ္ေရးရတဲ႔ေသာကကင္းေ၀းတယ္ေပါ႔ဗ်ာ။ program ဆိုတာနဲ႕ hello world ေလာက္လုိ႕မျမင္လုိက္ပါနဲ႕။ အင္မတန္ခက္ခဲတဲ႔ business logic အခုတစ္ေထာင္ပါ၀င္တဲ႔ ပရိုဂရမ္ၾကီးလို႕ေတြးၾကည္႕ပါ။ ျပန္ေရးေနရင္ ပ်င္းစရာေကာင္းသလို မွားစရာလည္းေကာင္းတယ္။ Web Service သံုးလုိက္ေတာ႔ ဒါကိုေရွာင္ရွားႏိုင္တယ္။ မေကာင္းတာကေတာ႔ ပိုၾကာတာေပါ႔ဗ်ာ။ HTTP ကသြားရင္ အင္တာနက္ေႏွးတဲ႔ကိစၥေတြရိွမယ္။ timeout issue ရိွမယ္။ connection error ရိွမယ္။ ဟိုဘက္ system down ေနရင္ ဒီဘက္က ငုတ္တုတ္ေမ႔မယ္။ အဲဒါေတြပဲေပါ႔။ အေျခခံအားျဖင္႔ ဒီေလာက္ပဲသိရင္ရေလာက္ျပီထင္ပါတယ္။

ေရးၾကမယ္ေဟ႔ေကာင္းေကာင္း။

SOAP-based web service ေတြကို single class နဲ႕ေရးလုိ႕ရတယ္။ ဒါေပမယ္႔ ပိုျပီးေတာ႔ စနစ္တက်ျဖစ္ေအာင္ (Best practices လို႕ေခၚတယ္။ ဒါမ်ိဳးမေရးရင္လည္း ဘာမွေတာ႔မျဖစ္ဘူး။ ေရးရင္ေတာ႔ပိုေကာင္းတယ္။) ႏွစ္ပိုင္းခြဲေရးတယ္။ interface နဲ႕ implementation ေပါ႔။ အဲဒါေတြကိုဘာေၾကာင္႔သံုးသလဲဆိုတာေတြကိုလည္း Design Pattern ဖတ္ၾကည္႕ရင္သိတယ္။ အားတဲ႔အခါမွဖတ္ၾကည္႕လုိက္ေတာ႔။

SEI ဆိုတာကေတာ႔ Service Endpoint Interface.
SIB ဆိုတာကေတာ႔ Service Implementation Bean

SIB က POJO လည္းျဖစ္ႏုိင္သလို၊ Stateless Session EJB လည္းျဖစ္ႏုိင္တယ္။

TimeServer.java interface ျဖစ္ပါတယ္။
SEI လည္းျဖစ္ပါတယ္။


package timeserver;  // time server
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

/**
 *  The annotation @WebService signals that this is the
 *  SEI (Service Endpoint Interface). @WebMethod signals
 *  that each method is a service operation.
 *
 *  The @SOAPBinding annotation impacts the under-the-hood
 *  construction of the service contract, the WSDL
 *  (Web Services Definition Language) document. Style.RPC
 *  simplifies the contract and makes deployment easier.
*/
@WebService
@SOAPBinding(style = Style.RPC) // more on this later
public interface TimeServer {
    @WebMethod String getTimeAsString();
    @WebMethod long getTimeAsElapsed();
}

@ ေတြက annotation ေတြျဖစ္ပါတယ္။ ဒါေတြကိုေတြ႕ရင္ အေနာက္ဘက္မွာ လုပ္စရာရိွတာေတြ လုပ္ဖုိ႕ ၾကိတ္မွာလုိက္တာလုိ႕ယူဆပါ။ အခ်ိန္ပိုေနရင္ေတာ႔ annotation အေၾကာင္းဖတ္ပါ။ အခ်ိန္သိပ္ေျပာျပေလာက္ေအာင္မပိုရင္ေတာ႔ ကြ်န္ေတာ္အားလို႕ေရးရင္ျပန္လာဖတ္ပါ။

TimeServerImpl.java ျဖစ္ပါတယ္။
SIB လည္းျဖစ္ပါတယ္။ Implementation ပီပီ interface တစ္ခုခုကို implements လုပ္ထားတာကိုေတြ႕ပါလိိမ္႔မယ္။ မေတြ႕မွာစိုးလို႕ အ၀ါေရာင္နဲ႕တားထားပါတယ္။ implements TimeServer လုပ္ထားတာကိုေတြ႕ပါလိမ္႔မယ္။

package timeserver;

import java.util.Date;
import javax.jws.WebService;

/**
 *  The @WebService property endpointInterface links the
 *  SIB (this class) to the SEI (ch01.ts.TimeServer).
 *  Note that the method implementations are not annotated
 *  as @WebMethods.
*/
@WebService(endpointInterface = "timeserver.TimeServer")
public class TimeServerImpl implements TimeServer {
    public String getTimeAsString() { return new Date().toString(); }
    public long getTimeAsElapsed() { return new Date().getTime(); }
}


ဒီ implementation က ခက္ခက္ခဲခဲဘာတစ္ခုမွမလုပ္ထားပါဘူး။ အခ်ိန္ကို return ျပန္တာေလးေရးထားတာပါ။ အခုကလည္း web service အေၾကာင္းေျပာခ်င္တာျဖစ္လုိ႕ အပိုေတြထည္႕မေရးေသးတာလည္းျဖစ္ပါတယ္။

ၾကံဳလို႕ေလရွည္ရင္ ဒီ implementation class ဟာ သူ implements လုပ္တဲ႔ interface မွာ declare လုပ္ထားတဲ႔ methods ေတြ ပါရပါတယ္။ မပါရင္ error တက္မွာပါ။ တကယ္မတတ္လည္း survive ျဖစ္ႏိုင္တဲ႔ စင္ကာပူ I.T ေလာကမွာေတာ႔ မ်ားမ်ားသိစရာမလိုပါဘူး။ ရွာလို႕ရတာေတြေရးတတ္ရံုနဲ႕ရပါတယ္။ အခ်ိန္ပိုေနရင္သာ ငါတုိ႕ အျမဲ ဘာေၾကာင္႔ဒီလိုေရးတာလည္းဆိုတာေလးကို ျပန္ေလ႔လာေပးပါ။

တတိယ class တစ္ခုကေတာ႔ TimeServerPublisher.java ျဖစ္ပါတယ္။ ေကာ္မန္႕ေတြကို မဖ်က္ဘဲ ကူးထည္႕လိုက္ရတာက မူရင္းေရးသူကို ရိုေသသမႈပါ။ တကယ္တမ္း class က လုိင္းနည္းနည္းေလးပါပဲ။


package timeserver;

import javax.xml.ws.Endpoint;

/**
 * This application publishes the Web service whose
 * SIB is ch01.ts.TimeServerImpl. For now, the service
 * service is published at network address 127.0.0.1.,
 * which is localhost, and at port number 9876, as this
 * port is likely available on any desktop machine. The
 * publication path is /ts, an arbitrary name.
 *
 * The Endpoint class has an overloaded publish method.
 * In this two-argument version, the first argument is the
 * publication URL as a string and the second argument is
 * an instance of the service SIB, in this case
 * ch01.ts.TimeServerImpl.
 *
 * The application runs indefinitely, awaiting service requests.
 * It needs to be terminated at the command prompt with control-C
 * or the equivalent.
 *
 * Once the applicatation is started, open a browser to the URL
 *
 *     http://127.0.0.1:9876/ts?wsdl
 *
 * to view the service contract, the WSDL document. This is an
 * easy test to determine whether the service has deployed
 * successfully. If the test succeeds, a client then can be
 * executed against the service.
*/
public class TimeServerPublisher {
    public static void main(String[ ] args) {
      // 1st argument is the publication URL
      // 2nd argument is an SIB instance
      Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
    }
}

နည္းတာမွ ေတာ္ရုံနည္းတာမဟုတ္ပါဘူး။ တစ္ေၾကာင္းတည္းပဲရိွပါတယ္။

      Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());

အဲဒါဘာလုပ္တာလဲဆိုရင္ေတာ႔ service ကို launch လုပ္လုိက္တာပါပဲ။ 127.0.0.1 ဆိုတာ ကြ်န္ေတာ္တုိ႕ရဲ႕ ခ်စ္လွစြာေသာ Localhost ၾကီးရဲ႕ IP ပါပဲ။ ေနာက္က ၀စၥႏွစ္လံုးေပါက္ကေတာ႔ port ကိုေရးခါနီး ျခားထားတာပါ 9876 ကေတာ႔ 4D နံပါတ္မဟုတ္ပါဘူး။ port နံပါတ္ျဖစ္ပါတယ္။ts ကေတာ႔ service name ျဖစ္ပါတယ္။ က်န္တာေတြေပးၾကည္႕ျပီးစမ္းၾကည္႕လုိ႕ရပါတယ္။ ေနာက္မွာ နရူး (ႏြားရူး၊ new) ပါပါတယ္။ Service Implementation Class ကို ေခၚထားလိုက္ပါတယ္။

Java 6 ရဲ႕ေကာင္းျခင္းေတြထဲကတစ္ခုကေတာ႔ ေနာက္ဆံုး publisher ကို run ၾကည္႕လုိ႕ရပါတယ္။ ဘာ web server မွ မလိုပါဘူး။ Eclipse ကေန run လုိက္ပါ။ Eclipse ကေန run လုိက္ပါလုိ႕ေရးတာက ေရွ႕က class ႏွစ္ခုကို compiled မလုပ္ဘဲ ေနာက္ဆံုးတစ္ခုတည္း run ေနမွာစိုးလုိ႕ပါ။ Eclipse မွာေတာ႔ သူ႕ဘာသူ အလုိက္တသိ compile စရာရိွတာ pile ရွာပါတယ္။ Eclipse ကိုလည္း JDK 1.6 နဲ႕ compile ပါ run ပါ။  အဆင္ေျပပါလိမ္႔မယ္။

Error ေတြ ဘုရားသိၾကားမလို႕ မေပၚလာဘူးဆိုရင္ ဆိုင္ရာ ဆိုင္ရာ ဘုရားေတြကို ေက်းဇူးတင္ပါ။
ျပီးရင္ web browser ကေန
အဲဒါေလးေခၚၾကည္႕ပါ။ xml ၾကီး ဘြားကနဲေပၚလာရင္ ၾကည္ႏူးေနလုိက္ပါ။
ဒါပဲလားဆိုရင္ေတာ႔ တစ္ခုက်န္ေသးတယ္လုိ႕ေျပာရမွာပါ။ Java မွာ client တစ္ခုေလာက္ေရးျပီးစမ္းၾကည္႕ပါ။ ေရးေနၾကလူေတြကေတာ႔ URL ေတြနဲ႕ပတ္သက္ရင္ java.net.URL ကိုသံုးရမွန္းရိပ္မိေလာက္ပါတယ္။ မရိပ္မိရင္လည္း ရိပ္မိသလိုလုပ္ပါ။ ဟန္ကိုယ္ဖုိ႕မဟုတ္လား။

package client;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import timeserver.TimeServer;

import java.net.URL;
class TimeClient {
    public static void main(String args[ ]) throws Exception {
        URL url = new URL("http://localhost:9876/ts?wsdl");

        // Qualified name of the service:
        //   1st arg is the service URI
        //   2nd is the service name published in the WSDL
        QName qname = new QName("http://timeserver/", "TimeServerImplService");

        // Create, in effect, a factory for the service.
        Service service = Service.create(url, qname);

        // Extract the endpoint interface, the service "port".
        TimeServer eif = service.getPort(TimeServer.class);

        System.out.println(eif.getTimeAsString());
        System.out.println(eif.getTimeAsElapsed());
   }
}
 comment ေတြဖတ္ေစခ်င္လုိ႕ မဖ်က္ဘဲကူးလာေပးတာကိုသေဘာေပါက္ပါ။ အဲဒါကို run လုိက္ရင္ေတာ႔ ခင္ဗ်ားေမွ်ာ္လင္႔ေစာင္႔စားတမ္းတ ရင္ခုန္ေနရတဲ႔ web service က အခ်ိန္ေလးကို ျမင္ေတြ႕ရမွာပါ။

္package ေတြကို ဘယ္လိုထားထားလဲဆိုတာကို ေရးေနၾကလူဆိုရင္ေတာ႔ package keyword ကိုရွာၾကည္႕ျပီးသိႏိုင္ပါတယ္။ novice နဲ႕ newbie ေတြအတြက္ေတာ႔ ေအာက္မွာ package structure ေလး screen shot လုပ္ထားပါတယ္။



ေက်းဇူးတင္ပါတယ္။

Regards,
Zero

Ref:
Java Web Services Up and Running
Oreilly
Martin Kalin
ISBN 978-0-596-52112-7
Price SGD 55

2 b continued:
ဒီ example မွက concurrent သံုးလို႕မရေသးပါဘူး။
အဲဒါကို အပိုင္းႏွစ္မွာဆက္ပါမယ္။

အပိုင္းသံုးကေန ေျခာက္ေလာက္အထိက JAX-B
ျဖစ္ပါမယ္။

က်န္တာေတြကိုလည္းျဖည္းျဖည္းဆက္ပါဦးမယ္။

Tuesday, January 3, 2012

jQuery

jQuery

အရင္လို view အတြက္ ခဲရာခဲဆစ္လုပ္ေနစရာမလုိေတာ႔ပါဘူး။ jquery ထဲမွာၾကိဳက္တာေလးရွာျပီး ျပင္သံုးလုိ႕ရပါျပီ။ လွလွပပ form ေလးေတြ ဘယ္လိုလုပ္ထားလဲၾကည္႕ပါ။

  • view source ကိုသြားျပီး link ေတြကို click click လုပ္ျပီး ကူးတန္သည္ကူးပါ။
  • css နဲ႕ html မွာပါတဲ႔ url ေတြကို file location အရျပင္ေပးပါ။
  • css မွာသံုးထားတဲ႔ gif ေတြေတြ႕ရင္ web url ရဲ႕ေနာက္မွာ ဆက္ၾကည္႕လုိက္ျပီး ပံုေတြကိုပါ ကူးခ်င္ကူးလို႕ရပါတယ္။ ဥပမာ ဂလို။

http://www.whitespace-creative.com/jquery/jNice/
အဲဒီမွာ view source လုပ္လုိက္ရင္ [link href="jNice.css" rel="stylesheet" type="text/css" /] ဆိုတာကိုေတြ႕မယ္။ ေတြ႕ရင္ jNice.css ကို click လုိက္တယ္ဆိုပါေတာ႔။
button span {
background: transparent url(/jquery/jnice/elements/btn_right.gif) no-repeat scroll right top;
display: block;
 float: left;
 padding: 0px 4px 0px 0px; /* sliding doors padding */
 margin: 0px;
}
အဲဒီလို css code ေတြ႕မယ္။ highlight လုပ္ထားတဲ႔ပံုက ဘယ္ကေရာက္လာလဲ။ ေရွ႕ဆံုးနားကိုၾကည္႕ /jquery တဲ႔ jquery folder ထဲမွာရိွတယ္။http://www.whitespace-creative.com/jquery/jNice/ ဆိုတဲ႔ link အရ jquery folder ကိုေတြ႕ေနရျပီ။ အဲဒီေတာ႔ က်န္တာကလြယ္လြယ္ေလးပဲ။ http://www.whitespace-creative.com/jquery/jnice/elements/btn_right.gif

အဲဒီလို လုပ္လုိက္ရင္ ပံုေတြ အလကားကူးလာလို႕ရတယ္ေပါ႔ဗ်ာ။ photoshop ရမွာပ်င္းတဲ႔သူေတြအတြက္ေပါ႔။ စီးပြားေရးအတြက္ လုပ္စားမယ္႔သူေတြကေတာ႔ မကူးသင္႔ဘူး။ အခုလည္း သင္ၾကားေရးရည္ရြယ္ခ်က္နဲ႕ကူးျပတာပါ။ ဟဲဟဲ။
url ေတြေတြ႕ရင္ ေသခ်ာၾကည္႕ၾကည္႕၊ အမ်ိဳးေတြမ်ားျဖစ္ေနမလားလို႕။ သူ႕ရဲ႕ folder structure ကိုခန္႕မွန္းၾကည္႕လုိ႕ရတယ္။ ပံုေတြကူးျပီးျပီဆိုရင္ေတာ႔
background: transparent url(/jquery/jnice/elements/btn_right.gif) no-repeat scroll right top;
/jquery/jnice/elements/btn_right.gif ဆိုတာကို ျပင္လို႕ရပါျပီ။ ပံုကို css file နဲ႕ folder တစ္ခုထဲထည္႕ထားရင္ေတာ႔ btn_right.gif ဆိုရင္ရပါျပီ။  background: transparent url(btn_right.gif) no-repeat scroll right top;

ကဲ လုပ္ၾကည္႕ပါဦး။ web မွာ browser ေပၚမူတည္ျပီး tweak တန္သည္ tweak, heck တန္သည္ heck ရတတ္ပါတယ္။ browser နဲ႕အဆင္ေျပေအာင္ ကိုယ္႔ css ေတြ ယိုင္တုိင္တုိင္ မျဖစ္ေအာင္လုပ္ရတာမ်ိဳးပါ။ စင္ကာပူမွာေတာ႔ အစိုးရရံုးေတြက အသံုးမက်ဆံုး IE ကိုပဲသံုးစြဲပါတယ္။ software industry မွာေတာ႔ requirement ကို အတိအက်ေျပာျပီးေရးမွတ္ရပါတယ္။ ဥပမာ IE 6 မွာ best view ရမယ္။ က်န္တာေတြမွာ ယိုင္သည္ရိွေသာ္ တာ၀န္မယူ။စသျဖင္႔ အတိအက် သေဘာတူညီမႈရယူရပါမယ္။ IE 6 လို႕ေျပာထားျပီးရင္ IE 7 upgrade လုပ္လုိ႕ form ၾကီးနည္းနည္းရြဲ႕သြားတယ္ဆိုလည္း မတတ္ႏိုင္ပါဘူး။ out of scope ျဖစ္ပါတယ္။ စင္ကာပူမွာ ဒီလုိပဲ black or white လိုင္းေတြတားထားပါတယ္။ အစိုးရ web page ေတြၾကည္႕ရင္ ဘာ browser နဲ႕ view ရမယ္ဆုိတာပါပါတယ္။ payment လုပ္တာမ်ိဳးေတြပါရင္လည္း အဲဒါကို သတိျပဳဖုိ႕လိုပါတယ္။


ကြ်န္ေတာ္ကေတာ႔ web page လည္း မေရးတတ္ပါဘူး။ development သက္သက္ပဲလုပ္ဖူးပါတယ္။ css ေတြ jquery ေတြ၊ js ေတြ အနည္းအက်ဥ္းေလာက္ပဲသိပါတယ္။ designer ေတြအတြက္ေတာ႔ ဒါေတြဟာ ပိုသိသင္႔ပါတယ္။ testing လုပ္ေပးတဲ႔ site ေတြလည္းရိွတယ္လုိ႕သိရပါတယ္။ javascript အတြက္ကေတာ႔ Mozilla ရဲ႕ firebug က နာမည္ၾကီးပါတယ္။ IE မွာဆိုရင္လည္း developer tools ေတြရိွပါတယ္။ chrome မွာလည္းရိွပါတယ္။ စိတ္၀င္စားရင္ စမ္းၾကည္႕လုိ႕ရပါတယ္။


ref:
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements