February 25, 2012

Directives

Directives ဆိုသည်မှာ JSP အတွင်းတွင် အသုံးပြုနိုင်သော Tag အမျိုးအစားတစ်ခုဖြစ်ပြီး၊ ထိုစာမျက်နှာ၏ ထူးခြားချက်များကို JSP အင်ဂျင်အား ပြောပြနိုင်ပါသည်။ JSP အင်ဂျင်သည် အထက်ပါ Directives များ၏ သတင်းပေးချက်များအတိုင်း ထိုစာများနှာများအား ပြုပြင်ပေးပါသည်။ ရေးသားနေသော စာမျက်နှာ အတွင်းသို့ Java Packages များကို import လုပ်ရာတွင်၎င်း၊ အမှားစာမျက်နှာများ ဆီသို့ လမ်းညွှန်ရာတွင်၎င်း၊ ဆက်ရှင် အချက်အလက်များကို သတ်မှတ်ရာတွင်၎င်း Directives များကို အသုံးပြု နိုင်ပါသည်။
Directives များကို ရေးသားရာတွင် အောက်ပါအတိုင်း ရေးသားလေ့ရှိ၏။
<%@ Directive ၏အမည်နှင့် သက်မှတ်ချက်များ %>

ဤအခန်းတွင် အသုံးများသော အောက်ပါ Directive များ အကြောင်းကို ဖော်ပြသွားပါမည်။

  • Page Directive
  • Taglib Directive
  • Include Directive

Page Directive

Page Directive များသည် များသောအားဖြင့် JSP စာမျက်နှာ ရေးသားရန် ကွန်တရိုးများကို သက်မှတ်ရာတွင် အသုံးပြုသည်က များသည်။ အသုံးပြုနိုင်သော Attribute များမှာ အောက်ပါအတိုင်းဖြစ်၏။

အမည် အသုံးပြုပုံရှင်းလင်းချက်
autoFlush အလိုအလျှောက် Buffer အား Flush လုပ်မည်၊ မလုပ်မည်ကို သတ်မှတ်နိုင်ပါသည်။ true နှင့် false မှ နှစ်သက်ရာကို ရွေးချယ်နိုင်ပြီး၊ ဘာမှ မသတ်မှတ်ထားပါက true ကို အသုံးပြုသွားမည် ဖြစ်ပါသည်။
buffer JSP စာမျက်နှာကို ရေးသားစဉ်တွင် အသုံးပြုမည့် Buffer ၏ ပမာဏကို သတ်မှတ်နိုင်ပါသည်။ အသုံးပြုမည့် ဆိုက်သည် KB ဖြင့် သတ်မှတ်ပြီး၊ none ကို သတ်မှတ်ထားပါက Buffer ကို အသုံးပြုမည် မဟုတ်ပါ။  
contentType JSP စာမျက်နှာကို ရေးသားရာတွင် အသုံးပြုမည့် MIME Type ကို သတ်မှတ်ရန်လိုအပ်ပြီး၊ text/html; charset:8859_1 သည် Default ဖြစ်ပါသည်။ charset တွင် သတ်မှတ်ထားသော စာလုံးပုံစံကို အသုံးပြုသွားမည် ဖြစ်ပါသည်။
errorPage JSP စာမျက်နှာအတွင်းတွင် Error များဖြစ်ပေါ်လာပါက၊ အသုံးပြုမည့် Error စာမျက်နှာကို သတ်မှတ်ရေးသားရာတွင် အသုံးပြုပါသည်။ Error စာမျက်နှာ၏ Page Directive တွင် isErrorPage ၏ တန်ဖိုးအား true ဟု သတ်မှတ်ရေးသားရန် လိုအပ်ပါသည်။
extends JSP စာမျက်နှာ Class ၏ Default Extension သည် javax.servlet.jsp.HttpJspPage ဖြစ်၏။ အခြားသော class များအား Extend ပြုလုပ်လိုပါက အထက်ပါ Page Directive ကို အသုံးပြုနိုင်ပါသည်။
import JSP စာမျက်နှာအတွင်း Class များအား import ပြုလုပ်ရာတွင် အသုံးပြုနိုင်ပါသည်။ Class အများစုအား import ပြုလုပ်ရာတွင် ကော်မာ "," စာလုံးကို ကြားခံ၍ အသုံးပြုနိုင်ပါသည်။
info JSP စာမျက်နှာ၏ သတင်းအချက်အလက်များကို သတ်မှတ်ရေးသားနိုင်ပါသည်။ javax.servlet.Servlet#getServletInfo ဖြင့် ခေါ်ယူပါက အထက်ပါ အချက်အလက်များကို ရရှိနိုင်မည် ဖြစ်သည်။
isErrorPage Error Page အဖြစ်အသုံးပြုလိုပါက သတ်မှတ်ရန်လိုအပ်သော Page Directive ဖြစ်ပါသည်။ ဤစာမျက်နှာအတွင်းမှ exception Object ကို အလိုအလျှောက် အသုံးပြုနိုင်ပါမည်။ အခြားသော စာမျက်နှာတစ်ခုတွင် အမှားဖြစ်ပေါ်၍ throw လုပ်ထားသော အများများကို exception Object နှင့် ဤစာမျက်နှာတွင် ရယူထားသောကြောင့် ဤစာမှတ်နှာအတွင်းတွင် exception Object အား အလိုအလျှောက် အသုံးပြုနိုင်ခြင်း ဖြစ်သည်။
isThreadSafe javax.servlet.SingleThreadMode ကို အသုံးပြုနိုင်ပါသည်။ SingleTheradMode အားအသုံးပြုပါက Thread တစ်ခုတွင် Object တစ်ခု အနေဖြင့် အသုံးပြုနိုင်မည် ဖြစ်သော်လည်း၊ အများသုံး Object များအား ဆက်သွယ်အသုံးပြုရာတွင် အထူးသတိထား အသုံးပြုရန်လိုအပ် ပါသည်။
language JSP စာမျက်နှာအတွင်းတွင် အသုံးပြုမည့် ဘာသာရပ်ကို သတ်မှတ်နိုင်ပြီး jsp 2.2 အထိ java ကိုသာ သတ်မှတ်နိုင်မည် ဖြစ်သည်။
session JSP စာမျက်နှာအတွင်း ဆက်ရှင်အားအသုံးပြုမည်၊ အသုံးမပြုမည်ကို သတ်မှတ်နိုင်ပါသည်။ Default တန်ဖိုးမှာ true ဖြစ်ပါသောကြောင့် ဘာမှ ရေးသားထားခြင်း မရှိပါက ဆက်ရှင်ကိုအသုံးပြုနိုင်မည် ဖြစ်သည်။


Taglib Directive

JSP 1.1 မှစ၍ ကိုယ်ပိုင် Custom Tag များကို ရေးသားအသုံးပြုလာနိုင်၏။ taglib Directive အား Custom Tag များအားအသုံးပြုရန်အတွက် ပြင်ဆင်ထားခြင်းဖြစ်၏။ Attribute အနေဖြင့် uri နှင့် prefix ကို သတ်မှတ်ရေးသားရန်လိုအပ်ပြီး၊ Taglib ၏ တည်နေရာကို uri တွင် ရေးသားရန်လိုအပ်ပြီး၊ prefix သည် အသုံးပြုမည့် Custom Tag ၏ အစစာလုံး အနေဖြင့် ရေးသားရန် လိုအပ်ပါသည်။
<@taglib uri="sample.tld" prefix="sample">

<sapmle:(tag name) ..... />

နောက်တစ်ခေါက် အီးဇီး ဂျေအက်စ်ပီတွင် Custom Tag အကြောင်းကို ဖော်ပြမည် ဖြစ်ပြီး၊ Taglib Directive ၏ အသုံးပြုပုံကို Custom Tag အကြောင်းဖော်ပြရင်း ဆက်လက်ဖော်ပြသွားပါဦးမည်။


Include Directive

JSP စာမျက်နှာအား Servlet Container မှ ကွန်ပိုင်းပြုလုပ်ချိန်၊ include directive များသည်၊ ပြင်ပဖိုင်များအား JSP စာမျက်နှာအတွင်းသို့ ထည့်သွင်းပေးနိုင်၏။ Include Directive များသည် Static ပုံစံဖြင့် အလုပ်လုပ်ပါသဖြင့် ဖြည့်စွက်သောဖိုင်များအား Text စာသားများအနေဖြင့် JSP စာမျက်နှာသို့ ဖြည့်စွက်ပေးမည် ဖြစ်သည်။ Include ပြုလုပ်နိုင်သော ဖိုင်အမျိုးအစားများမှာ Text, HTML, JSP နှင့် XML Document များ ဖြစ်ကြသည်။


သတိထားရန် အချက်မှာ ဖိုင်များအား အင်ကလုဒ်(Include) လုပ်ရာတွင်၊ <html><head><body> အစရှိသည့် Tag များ ပါဝင်၍မရပေ။ အဘယ်ကြောင့်ဆိုသော် အင်ကလုဒ် လုပ်မည့် ဖိုင်အတွင်းရှိ အားလုံးသော စာသားများကို JSP အတွင်းသို့ ဖြည့်စွက်မည် ဖြစ်သောကြောင့်၊ JSP ၏ စည်းကမ်းအရ နှစ်ခုအသုံးပြု၍ မရသော Tag များဖြစ်ပါသဖြင့် Error ဖြစ်ပေါ်စေနိုင်သောကြောင့် ဖြစ်၏။
<%@ page language="java" contentType="text/html; charset=utf-8"
    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>Include Directive Sample</title>
</head>
<body>
<%@ include file="./ep1-11-include.jsp" %>
</body>
</html>

ep1-11-include.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

<%  
out.print("Hello JSP! Include Directive ၏ နမှုနာ ဖြစ်ပါသည်။");
%>
ep1-10.jspထဲတွင် include directive ကို အသုံးပြု၍၊ ep1-11-include.jspကို ရေးသားစေပါသည်။ ဤနည်းအားဖြင့် ep1-11-include.jsp တွင်ရေးသားထားသော စာသားများအား ep1-10.jsp အတွင်းတွင် အသုံးပြုနိုင်ခြင်း ဖြစ်၏။


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

ပြီးခဲ့သော နမှုနာ အပလီကေးရှင်း၏ အားနည်းချက်အချို့ကို ပြန်လည်ပြုပြင်ရေးသားပါမည်။ ယခင်တစ်ခေါက် အပလီကေးရှင်းဖြင့် ကားစာရင်းကို ကြည့်ရှုနိုင်ပြီး၊ ကားစာရင်း အသစ်များကို အသစ်တင်သွင်းနိုင်သော JSP အပလီကေးရှင်း တစ်ခုကို ရေးသားခဲ့ပါသည်။

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

  1. ဆာဗာအား Restart ပြုလုပ်ပါက ယခင်တစ်ခေါက် ရေးသားထားသော စာရင်းများမှာ ပျောက်သွားပါသည်။ ထို့အတွက် ဒေတာဘေစ်ကို အသုံးပြုရလောက်အောင်လည်း အဲ့ဒီလောက် အချက်အလက်တွေလည်း များသည်မဟုတ်သောကြောင့်၊ ကားတစ်စင်း သိမ်းသည့်အခါ တွင် ကားစာရင်းအား Serialize လုပ်ပြီး သိမ်းဆည်းထားပြီး၊ ဆာဗာပြန်စသည့်အခါ ကားစာရင်းအား ပြန်ခေါ်သွင်းခြင်းအားဖြင့် ပြုပြင်သွားပါမည်။
    ဤနည်းကို အသုံးပြုရေးသားခဲ့သော်လည်း Cloudbees အပေါ်တွင် အစဉ်မပြေသေးပါ။ Local ပတ်ဝင်းကျင်တွင် ဖိုင်အဖြစ်သိမ်းဆည်းနိုင်သော်လည်း၊ ကလောက်ပေါ်တွင် အစဉ်မပြေခြင်းမှာ Virtual Server အပေါ်ရှိ ဖိုင်စစ္စတန်များအား အပလီကေရှင်းမှ ရေးသားခွင့်မရှိ၍ ဖြစ်နိုင်သည်။ Cloudbees ၏ document တွေကို ဖတ်ရပါဦးမည်။
    Cloudbees ၏ QA ထဲတွင် ဆာဗာကို Restart လုပ်လျှင် သိမ်းထားသော ဖိုင်များသည် ပျက်သွားတက်သည်ဟု ရေးထားပါသည်။ မတတ်နိုင်။ အခြားနည်းလမ်းကို ထပ်ရှာရပါဦးမည်။
  2. JSP စာမျက်နှာအတွင်းတွင် လော့ဂျစ်တွေ အများကြီးရေနေရသည်။ JSP စာမျက်နှာအတွင်းတွင် လော့ဂျစ်များကို အများအပြားရေးသားနေရခြင်းသည် အလုပ်မဖြစ်ပေ။ အမှားများနိုင်သလို ပြန်လည်အသုံးချရန်လည်း မလွယ်ကူပေ။ ထို့အတွက် Servlet ကို သုံး၍ လော့ဂျစ်နှင့် View ကို ခွဲခြားရေးသား သွားပါမည်။ နောက်ပြီး ဒီအခန်းမှာ JSTL Directive ကို အသုံးပြုရန် ဖော်ပြထားပါသဖြင့် တတ်နိုင်သလောက် JSTL Tag ကို အသုံးပြုပြီး၊ JSP အပေါ်မှာ လော့ဂျစ်တွေကို မရေးရအောင် ပြုပြင်ရေးသားပါမည်။
  3. အမျိုးအစားတူသော အကြောင်းအရာတစ်ခုကို နှစ်ခါ ထပ်၍ ရေးသားနိုင်သည်။ ထို့အတွက် တူညီသော ကားများကို နှစ်ခါ ရေးသား၍မရအောင် ကားစာရင်းသွင်းချိန်တွင် အမျိုးအစားတူကား ရှိမရှိကို အရင်စမ်းစစ်ပြီးမှ စာရင်းသွင်းရန် ပြုပြင်သွားပါမည်။

No.1 နှင့် ပတ်သက်၍

Servlet အတွင်းမှ မံမိုရီအပေါ်ရှိ car-list အော့ဘဂျက်ကို၊ ဆာဗာအပေါ်တွင် သိမ်းဆည်းခြင်း အားဖြင့် Server Restart လုပ်လျှင်လည်း ပြန်လည်အသုံးပြုနိုင်ရန် စီမံခဲ့၏။
 private String getObjPath() {
  return getServletContext().getRealPath("/object.dat");
 }

ယခင်တစ်ခေါက် ရေးသားခဲ့သော အခါတွင် ServletContext#getRealPath ကို အသုံးရု၍ ဆာဗာအပေါ်တွင် သိမ်းဆည်းရန် ကြံစည်ခဲ့၏။ သို့ရာတွင် Cloudbees ကဲ့သို့ Virtual Machine အပေါ်တွင် အလုပ်လုပ်သော ဆာဗာများသည် Request မရှိပါက ဆာဗာကို ရပ်နားပြီး Resource ကို အခြားသော အလုပ်များသည့်နေရာများတွင် အသုံးပြုလေ့ရှိပါသဖြင့်၊ ဆာဗာသည် မကြာခဏ ရပ်နားတတ်ပြီး၊ ဖိုင်များကို ဖျက်ပစ်တတ်ပါသည်။ ထို့ကြောင့် getRealPath ကို အသုံးပြုခြင်းသည် မသင့်တော်ပါ။
 private String getObjPath() {
  String c = System.getProperties().getProperty("file.separator");
  File baseDir = 
    (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
  return baseDir.getAbsolutePath() + c +"/object.dat";
 }

ဒုတိယတစ်ခေါက်တွင် javax.servlet.context.tempdir ကို ခေါ်ယူ အသုံးပြုရန်ကြံစည်ပါသည်။ tempdir သည် Web Application များမှ တိုက်ရိုက်ခေါ်ယူ အသုံးပြုနိုင်ပြီး၊ တော်ရုံ Server Restart ဖြင့် ဖျက်ပစ်လေ့မရှိပါ။

အသုံးပြုထားသော SRC များမှာ အောက်ပါအတိုင်းဖြစ်၏။


နမှုနာ အပလီကေးရှင်းကို အောက်ပါ လင့်ခ်တွင် စမ်းသပ် အသုံးပြုနိုင်ပါသည်။
http://jsp-tutorials.minlwin.cloudbees.net


စကားချပ်

ဒီဘလောဂ်ကို ကျွှန်တော်ရေးထားသည်မှာ ကြာပြီဖြစ်၏။ သို့ရာတွင် နမှုနာ အပလီကေးရှင်းကို ဘယ်လိုရေးမလဲ၊ ဘယ်လောက်ရေးမလဲ စဉ်းစားနေရင်း ခက်နေသည့်အတွက် Publish မလုပ်ဖြစ်ခဲ့ခြင်း ဖြစ်ပါသည်။ ကျွှန်တော်တို့ အခြေခံ Servlet ကို လေ့လာပြီးခဲ့ပြီဖြစ်သည်။

နမှုနာများကို ပတ်သက်ရာအခန်းအကြောင်းကို သုံးပြခြင်းကို မရေးသားလိုတော့ပါ။ တစ်ခုခုကို ဦးတည်ချက်ထားပြီး၊ လေ့လာထားသည်များကို တစ်ဆင့်ခြင်းပြုပြင်ရေးသားသွားလိုပါသည်။ ကျွှန်တော်သည် ဤနမှုနာဖြင့် ဝဘ်အပလီကေးရှင်း၏ အခြေခံဖြစ်သော MVC မော်ဒယ်ကို Servlet နှင့် JSP ကို အသုံးပြုကာ ရေးသားသွားပါမည်။

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

No comments:

Post a Comment