January 3, 2012

First JSP

ကျွှန်တော် အီးဇီးဆာဗလက် ဟူသော ခေါင်းစဉ်ဖြင့် Java EE ၏ အခြေခံတစ်ခုဖြစ်သော Servlet နည်းပညာကို ဖော်ပြခဲ့၏။ အီးဇီးဆာဗလက်ကို ရေးသားစဉ်ကလည်း ပြောခဲ့ဘူးသည် ဟုထင်ပါသည်။ ဤခေတ်ကြီးထဲတွင် ဆာဗလက်မှစ၍ Java Enterprise Application များကို ရေးသားသူမှာ ရှားပါလိမ့်မည်။ အဘယ်ကြောင့် ဆိုသော် အဆင့်မြင့်၍ အသုံးဝင်သော Frameworks များ၊ CMS များနှင့် ERP များက အဆင်သင့်ရှိနေပြီး ဖြစ်၏။ ရှိနှင့်ပြီးသား Framework တစ်ခုကို ယူ၍ ရေးသားမည်ဆိုပါက တော်ရုံအပလီကေးရှင်းများကို လွယ်လင့်တကူ ရေးသားနိုင်မည် ဖြစ်၏။ JSP လည်း ထိုနည်း၎င်း ပင်ဖြစ်၏။

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

ထို့အပြင် Framework ဆိုသည်မှာလည်း လူတွေက ရေးသားထားသော ဆော့ဖ်ဝဲ ဖြစ်ပါသဖြင့် အမှားနှင့်မကင်းပေ။ Bug ဆိုသည်မှာ ရှိမြဲပင် ဖြစ်၏။ တစ်နည်းနည်းကြောင့် အမှားများပေါ် ပေါက်လာပါက၎င်း၊ မိမိကရေးသားလိုသည့်အတိုင်း Framework ကို အသုံးပြုလိုပါက Framework ၏ ဖွဲ့စည်းပုံနှင့်၊ အသေးစိတ် ရေးသားထားပုံကို ဝင်ရောက် လေ့လာရန် လိုအပ်ပေမည်။

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

JSP ဆိုသည်မှာ


JSP ဆိုသည်မှာ

JSP ဆိုသည်မှာ Java EE နည်းပညာရပ်တစ်ခုဖြစ်သော Java Server Page ၏ အတိုကောက် အခေါ်အဝေါ် တစ်မျိုးဖြစ်၏။ JSP သည် ဆာဗာဆိုဒ် စကရစ် (Server Side Script) ဘာသာရပ် တစ်မျိုးဖြစ် ဖြစ်ပါသည်။ စကရစ်ဘာသာရပ် ဆိုပါက အများသိပြီးဖြစ်သော Javascript သည်၊ Client Side Script ဘာသာရပ် တစ်မျိုးဖြစ်ပြီး၊ Client ၏ ဘရောင်ဇာအပေါ်တွင် အလုပ်လုပ်ပါသည်။ JSP, ASP နှင့် PHP ကဲ့သို့ ဆာဗာဆိုဒ် စကရစ်များသည် ဆာဗာပေါ်တွင် အလုပ်လုပ်ပါသည်။


JSP ကို အသုံးပြုဖို့ ဘာလိုလဲ

JSP သည် ဆာဗာဆိုဒ်ရှိ Servlet Container အပေါ်တွင် အလုပ်လုပ်ပါသဖြင့်၊ JSP ကို အလုပ်လုပ်စေရန် Java EE အပလီကေးရှင်း ဆာဗာ တစ်မျိုးမျိုး လိုအပ်ပါသည်။ Eclipse ဒါမှ မဟုတ် Netbeans IDE တစ်ခုခုကို အသုံးပြုမည် ဆိုပါက၊ Server Installation မယ်နျူးကို အသုံးပြု၍ Java EE ဆာဗာများကို လိုကယ်ပတ်ဝင်းကျင်တွင် လွယ်ကူစွာ အင်စတောလုပ်နိုင်ပါလိမ့်မည်။

ထင်ရှားသော ဆာဗာများမှာ အောက်ပါအတိုင်းဖြစ်ပါသည်။


သာမန် ဝဘ်အပလီကေးရှင်းများကို ရေးသားရုံ ဆိုပါက Tomcat ကို အသုံးပြုသည်က အစဉ်ပြေပါသည်။ အပိုအလို ဖန်ရှင်များကို ထည့်သွင်းထားခြင်း မရှိပါသဖြင့် Tomcat သည် လှုပ်ရှားရာတွင် လွန်စွာ ပေါ့ပါးပါသည်။ Glassfish သည်လည်း Tomcat နီးပါး ပေါ့ပါးသော Open Source ဆာဗာ တစ်မျိုးဖြစ်ပြီး၊ EJB ကိုလည်း အသုံးပြုနိုင်ပါသည်။ Jetty သည်လည်း Eclipse ဖောင်ဒေးရှင်းမှ ထုတ်ပြန်ထားသော အပလီကေးရှင်း ဆာဗာတစ်မျိုးဖြစ်ပြီး၊ လူသုံးများသော ဆာဗာတစ်မျိုးဖြစ်ပြီး Java Cloud တစ်မျိုးဖြစ်သော GAEj ၏ အတွင်းပိုင်းတွင် အသုံးပြုနေပါသည်။

JBoss မှာမူ Glassfisn မပေါ်ခင်က EJB ကို အသုံးပြုနိုင်သော Opensource ဆာဗာအဖြစ် နာမည်ကြီးခဲ့ပါသည်။ Opensource ကို အသုံးပြုသော ပရိုဂျက် တော်တော်များများတွင် JBoss ကို အသုံးပြုနေသည်ကို တွေ့ရ၏။

Weblogic နှင့် Websphere တို့သည် Oracle နှင့် IBM တို့၏ အန်တာပရိုက် ဆာဗာများ ဖြစ်ကြပြီး၊ လုပ်ငန်းကြီးသုံး အတွက်ရည်ရွယ်၍ တည်ဆောက်ထားပါသဖြင့် လွန်စွာလေးလံပါသည်။ သို့ရာတွင် စိတ်ချရခြင်း၊ လုပ်ငန်းခွင်တွင် ရင်းနှီးမှု့ရှိစေရန် ရည်ရွယ်ချက်ဖြင့် လေ့လာမည်ဆိုပါက လိုကယ် ပတ်ဝင်းကျင်တွင် ဒေါင်းလုဒ်လုပ်၍ စမ်းသပ်လေ့လာထားမည် ဆိုလည်း မှားမည်မဟုတ်ပေ။


JSP က မည်ကဲ့သို့အလုပ်လုပ်သနည်း

JSP များသည် အမြင်အားဖြင့် စကရစ်ဖြစ်သော်လည်း အမှန်မှာ HttpServlet ၏ Sub Class တစ်မျိုးပင် ဖြစ်၏။ Client ထံမှ ဦးဆုံးအကြိမ် Request လုပ်သည့်အခါတွင် Servlet Container မှ JSP ဆို့ကုဒ်များအား Java ဆို့ကုဒ်များ အဖြစ်ပြောင်းလည်းပြီး၊ ကွန်ပိုင်းလုပ်ပြီးမှ အလုပ်လုပ်စေခြင်း ဖြစ်ပါသည်။


Servlet နှင့် JSP

အထက်တွင် ဖော်ပြ သကဲ့သို့ JSP သည် Servlet Container အတွင်းတွင် HttpServlet ၏ Sub Class တစ်ခုအနေဖြင့် အလုပ်လုပ်နေပါသဖြင့် JSP ရော Servelet ပါ နောက်ဆုံးတော့ လုပ်နေကိုင်နေသည်မှာ အတူတူပင်ဖြစ်၏။ JSP တွင် ရေးနိုင်သည်ကို Servlet ဖြင့် ရေးသားနိုင်ပြီး၊ Servlet ဖြင့် ရေးသားနေသည်ကိုလည်း JSP ဖြင့် ရေးသားနိုင်သည်ပင် ဖြစ်၏။

ဒါဖြင့် ဘာကြောင့် Servlet ရော JSP ပါ လိုအပ်ရသနည်း။ ဤအကြောင်းကို စာဖြင့် ရှင်းနေသည်ထက် လက်တွေ့ ဆို့ကုဒ်များကို ရေးပြီး လေ့လာကြည့်သည်က ပို၍ နားလည်လွယ်မည် ဟုထင်ပါသည်။ ကျွှန်တော်တို့ Hello Java EE ! ဟု ရေးသားဖော်ပြပေးနိုင်သော Servlet တစ်ခုနှင့်၊ JSP တစ်ခုကို ရေးသားကြည့်ပါမည်။

hello.jsp
<html>
<head><title>Hello Java EE!</title></head>
<body>
<h1>Hello Java EE!</h1>
<p>
<%
    out.println("Hello Java EE!");
%>
</p>
</body>
</html>

test.HelloServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {

  public void doGet(HttpServletRequest request,
   HttpServletResponse response)
      throws IOException, ServletException
  {
     response.setContentType("text/html");
     PrintWriter out = response.getWriter();
     out.println("<html>");
     out.println("<head><title>Hello Java EE!</title></head>");
     out.println("<body>");
     out.println("<h1>Hello Java EE!</h1>");
     out.println("<p>");
     out.println("Hello Java EE!");
     out.println("</p>");
     out.println("</body>");
     out.println("</html>");
  }
}
HTML ကုဒ်များအတွင်းတွင် Java ကုဒ်များကို ရေးသားထားသော JSP နှင့် Java ကုဒ်များဖြင့် HTML ကုဒ်များကို ရေးသားနေသော Servlet ကို ကြည့်မည်ဆိုလျှင် Java ပရိုဂရမ်မာများအတွက် Servlet ကို ပို၍ ရင်းနှီးသယောင် ရှိပေမည်။ သို့ရာတွင် "Hello Java EE!" လေး တစ်ကြောင်းကို ရေးသားရန် ကုဒ်တွေ ဒီလောက်ရေးရန်လိုရလားဟု တွေမိသူတွေက တွေးမိပေးလိမ့်မည်။ ဟုတ်ပေသည်။ ရေးလိုသည်မှာ "Hello Java EE!" တစ်ကြောင်းတည်းသာ ဖြစ်သော်လည်း Servlet တွင် မလိုအပ်သော HTML ကုဒ်များကိုလည်း ရေးသားရန်လိုအပ်ခဲ့၏။

ထို့အပြင် CSS ကို အသုံးပြု၍ လေးအောက် (Layout) နှင့် ဒီဇိုင်းများကို ရေးဆွဲရာတွင် HTML ထဲတွင် ကုဒ်များကို ရေးသားထားသော JSP သည် Servlet ထက် လွန်စွာ အသုံးတည့်ပေသည်။ ထို့ကြောင့် View အပိုင်း အား ဒီဇိုင်းရေးရလွယ်ကူသော JSP ကို အသုံးပြု၍၊ Control အပိုင်းကို Servlet ကို အသုံးပြုထားသည့် Framework အများကို တွေ့ရခြင်းဖြစ်၏။

အထူးသတိထားရန် အချက်မှာ JSP သည်လည်း Servlet တွင်ရေးနိုင်သည်ကို အကုန်ရေးသားနိုင်၏၊ Servlet သည်လည်း JSP တွင် ရေးနိုင်သည်များကို အကုန်ရေးသားနိုင်၏။ ထို့အပြင် Ajax ကို အသုံးပြုပါက Javascript ဖြင့်လည်း တော်ရုံတန်ရုံ ရေးသားနိုင်ပါသည်။ အဲ့ဒီအတွက် Ajax၊ JSP နှင့် Servlet ကို အသုံးပြု၍ ရေးသားမည် ဆိုလျှင် ရေးသားမည့် အပိုင်းကို အသေအချာ တာဝန်ခွဲ၍ ရေးသားသင့်ပါသည်။ အားသန်ရာ အပိုင်းကို သင့်တော်သလို အသုံးချနိုင်မှသာ Balance ကောင်း၍ ပြည့်စုံသော အပလီကေးရှင်းကောင်းများ ဖြစ်လာနိုင်မည် ဖြစ်သည်။


Script Tag များ

Script Tag များသည်၊ JSP စာမျက်နှာရှိ ပရိုဂရမ်အစိတ်အပိုင်းကို ရေးသားရာတွင် အသုံးပြုနိုင်သော Tag များဖြစ်ကြပါသည်။ Script Tag အမျိုးအစားများမှာ <%! %>, <% %> နှင့် <%= %> ဟူ၍ ၃မျိုးရှိပါသည်။

<%! %>များသည် Servlet ၏ instance ကိန်းများနှင့် instance မက်သတ်များ အနေဖြင့် အသုံးလိုသည့်အခါများတွင် ရေးသားနိုင်ပါသည်။ ဤကဲ့သို့ရေးသားထားခြင်း အားဖြင့် ထိုပရိုဂရမ်ထဲတွင် instance ကိန်းနှင့် မက်သတ်များ အနေဖြင့် မည်သည့်နေရာမှမဆို ခေါ်ယူ အသုံးပြုနိုင်ပါသည်။ တဖန် <% %> Tag ဖြင့် ပရိုဂရမ်များကို ရေးသားနိုင်ပါသော်လည်း Local လော့ဂျစ်များကို ရေးသားရာတွင် သာ အသုံးပြုနိုင်ပါသဖြင့် instance ကိန်းများကို မရေးသားနိုင်ပေ။ Script အတွင်းရှိ ကိန်းများအား HTMLစာမျက်နှာပေါ်သို့ ဖော်ပြလိုသောအခါတွင် <%= %> Script ကို အသုံးပြုနိုင်ပါသည်။

ep1-10.jsp
<%@ 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>Script Sample</title>
</head>
<body>
<div style="width:100%; text-align:right"><a href="javascript:history.back();">ယခင် စာမျက်နှာသို့</a></div>
<h3>Scripts Sample</h3>
<%! 
String message = "မင်္ဂလာပါ JSP";
%>
<%
for (int i=0; i<5 ; i++) {
%>
 <%=i %> : <%=message %> <br />
<%
}
%>
</body>
</html>
အထက်ပါ နမှုနာထဲတွင် String message ကိန်းကို instance variable အနေဖြင့် အသုံးပြုလိုပါသဖြင့် <%! %> ကို အသုံးပြုထားပြီး၊ <% %> ကို အသုံးပြု၍ ပရိုဂရမ်ကုဒ်များကို ရေးသားထား၏။ တဖန် ကိန်းရှင်ဖြစ်သော i နှင့်၊ message အား <%= %> ကို အသုံးပြု၍ HTML စာမျက်နှာပေါ်တွင် ရေးသား ဖော်ပြ စေပါသည်။


Default Object များ

JSP စာမျက်နှာများသည် Servlet Container အပေါ်တွင် ကွန်ပိုင်းလုပ်ပြီးသောအခါ HttpServlet ၏ Sub Class အဖြစ် အလုပ်လုပ်နေခြင်း ဖြစ်သည်။ ထို့အတွက် JSP စာမျက်နှာအတွင်းတွင် HttpServlet အတွင်းတွင် အသုံးပြုနေသော Object အချို့ကို အလိုအလျှောက် အသုံးပြုနိုင်ပါသည်။ အသုံးပြုနိုင်သော Object များမှာ အောက်ပါအတိုင်းဖြစ်၏။

Object Name Class Name ရှင်းလင်းချက်
application javax.servlet.ServletContext Web Application ၏ Context
config javax.servlet.ServletConfig အသုံးပြုနေသော JSP ၏ ServletContext
out javax.servlet.jsp.JspWriter JSP စာမျက်နှာရေး Output Stream
pageContext javax.servlet.jsp.PageContext အသုံးပြုနေသော JSP ၏ PageContext
page java.lang.Object လက်ရှိ အသုံးပြုနေသော JSP စာမျက်နှာ Object
request javax.servlet.http.HttpServletRequest လက်ရှိ စာမျက်နှာ၏ HttpServletRequest Object
response javax.servlet.http.HttpServletResponse လက်ရှိ စာမျက်နှာ၏ HttpServletResponse Object
session javax.servlet.http.HttpSession လက်ရှိ Session Object
exception java.lang.Throwable ဖြစ်ပွားနေသော Exception Object

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

ep1-20.jsp
<%@page import="java.util.Enumeration"%>
<%@ 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>Script Sample</title>
</head>
<body>
<div style="width:100%; text-align:right"><a href="javascript:history.back();">ယခင် စာမျက်နှာသို့</a></div>
<h3>Scripts Sample</h3>
<ul>
<% 
Enumeration<String> header = request.getHeaderNames();

while(header.hasMoreElements()) {
 String name = header.nextElement();
 String value = request.getHeader(name);
 out.print("<li> ");
 out.print(name);
 out.print(" : ");
 out.print(value);
 out.print("</li>");
}
%>
</ul>
</body>
</html>
အထက်ပါ နမှုနာထဲတွင် request နှင့် out Object များကို အသုံးပြုထားပါသည်။ request ထဲမှ Header အချက်အလက်များကို ထုတ်ယူပြီး၊ out ကို အသုံးပြု၍ အချက်အလက်များကို ရေးသားဖော်ပြနေစခြင်း ဖြစ်ပါသည်။

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

http://jsp-tutorials.minlwin.cloudbees.net/


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

1 comment:

  1. I want to know JSP Scope bro. Please write about JSP Scope.

    ReplyDelete