Showing posts with label JSP lessons. Show all posts
Showing posts with label JSP lessons. Show all posts

Monday, February 6, 2012

JSP သင္ခန္းစာ ၆

အခုဆိုရင္ သင္ခန္းစာ ၆ ကိုေရာက္ရိွလို႕လာပါျပီ။

ဒီတစ္ခါမွာေတာ႔ JSTL အေၾကာင္း နည္းနည္းေလာက္ေျပာပါမယ္။ သင္ခန္းစာေတြကိုေရးေနရင္းနဲ႕မွ ျပန္လုပ္ၾကည္႕ျဖစ္ပါတယ္။ ကြ်န္ေတာ္႔ရဲ႕ျပႆနာက ေရွ႕အလုပ္မွာတုန္းကလည္း စဥ္းစားခ်ိန္မေရေလာက္ေအာင္ အလုပ္မ်ားခဲ႔တဲ႔အတြက္ လုပ္ဖူးတာေတြကို ျပန္ျပီး ေက်ညက္ေအာင္ ေလ႔လာခ်ိန္မေရလိုက္ဘူး။ ဒုတိယအလုပ္မွာၾကေတာ႔ ဘာမွ မလုပ္ရတဲ႔အတြက္ စာေတြပဲဖတ္ေနေတာ႔ တကယ္မေရးျဖစ္ေတာ႔ဘူး။ လုပ္ဖူးတာေတြၾကေတာ႔ ေမ႔သြားျပီး၊ ဖတ္ထားတာေတြၾကေတာ႔ မစမ္းၾကည္႕ရေသးဘူးျဖစ္ေနပါတယ္။ ဒါနဲ႕ ကိုယ္႔ဘာသာကိုယ္လည္းစာေႏြႊးတယ္အမွတ္နဲ႕ ေလ႔က်င္႔ခန္းတစ္ခ်ိဳ႕ျပန္လုပ္ၾကည္႕ပါတယ္။

Tag ေတြအေၾကာင္းကို သိရင္ JSTL ကို ပိုနားလည္ႏုိင္ပါတယ္။ SCWCD ေျဖတုန္းကေတာ႔ TLD (Tag Library Descriptors) Tag Lib အေၾကာင္းေတြ ဖတ္ခဲ႔ဖူးပါတယ္။ Tag Library နဲ႕ပတ္သက္ျပီး Manning က Tag Libraries in action ဆိုတဲ႔စာအုပ္တစ္အုပ္လည္းထုတ္ပါတယ္။ hml မွာကိုပဲ tag ေတြအေၾကာင္းေလ႔လာၾကည္႕ႏိုင္ပါတယ္။ body tag က ဘာလုပ္သလဲ။ form ဆိုရင္ ဘာေတြလုပ္သလဲ။ စသျဖင္႔ သတ္မွတ္တာမ်ိဳးေပါ႔။ [c:forEach] ဆိုတာေလးကိုျမင္ရင္ looping ပတ္ဖုိ႕ အေနာက္မွာ code ေတြေရးထားျပီး jsp ကေန taglib ေၾကျငာျပီး အဲဒီ tag ေတြယူသံုးတာမ်ိဳးေပါ႔။ အဓိက အားသာခ်က္က clean code ျဖစ္ေစတာပါပဲ။ ရွင္းရွင္းေလးပဲ။ view မွာကို ရွဳပ္ေနျပီဆို မဟုတ္ေတာ႔ဘူး။ code ကို ရွင္းရွင္းေလး တကယ္ေရးတတ္ဖုိ႕က ပိုျပီးခက္တယ္လုိ႕ထင္မိတယ္။ တစ္နည္းအားျဖင္႔ view မွာ business logicနဲ႕ဆိုင္တဲ႔ code ေတြေရာ java code ေတြပါ မပါေလ ရွင္းေလလုိ႕ထင္ပါတယ္။ JSTL ဆိုတာကလည္း JSP Standard Tag Library ဆိုတဲ႔အတြက္ သူ႕မွာလည္း standard tag ေတြပါေနျပိဆုိတာကို သိႏုိင္ပါတယ္။

jstl ကုိ apache foundation ဘက္ကစေရးပါတယ္။ ေနာက္ဆံုး version 1.2 ကိုေတာ႔ sun ဘက္ကေရးျပီး glassfish project ထဲထည္႕ထားတာေတြ႕ရပါတယ္။ 1.2 မတိုင္ခင္မွာေတာ႔  jstl အတြက္ jar files ႏွစ္ခုလိုပါတယ္။ တစ္ခုကjstl.jar ပါ။ ေနာက္တစ္ခုက standard.jar ျဖစ္ပါတယ္။

အဲဒီ jar files ႏွစ္ခုကို web server နဲ႕ library folder မွာထည္႕ေလ႔ရိွပါတယ္။ အဲဒီမွာလည္း ေျပာစရာတစ္ခုရိွပါတယ္။ web server ေတြအေနနဲ႕ သူတုိ႕ရဲ႕ common\lib ေအာက္က jar file နဲ႕ application တစ္ခု စီရဲ႕ lib folder က jar file တူေနရင္ common\lib ေအာက္က jar ကိုပဲယူျပီး application lib ေအာက္က jar file ကိုေတာ႔ cannot load ဆိုတဲ႔ exception ျပပါလိမ္႔မယ္။ တူေနတဲ႔ jar ႏွစ္ခုကို တစ္ျပိဳင္နက္ load မလုပ္ဖူးဆိုတာကိုေျပာခ်င္တာပါ။

JSTL ရဲ႕ အေၾကာင္းက ေတာ္ေတာ္ေလးက်ယ္ျပန္႕ပါတယ္။ ေလာေလာဆယ္ေရးဖုိ႕အတြက္ကိုပဲ ဦးတည္ျပီးေျပာလုိက္ပါတယ္။ အခ်ိန္ရရင္ေတာ႔ JSTL နဲ႕ပတ္သက္တဲ႔စာအုပ္ေတြ ထပ္ဖတ္ျပီး သပ္သပ္တစ္ခုေရးလုိက္ပါဦးမယ္။ Manning ရဲ႕ JSTL in action စာအုပ္ကိုလည္း စင္ကာပူ အစိုးရက ႏွစ္အုပ္ထဲ၀ယ္ထားတဲ႔အတြက္ woodlands သို႕မဟုတ္ jurong ဘက္ေရာက္မွ ငွားျပီးဖတ္ၾကည္႕ပါဦးမယ္။
အရင္တုန္းကေတာ႔ အစိုးရက အနည္းဆံုး 5 copies ေလာက္၀ယ္ထားတဲ႔အတြက္ ငွားရတာ ပိုျပီးလြယ္ပါတယ္။ ေခြ်တာေရးမ်ားလားလို႕ေတာင္ေတြးမိပါတယ္။

web.xml အေၾကာင္းလည္း နည္းနည္းေလာက္ေျပာရမယ္ထင္ပါတယ္။ J2EE application ေတြမကင္းႏိုင္တဲ႔ config file ျဖစ္ပါတယ္။ အဲဒီမွာ အစံုေရးၾကပါတယ္။ security filter ေတြ၊ framework ရဲ႕ controller ေတြ၊ servlet mapping ေတြ၊ tag definition ေတြ၊ error handling ေတြ၊  db information ေတြ အစံုအစံုအစံု အဲဒီမွာေရးပါတယ္။

ထင္ရွားတဲ႔ Error 500, Error 404 ေတြကို မျမင္ခ်င္ရင္လည္း ကို္ယ္႔ဘာသာကိုယ္ web.xml မွာ error page ေလးေတြ လုပ္လုိ႕ရပါတယ္။ HTTP Error 500 Internal server error ကို ေတြ႕ရင္ users ေတြ စိတ္မခ်မ္းသာမွာစုိးတယ္ဆုိရင္ Http 500 အတြက္ Error Page ေလးကို myHttp500Err.jsp စတဲ႔ နာမည္လွလွေလးေပးျပီး။"We are sorry, you are unlucky today" ဆိုတာမ်ိဳး ျပခ်င္ျပလို႕ရပါတယ္။ အဲဒါမ်ိဳးကို web.xml မွာ


[error-page]
[error-code ] 500 [ /error-code]
[location ]  myHttp500Err.jsp  [ /location]
 [ /error-page]


ဆိုျပီး ေရးထားလုိ႕ရပါတယ္။ SCWCD မွာေတာ႔ web.xml အေၾကာင္း ေတာ္ေတာ္ေလးစံုစံုလင္လင္ပါပါတယ္။ အထူးသျဖင္႔ config ကေနျပီး Error Page လုပ္ထားႏိုင္တာ အင္မတန္ေကာင္းပါတယ္။ ျပင္ရတာလည္း လြယ္ပါတယ္။ web.xml ေလးဖြင္႔ျပီး file နာမည္ေလးေျပာင္းလိုက္ရံုနဲ႕ ေနာက္ထပ္ jsp တစ္ခုကို error page အေနနဲ႕ေျပာင္းလုိ႕ရႏုိင္ပါတယ္။  ဥပမာ Error Message အသစ္တစ္ခုကို ဒီဇိုင္း အပ်ံစားလုပ္ျပီး specilHttp500Err.jsp လုပ္တယ္ဆိုပါေတာ႔။ "Now is X'mas season, this error page is our X'mas present for you .." ဆိုတဲ႔ error message မ်ိဳးနဲ႕ဆိုပါေတာ႔။


[error-page]
[error-code ] 500 [ /error-code]
[location ]  specilHttp500Err.jsp  [ /location]
 [ /error-page]


အဲဒါေလးေျပာင္းလုိက္ရံုပါပဲ။ Error တင္မဟုတ္ပါဘူး။ Exception ေတြကိုလည္း အဲဒီမွာ Handling လုပ္ႏုိင္ပါေသးတယ္။

web.xml အေၾကာင္းေျပာရင္း error page config ေရာက္သြားပါတယ္။ နမူနာေျပာျပတာပါ။ အခုသိစရာလိုတာက TLD ေတြကိုဘယ္ေနရာမွထားျပီး ဘယ္လို config သလဲဆိုတာပါပဲ။
[tomcat]/webapps
[tomcat]/webapps/[your application]/

[tomcat]/webapps/[your application]/WEB-INF

[tomcat]/webapps/[your application]/WEB-INF ေအာက္မွာေတာ႔ lib folder ရိွပါတယ္။ အဲဒီမွာ META-INF folderထားေလ႔ရိွပါတယ္။ TLD extension နဲ႕အဆံုးသတ္တဲ႔ tag lib descripters files ေတြကို
[tomcat]/webapps/[your application]/WEB-INF/META-INF ေအာက္မွာထားေလ႔ရိွပါတယ္။ TLD file ေတြကို standard.jar ကို extract လုပ္လုိက္ရင္ MET-INF ဆိုတဲ႔ folder ကိုေတြ႕ရပါလိမ္႔မယ္။ အဲဒီ META-INF file ထဲမွာေတာ႔ c.tld, c-rt.tld, fmt.tld, fmt-rt.tld စတဲ႔ tld file ေတြကို ေတြ႕ႏိုင္ပါတယ္။
c.tld ကိုဖြင္႔ဖတ္ၾကည္႕ရင္ tag name ဆိုတာေလးေတြကိုေတြ႕ႏို္င္ပါတယ္။ choose/if/forEach စတာေတြကိုေတြ႕ႏိုင္ပါတယ္။ အဲဒါေတြကို jsp မွာထည္႕သံုးတဲ႔အခါ tld ကေနတစ္ဆင္႔ ေနာက္မွာ ေရးထားတဲ႔ java codes ေတြကို ေရာက္သြားေအာင္လုပ္ထားတာပါပဲ။ အခုနက Extract လုပ္ထားတဲ႔ META-INF ေလးကို ကူးျပီး WEB-INF ေအာက္ကိုပို႕ထားလုိက္ပါ။ အဲဒါဆိုရင္ TLD files ေတြဟာ [tomcat]/webapps/[your application]/WEB-INF/META-INF/ ေအာက္ကိုေရာက္သြားပါျပီ။
 [taglib>

   [ taglib-uri ] http://java.sun.com/jsp/jstl/core [ /taglib-uri]
   [ taglib-location ] /WEB-INF/META-INF/c.tld [ /taglib-location]
[/taglib]


အဲဒါေလးကို web.xml ထဲမွာ ထည္႕ေရးေပးရပါမယ္။ အေပၚမွာ uri တစ္ခုပါေနတာကို သတိထားမိမယ္ထင္ပါတယ္။ taglib တစ္ခုမွာ uri နဲ႕ location ဆိုျပီးေပးထားတာကို ေတြ႕မွာပါ။ အေပၚက uri ကုိညႊန္းရင္ ဘယ္မွာရွာရမွန္းမသိမွာစိုးလုိ႕ ေအာက္မွာ သက္ဆိုင္တဲ႔ tld ရဲ႕ location ကိုထည္႕ေပးတဲ႔သေဘာပါပဲ။ web.xml အျပည္႕အစံုကေတာ႔ ဒီလိုေနမွာပါ။



[?xml version="1.0"?]
[!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"]
[web-app]
  [taglib]
           [taglib-uri]http://java.sun.com/jsp/jstl/core[/taglib-uri]
           [taglib-location]/WEB-INF/META-INF/c.tld[/taglib-location]
[/taglib]
 [/web-app]

အလြယ္ဆံုး နမူနာေလးတစ္ခုေရးၾကည္႕ပါမယ္။ jstlTest.jsp ဆိုၾကပါစုိ႕။


[%@ page language="java" contentType="text/html;
         charset=US-ASCII" pageEncoding="US-ASCII"%]

[%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %]

[!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"]
[html]
  [head]
    [meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"]
    [title]iteration with c:forEach loop[/title]
  [/head]
  [body]
    [h2]iteration with c:forEach loop[/h2]
 
    [c:forEach var="i" begin="1" end="10"]
            [c:out value="${i}" /]
    [/c:forEach]
  [/body]
[/html]



[%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %] 
ဒီဟာကေတာ႔ tag llib သံုးမယ္ဆိုတာကို အေၾကာင္းၾကားတာပါ။ version 1.1 JSTL အတြက္ေရးတဲ႔ပံုစံျဖစ္ပါတယ္။ 1.2 မွာဆုိရင္ uri နည္းနည္းေျပာင္းသြားပါလိမ္႔မယ္။ JSTL,JSP,Servlet နဲ႕ tomcat version အတြဲကို ဒီလိုသတ္မွတ္ပါတယ္။

JSTL 1.0 : Servlet 2.3 : JSP 1,2 (tomcat 4)
JSTL 1.1 : Servlet 2.4 : JSP 2.0 (tomcat 5)
JSTL 1.2 : Servlet 2.5 : JSP 2.1 (tomcat 6)

အဲဒါေလးေတြကို မသိရင္ တခါတေလ တစ္ခ်ိဳ႕ version မွာ ရ တစ္ခ်ိဳ႕မွာ မရတဲ႔ ျပႆနာတက္နုိင္ပါတယ္။ အထူးသျဖင္႔ migration လုပ္တဲ႔အခါမ်ိဳးနဲ႕ source code ေတြကို အဆင္႔ျမွင္႔တဲ႔အခါမ်ိဳးမွာ သတိျပဳဖုိ႕လိုပါတယ္။ ေနာက္တထပ္သတိျပဳစရာ J2EE 1.4 လား၊ J2EE 1.5 လားဆိုတာလဲရိွပါေသးတယ္။
servlet API history မွာၾကည္႕လို႕ရပါတယ္။

Servlet API history
Servlet API versionReleasedPlatformImportant Changes
Servlet 3.0December 2009JavaEE 6, JavaSE 6Pluggability, Ease of development, Async Servlet, Security, File Uploading
Servlet 2.5September 2005JavaEE 5, JavaSE 5Requires JavaSE 5, supports annotation
Servlet 2.4November 2003J2EE 1.4, J2SE 1.3web.xml uses XML Schema
Servlet 2.3August 2001J2EE 1.3, J2SE 1.2Addition of Filter
Servlet 2.2August 1999J2EE 1.2, J2SE 1.2Becomes part of J2EE, introduced independent web applications in .war files
Servlet 2.1November 1998UnspecifiedFirst official specification, added RequestDispatcherServletContext
Servlet 2.0JDK 1.1Part of Java Servlet Development Kit 2.0
Servlet 1.0June 1997



    [c:forEach var="i" begin="1" end="10"]
            [c:out value="${i}" /]
    [/c:forEach]

ဆိုတဲ႔  code ကိုၾကည္႕ရင္ အသံုးျပဳမယ္႔ tag lib ကို prefix c ဆိုျပီး ေၾကညာထားတဲပအတြက္ c: ဆိုျပီး သံုးမယ္႔ tag name ေတြေရးပါတယ္။ forEach ဆိုတာ looping ပတ္ဖို႕အတြက္ သံုးတဲ႔ tag ျဇစ္ပါတယ္။ begin နဲ႕ end ကေတာ႔  သူတို႕နာမည္ၾကည္႕ရံုနဲ႕နားလည္နုိင္ပါတယ္။ c: out ဆိုတာမွာ tag name out ကို အသံုးျပဳပါတယ္။ printWriter out ျဖစ္ပါလိမ္႔မယ္။ တစ္ခုခုကို စာသားအျဖစ္ရိုက္ထုတ္ျပတာပါ။ ဒီမွာေတာ႔ variable i ကို loop ပတ္ျပီး တန္ဖိုးေတြ ျပန္ေရးတာကိုေတြ႕ပါလိမ္႔မယ္။  forEach ကိုေရာ out ကိုပါ tag အဖြင္႔အပိတ္နဲ႕ထားပါတယ္။  [c:out value="${i}" /] ဆိုတာနဲ႕   [c:out value="${i}" ]
 [/c:out ] ဟာ အတူတူပါပဲ တစ္ေၾကာင္းတည္း ေရးတဲ႔ tag ေတြမွာ / ထည္႕လိုက္တာဟာ အပိတ္ပါပဲ။

တစ္ခ်ိဳ႕စာအုပ္ေတြမွာ JSTL ကိုေရးတဲ႔အခါ web.xml ကို မရွင္းျပထားပါဘူး။ တစ္ခါတစ္ခါ ရြာလည္တတ္ပါတယ္။ jar files ေတြ ထည္႕ထားေပမယ္႔ tag ေတြကို error ျပေနတာေတြဟာ web.xml မွာ config မလုပ္ထားလုိ႕ပါပဲ။

 jstlTest.jsp ကို run ၾကည္႕လုိ႕ အိုေကတယ္ဆိုရင္ေတာ႔ jstl အေျခခံေလးတစ္ခု ရသြားျပီလုိ႕ဆုိႏုိင္ပါျပီ။

ဒါကေတာ႔ jstl ရဲ႕ နမူနာ declaration ေလးေတြပါ။ အခုက c: ဆိုတဲ႔ core tag အတြက္ ေရးတာပါ။ က်န္တာေတြကို ေရးခ်င္ရင္လည္း ေရးလို႕ရပါတယ္။ တစ္ခုနားလည္သြားရင္ က်န္တာေတြက နားလည္ဖုိ႕မခက္ေတာ႔ပါဘူး။



c:   <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
fn:  <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
fmt: <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
xml: <%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> 
ေနာက္ထပ္ေလ႔က်င္႔ခန္းမွာေတာ႔ MySql နဲ႕ခ်ိတ္ပါမယ္။ ဒါဆိုရင္ေတာ႔ jsp အေျခခံေလးတစ္ခုေလာက္ေတာ႔ ရလိုက္ျပီလို႕ဆိုႏိုင္ပါတယ္။

ကဲလက္ေတြ႕ ေလ႔က်င္႔ၾကည္႕ပါဦး။

Regards,
Zero

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 အတြက္ပိုပီျပင္လာပါတယ္။

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