January 7, 2012

JSP Actions

JSP စာမျက်နှာများတွင် Script Tag များအပြင်၊ Action Tags များကိုလည်း အသုံးပြုနိုင်သေး၏။ Action Tag များကို အသုံးပြု၍ Object များကို ခေါ်ယူခြင်း၊ Resource များအား ခေါ်ယူခြင်း များကို ပြုလုပ်နိုင်ပါသည်။

JSP 1.2 JSP 2.0
  • <jsp:useBean>
  • <jsp:setProperty>
  • <jsp:getProperty>
  • <jsp:forward>
  • <jsp:include>
  • <jsp:param>
  • <jsp:plugin>
  • <jsp:attribute>
  • <jsp:body>
  • <jsp:doBody>
  • <jsp:invoke>
  • <jsp:element>
သေသေချာချာ စဉ်းစားကြည့်မည် ဆိုလျှင် ယခု ဖော်ပြခဲ့သော JSP Action များဖြင့် ရေးသားနိုင်သည်များကို JSP Script ဖြင့်လည်း ရေးသားနိုင်ပါသည်။ သို့ရာတွင် ပရိုဂရမ်မာ မဟုတ်သော ဒီဇိုင်းနာများက JSP ကို ရေးသားရာတွင် Script များထဲတွင် Java ကုဒ်များကို တိုက်ရိုက်ရေးခြင်းထက်၊ XML ပုံစံဖြင့် ရေးသားနိုင်သော Action များကို အသုံးပြုသည်က ပို၍နားလည်လွယ်သဖြင့် Action များကို အသုံးပြုခြင်းဖြစ်၏။

ထို့အပြင် View ကို ရေးသားရာတွင် မှားယွင်းလွယ်သော Script ကုဒ်များကို ရေးသားသည်ထက် ဒီဇိုင်းရေးရလွယ်ကူသော Action များကို အသုံးပြုသည်က ပို၍ကောင်းပါသဖြင့် တတ်နိုင်သလောက် Action များကို အသုံးပြုရန် တိုက်တွန်းအပ်ပါသည်။

JSP 2.0 ၏ Tag များသည် Custom Tag များတွင် အသုံးပြုသော Action များဖြစ်ပါသဖြင့် Custom Tags များအကြောင်းကို ဖော်ပြရင်း ဆက်လက် ဖော်ပြသွားပါမည်။


Java Bean များအား အသုံးပြုခြင်း

<jsp:useBean>

Java Bean များအား instance အဖြစ်ပြုလုပ်ပြီး၊ အသုံးပြုလိုသည့် Scope အတွင်းတွင် သတ်မှတ်ထားခြင်း အားဖြင့်၊ JSP စာမျက်နှာများမှ အသုံးပြုနိုင်ရန် ပြုလုပ်နိုင်သော Action တစ်မျိုးဖြစ်ပါသည်။ အကယ်၍ instance လုပ်ပြီး ဆိုပါက နောက်တစ်ကြိမ် instance လုပ်မည် မဟုတ်ပေ။ တဖန် useBean ၏ attribute ၏ တန်ဖိုးများအား Script ဖြင့် ရေးသား၍ မရနိုင်ပေ။

Attribute ရှင်းလင်းချက်
id Java Bean ၏ instance ၏ အမည် ဖြစ်ပါသည်။ page အတွင်းတွင် တစ်ခုတည်းသာ ရှိရမည် ဖြစ်ပါသည်။ အမည်တူ instance ကို ရေးသား၍ မရနိုင်ပေ။ ထို့အပြင် မဖြစ်မနေ ရေးသားရန် လိုအပ်သော Attribute တစ်မျိုးဖြစ်ပါသည်။
scope instance ကို အသုံးပြုနိုင်သည့် Scope ကို ဤ Attribute ဖြင့် သတ်မှတ်ရပါသည်။
  • page
    javax.servlet.jsp.PageContext အတွင်းတွင် instance ကို သိမ်းဆည်းထားပြီး၊ ရေးသားထားသော JSP အတွင်းတွင် အသုံးပြုနိုင်မည် ဖြစ်သည်။
  • request
    javax.servlet.http.HttpServletRequest အတွင်းတွင် instance ကို သိမ်းဆည်းထားပြီး၊ Client ထံမှ Request တစ်ခုထဲတွင် အသုံးပြုနိုင်မည် ဖြစ်သည်။
  • session
    javax.servlet.http.HttpSession အတွင်းတွင် instance ကို သိမ်းဆည်းထားပြီး၊ ဆက်ရှင် အတွင်းတွင် အသုံးပြုနိုင်မည် ဖြစ်သည်။
  • application
    javax.servlet.ServletContext အတွင်းတွင် instance ကို သိမ်းဆည်းထားပြီး၊ အပလီကေးရှင်း တစ်ခုလုံးတွင် အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။
class Java Bean Instance ၏ Class အမည် ဖြစ်ပါသည်။ Instance အား new လုပ်ရာတွင် အသုံးပြုပါသည်။
beanName Java Bean Instance ၏ Class အမည် ဖြစ်ပါသည်။ Instance အား new လုပ်ရာတွင် class ကို အသုံးမပြုလိုပါက အသုံးပြုရန် လိုအပ်ပါသည်။ အကယ်၍ serializable လုပ်နိုင်သော Class ဆိုပါက Serialize လုပ်သွားမည် ဖြစ်ပါသည်။
type beanName ဖြင့် Instance ကို ပြုလုပ်ရာတွင် အသုံးပြုမည့် ပုံစံ ဖြစ်ပါသည်။

နမှုနာတစ်ခုကို ရေးသားကြည့်ပါမည်။ Car ဆိုသည့် Java Bean Class တစ်ခုကို ရေးသားပြီး useBean Action ကို အသုံးပြုကြည့်ပါမည်။

Car.java
package com.mmju.jsp.ep2;

public class Car {
 private String brand;
 private String model;
 private String year;

 public String getBrand() {
  return brand;
 }
 public void setBrand(String brand) {
  this.brand = brand;
 }
 public String getModel() {
  return model;
 }
 public void setModel(String model) {
  this.model = model;
 }
 public String getYear() {
  return year;
 }
 public void setYear(String year) {
  this.year = year;
 }
}
useBean တွင် အသုံးပြုမည့် Java Bean Class သည်၊ parameter မပါသော public constructor တစ်ခုကို ပိုင်ဆိုင်ရန်လိုအပ်ပြီး၊ getter နှင့် setter မက်သတ်များကို ပိုင်ဆိုင်ရန် လိုအပ်ပါသည်။

useBean ဖြင့် JSP အတွင်းတွင် အသုံးပြုပုံ
<jsp:useBean id="gtr" class="com.mmju.jsp.ep2.Car"  scope="request"></jsp:useBean>


<jsp:setProperty> နှင့် <jsp:getProperty>

<jsp:useBean> ဖြင့် ခေါ်ယူအသုံးပြုလိုသော Java Bean အချက်အလက် တန်ဖိုးများအား သတ်မှတ်ရာတွင်၎င်း၊ အချက်အလက်၏ တန်ဖိုးအား ရယူရာတွင် ၎င်း အထက်ပါ Action များအား အသုံးပြုနိုင်ပါသည်။ အမည် အတိုင်း တန်ဖိုးများအား သတ်မှတ်ရာတွင် <jsp:setProperty> ကို အသုံးပြုနိုင်ပြီး၊ တန်ဖိုးများအားရယူ ရာတွင် <jsp:getProperty> ကို အသုံးပြုနိုင်ပါသည်။

setProperty Tag ၏ Attributes များ
Attributeရှင်းလင်းချက်
nameအသုံးပြုမည့် Java Bean ၏ instance ၏ အမည် ဖြစ်ပါသည်။
ဤ setProperty အတွက် မရှိမဖြစ်လိုအပ်သော Attribute တစ်မျိုးဖြစ်ပါသည်။
propertyအသုံးပြုလိုသည့် Property အား သတ်မှတ်ရန် လိုအပ်ပါသည်။ အကယ်၍ "*" ကို သတ်မှတ်ခဲ့ပါက instance ၏ property ၏ အမည်တူ တန်ဖိုးများအား request အတွင်းမှ ရှာဖွေ၍ သတ်မှတ်သွားနိုင်မည် ဖြစ်သည်။ property Attribute ကို အသုံးပြုနိုင်ရန်အတွက် instance ၏ property တွင် public setter method ကို ကြိုတင် ရေးသားထားရန် လိုအပ်ပါသည်။
ဤ setProperty အတွက် မရှိမဖြစ်လိုအပ်သော Attribute တစ်မျိုးဖြစ်ပါသည်။
paramဤ param Attribute ကို အသုံးပြုထားပါက၊ param နှင့် အမည်တူ ပါရာမီတာကို request အတွင်းမှရှာဖွေ၍ property ၏ တန်ဖိုးအဖြစ် အသုံးပြုသွားမည် ဖြစ်ပါသည်။
valuevalue Attribute အား ရေးသားထားပါက၊ ထိုတန်ဖိုးကို instance ၏ တန်ဖိုးအဖြစ် အသုံးပြုသွားမည် ဖြစ်၏။ အကယ်၍ property ၏ တန်ဖိုးသည် "*" ဟု ရေးသားထားခြင်း မရှိပါက param သို့မဟုတ် value Attribute ကို ရေးသားရန်လိုအပ်ပါသည်။
ဤ value Attribute တွင် script ကုဒ်များကိုလည်း အသုံးပြုနိုင်မည် ဖြစ်ပါသည်။

လက်တွေ့ ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်ပါသည်။
<jsp:setProperty name='car'  property='model' param='model' />
<jsp:setProperty name='car'  property='brand' value='မာစီဒီး'/>
<jsp:setProperty name='car'  property='year' value='<%=year%>'/>

getPropety Tag ၏ Attributes များ
Attributeရှင်းလင်းချက်
nameအသုံးပြုမည့် Java Bean ၏ instance ၏ အမည် ဖြစ်ပါသည်။
ဤ getProperty အတွက် မရှိမဖြစ်လိုအပ်သော Attribute တစ်မျိုးဖြစ်ပါသည်။
propertyအသုံးပြုလိုသည့် Property အား သတ်မှတ်ရန် လိုအပ်ပါသည်။ property Attribute ကို အသုံးပြုနိုင်ရန်အတွက် instance ၏ property တွင် public getter method ကို ကြိုတင် ရေးသားထားရန် လိုအပ်ပါသည်။
ဤ getProperty အတွက် မရှိမဖြစ်လိုအပ်သော Attribute တစ်မျိုးဖြစ်ပါသည်။

လက်တွေ့ ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်ပါသည်။
<jsp:getProperty name='car'  property='model' />


Include နှင့် Forward


Servlet တွင်လည်း ဖော်ပြခဲ့သည့်အတိုင်း forward နှင့် Include များကို JSP Action အနေဖြင့် အသုံးပြုနိုင်ပါသည်။ Include ကို အသုံးပြု၍ အခြားသော JSP ဒါမှမဟုတ် Servlet ၏ လုပ်ဆောင်ခြားများကို လက်ရှိ အသုံးပြုနေသော JSP အတွင်းတွင်၎င်း၊ Forward Action ကို အသုံးပြု၍ အခြားသော Servlet ဒါမှမဟုတ် JSP အား လက်လွှဲ၍ Request လုပ်နိုင်ပါသည်။

အသုံးပြုနိုင်သော Attribute များမှာ အောက်ပါအတိုင်းဖြစ်ပါသည်။
Attributeရှင်းလင်းချက်
pageInclude ဒါမှမဟုတ် Forward လုပ်မည့်စာမျက်နှာ၏ URL ကို ရေးသားရပါမည်။
flushtrue နှင့် false တစ်ခုခုကို သတ်မှတ်နိုင်ပြီး၊ ရေးသားပြီးသောအခါ Buffer အား Flush လုပ်မည် မလုပ်မည်ကို ဖော်ပြပေးနေပါသည်။ Include Action မှာသာအသုံးပြုပါသည်။ ဘာမှ ရေးသားထားခြင်းမရှိပါက Default အနေနှင့် false ကို အသုံးပြုသွားမည် ဖြစ်ပါသည်။

Forward ကို အသုံးပြုရာတွင် Servlet ကဲ့သို့ပင် Forward မတိုင်ခင် အခြားသော Output များကို ရေးသား၍မရပေ။ ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်၏။
<jsp:include page="/jsp/header.jsp" flush="true" />
<jsp:forward page="/jsp/forwardServlet" />

တဖန် Include နှင့် Forward လုပ်သည့်အခါတွင် ပါရာမီတာများကို အသုံးပြုလိုပါက param Action ကို အသုံးပြုနိုင်ပါသည်။

ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်၏။
<jsp:include page="/header">
    <jsp:param name="epNum" value="Episode 2" />
    <jsp:param name="title" value="Action များကို အသုံးပြုခြင်း" />
</jsp:include>

<jsp:forward page="/createCar">
    <jsp:param name="msg" value="ဖော်ပြရန် ကားများမရှိပါသဖြင့် ကားအသစ်များကို စာရင်းသွင်းပါ။" />
</jsp:forward>

အသုံးများသော JSP Action များကို ရေးသားပုံနှင့်တကွ ဖော်ပြခဲ့ပါပြီ။ ကျန်သော Action များကိုလည်း နောက်ဆက်တွဲအခန်းများတွင် ဆက်လက်၍ဖော်ပြသွားပါဦးမည်။ ယခင်ဆိုလျှင် ဖော်ပြခဲ့သည် များကို အသုံးပြု၍ နမှုနာတစ်ခုကို ရေးသားလေ့ရှိခဲ့သော်လည်း၊ ဤအခန်းမှစ၍ စာဖတ်သူများလည်း စဉ်းစားနိုင်စေရန် နမှုနာများကို ရေးသားမည် ဖြစ်သော်လည်း၊ ရေးသားထားသော နမှုနာအား မည်သည့်နေရာတွင် အားနည်းနေသည်၊ မည်သို့ပြုလုပ်ပါက ပို၍ကောင်းမွန်လာနိုင်သည် ဆိုသည်ကို ဆွေးနွေးလိုပါသည်။

စာဖတ်သူများနှင့်ဆွေးနွေးထားချက်များသည် နောက်စာဖတ်သူများ အတွက် အဖိုးတန်သော အကြောင်းအရာများအဖြစ် ကျန်ရစ်လိမ့်မည်ဟု မျှော်လင့်ပါသည်။


နမှုနာ အပလီကေးရှင်း

JSP Action ကို အသုံးပြု၍၊ ကားစာရင်းတစ်ခုကို ရေးသားပါမည်။ အမှန်မှာ Data Base ကို အသုံးပြုသင့်သော်လည်း ဤအခန်းတွင် JSP ကို အဓိကထား၍ ဖော်ပြလိုပါသောကြောင့် Application Scope အတွင်းတွင် အချက်အလက်များကို သိမ်းဆည်း အသုံးပြုပါမည်။

အောက်ပါစာမျက်နှာများကို အသုံးပြုသွားပါမည်။

  1. /page/episode2.html ပင်မစာမျက်နှာဖြစ်ပြီး ကားစာရင်းနှင့် ကားအသစ်သွင်းရန် စာမျက်နှာများဆီသို့ သွားရန် လင့်ခ်များကို ရေးသားထားပါသည်။
  2. /jsp/episode2/ep2-10.jsp Application Data ထဲတွင်ရှိသော ကားလစ်ကို ခေါ်ယူပြီး၊ တွေ့ရှိပါက ကားစာရင်းကို ဖော်ပြမည် ဖြစ်ပြီး၊ မရှိပါက ကားအသစ်သွင်းရန် စာမျက်နှာများကို အလိုအလျှောက် ဖော်ပြပေးမည် ဖြစ်သည်။
  3. /jsp/episode2/ep2-11.jsp ကားစာရင်း သွင်းရန် စာမျက်နှာဖြစ်သည်။
  4. /jsp/episode2/ep2-12.jsp ကားစာရင်း သွင်းထားသော ကားအား ရေးသားထားသည်မှာမှန်ကန်ကြောင်း အသုံးပြုသူကို စစ်ဆေးစေသော စာမျက်နှာဖြစ်ပါသည်။ စာရင်းသွင်းမည်ဟု ခလုပ်နှိပ်ပါက ကားစာရင်း စာမျက်နှာကို ဖော်ပြမည် ဖြစ်ပါသည်။
  5. /jsp/episode2/ep2-14.jsp စာမျက်နှာ အသီးသီးတွင် ဖော်ပြလိုသော ရှင်းပြချက်ကို ရေးသားထားပြီး၊ စာမျက်နှာ အသီးသီးမှ include လုပ်ခြင်းဖြင့် အသုံးပြုပါသည်။
နမှုနာ အပလီကေးရှင်းကို ဤနေရာမှ လက်တွေ့ စမ်းသပ်အသုံးပြုနိုင်ပါသည်။



ဤစာမျက်နှာကို စမ်းသပ်ကြည့်ပြီး၊ လိုအပ်ချက်များနှင့် မည်သို့ ပြုပြင်သင့်ကြောင်းကို စဉ်းစားကြည့်ပါ။ 


လေးစားစာဖြင့်
မင်းလွင်

6 comments:

  1. Today, I went to the beach with my children. I found
    a sea shell and gave it to my 4 year old daughter
    and said "You can hear the ocean if you put this to your ear." She put the
    shell to her ear and screamed. There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this is entirely off topic but I had to tell someone!

    ReplyDelete
  2. I have read so many posts on the topic of the blogger lovers but this
    post is truly a fastidious paragraph, keep it up.

    ReplyDelete
  3. Definitely imagine that that you stated. Your
    favorite reason seemed to be on the net the simplest thing to have
    in mind of. I say to you, I certainly get annoyed while other people think about issues that they plainly don't
    understand about. You controlled to hit the nail upon the highest and
    defined out the whole thing with no need side-effects
    , people can take a signal. Will likely be again to get more.
    Thank you

    ReplyDelete
  4. I'm truly enjoying the design and layout of your website.
    It's a very easy on the eyes which makes it much more pleasant for me to come
    here and visit more often. Did you hire out a designer to create your
    theme? Superb work!

    ReplyDelete
  5. great submit, very informative. I ponder why the opposite experts of this sector do not notice this.
    You must continue your writing. I am confident, you've a huge readers' base already!

    ReplyDelete
  6. When someone writes an post he/she maintains the image of
    a user in his/her brain that how a user can know it.
    Therefore that's why this post is perfect. Thanks!

    ReplyDelete