Sunday, December 18, 2011

Servlet in 10 min

Servlet in 10 min

Servlet ေတြ အေၾကာင္းကို အလြယ္ေလးတစ္ခုေရးျပတာပါ။
Online မွာေတြ႕ေနၾကဟာေလးကို ပိုျပီးျပည္႕ျပည္႕စံုစံုျဖစ္ေအာင္ ရွင္းျပထားပါတယ္။


package business;

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

public class ServletExample extends HttpServlet {

public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    PrintWriter out = res.getWriter();
    out.println("Hello, world!");
    out.close();
  }
}

Code ကေတာ႔မေျပာင္းမလဲ Hello, world ပါပဲ။
package ကို business ဆိုတဲ႔ package ထဲမွာေရးထားတာကိုေတြ႕မွာပါ။ အဲဒီလိုဆိုရင္ class ကို လွမ္းေခၚတဲ႔အခါမွာ business.ServletExample  လို႕ေခၚရပါတယ္။ HttpServlet ကို extend လုပ္ထားတာကိုလည္းေတြ႕ပါလိမ္႔မယ္။ ကြ်န္ေတာ္တို႕ေရးသမွ် servlet ေတြဟာ HttpServlet ကို extend လုပ္ရပါမယ္။


(HttpServletRequest req,HttpServletResponse res)
ဆိုတာကိုလည္းေတြ႕ၾကမယ္ထင္ပါတယ္။ HttpServletRequest ဆိုတာကိုအၾကမ္းဖ်င္းပဲေျပာသြားပါမယ္။ ေနာက္ပိုင္းမွာ အလ်င္းသင္႔ရင္ တခါအေသးစိတ္ထပ္ေျပာပါမယ္။ request ဆိုကတည္းက သူက ေတာင္းပါတယ္။ ပါလာတာေတြေပးခိုင္းပါတယ္။ html form တစ္ခုမွာ post လုပ္လိုက္ရင္ input parameters ေတြ form ထဲမွာပါလာပါတယ္။ အဲဒီ data ေတြကို လိုခ်င္တဲ႔အခါ HttpServletRequest ကေနယူႏုိင္ပါတယ္။ ေနာက္ဥပမာေတြၾကရင္လည္းထပ္ျပီးရွင္းျပပါဦးမယ္။အခုကေတာ႔ set up ေလးတစ္ခု လြယ္လြယ္ကူကူလုပ္ဖုိ႕ပါပဲ။ HttpServletResponse က response ဆိုတဲ႔အတုိင္း ျပန္ျပီးေျပာတာပါပဲ။ သူ႕ကို တစ္ခုခု လာေျပာရင္ စကားျပန္ေျပာသလိုေပါ႔။ ျပန္ေျပာတဲ႔စကားကလည္း အမ်ိဳးမ်ိဳးရိွသလို၊ သူမွာ response လုပ္မယ္႔ type ေတြရိွပါတယ္။ text/html လား pdf လား ၊ excel လားဆိုတဲ႔ content type ေတြရိွပါတယ္။ ေကာင္မေလးတစ္ေယာက္ကို propose သြားလုပ္သလိုေပါ႔။ ဟိုက ဘာနဲ႕မဆို ေကာက္ေပါက္ႏိုင္တယ္မဟုတ္လား။

ဒီမွာေတာ႔ Hello, World နဲ႕ေကာက္ေပါက္လိုက္ပံုရတယ္။


PrintWriter out = res.getWriter();
   out.println("Hello, world!");
    out.close();


Print Writer တစ္ခုယူျပီး ေရးခ်င္ရာေရးတယ္။ response မွာျပန္ေရးေပးလုိက္တယ္။ ဆိုလုိတာက ဒီ Servlet ကိုေခၚရင္ သူ႕ရဲ႕ doGet မွာ ဒါကို အေၾကာင္းျပန္လိမ္႔မယ္ေပါ႔။

ေရးတာျပီးရင္ Tomcat မွာ project ေလးတစ္ခုတည္ေဆာက္မယ္။
လြယ္လြယ္ကူကူ JavaExample ဆိုျပီးနာမည္ေပးမယ္။ အဲဒီအထဲမွာ index.html ဆိုျပီး html page တစ္ခုေရးထားပါ။

ျပီးရင္ JavaExample folder ထဲမွာ WEB-INF ဆိုတဲ႔ folder တစ္ခုေဆာက္ပါ။ Tomcat ကလည္း ေခတ္ေဟာင္းက မိဘမ်ားလို ေမွ်ာ္လင္႔ခ်က္ရိွပါတယ္။ သူက webapps ေအာက္က project တိုင္းကို index စီးျပီး WEB-INF ရံေစခ်င္ပါတယ္။ သူ႕ရဲ႕ default structure နဲ႕တူေအာင္ပါ။ WEB-INF ထဲမွာ web.xml ပါရပါမယ္။ ျပီးရင္ classes ဆိုတဲ႔ folder လည္းပါရပါမယ္။ အဲဒီခပ္ေပါေပါအကြက္ေတြကို အထင္မေသးနဲ႕ SCWCD မွာ ဒါေတြပဲေမးေနတာ။ ခပ္ေပါေပါေတြေပမယ္႔ အေျခခံအေနနဲ႕ေတာ႔သိတာေကာင္းပါတယ္။

web.xml ကိုၾကည္႕ရေအာင္ဗ်ာ။


[web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd"]
  [servlet]
    [servlet-name]example[/servlet-name]
    [servlet-class]business.ServletExample[/servlet-class]
  [/servlet]

  [servlet-mapping]
    [servlet-name]example[/servlet-name]
    [url-pattern]/testHello[/url-pattern]
  [/servlet-mapping]
[/web-app]


ဒါက အေျခခံပံုစံေပါ႔ဗ်ာ။ ဒီ config မ်ိဳးေတြကုိ Java မွာ အမ်ားၾကီးေတြ႕ရမယ္။ servlet  နဲ႕ servlet-mapping ဆိုျပီးႏွစ္ခုရိွမယ္။ servlet-name ႏွစ္ခုကတူရပါမယ္။ ၾကိဳက္နဲ႕နာမည္အတူတူေပးထားလုိ႕ရပါတယ္။ ကိုယ္ၾကိဳက္တာ ကိုယ္မလုပ္ရတာက servlet-class ပါ။အခုနကေျပာသလို business.ServletExample  ဆိုျပီး class name ကို package နဲ႕တကြ အျပည္႕အစံုေရးပါတယ္။ ဒါမွလည္း tomcat ကရွာေတြ႕ပါတယ္။ [က< ကို အစားထိုးထားတာပါ။ blogspot ကစိတ္ၾကီးေတာ႔ html tag တို႕မည္သည္ less than , greater than ပါကုန္သည္ဆိုျပီး စစ္ေနတာေၾကာင္႔ အစားထုိးလုိက္ရပါတယ္။ ဂရိတ္တားသန္းကေတာ႔ ] အျဖစ္အစားထုိးထားပါတယ္။ web.xml ကေခါင္းစဥ္ၾကီးတစ္ခုပါ။ အခုေတာ႔ အက်ဥ္းခ်ဳပ္လုိက္ပါတယ္။

ေအာက္နားေလးမွာပါတဲ႔ url-pattern ကေတာ႔ က်ယ္ျပန႔္ပါတယ္။ ေလာေလာဆယ္ က်ဥ္းလိပ္တဲ႔အေနနဲ႕ တစ္ခုပဲေရးျပထားပါတယ္။/testHello နဲ႕၀င္လာရင္ သူ႕အလုပ္လုိ႕ယူဆတယ္လုိ႕ဆိုလိုပါတယ္။

အခုကိစၥမွာဆုိရင္ http://localhost:8080/JavaExample/testHello
ဆိုရင္ သူ႕အလုပ္လုိ႕ယူဆပါလိမ္႔မယ္။ သူ႕အလုပ္လုိ႕ယူဆရင္ သူ႕ဆရာကိုအေၾကာင္းၾကားပါလိမ္႔မယ္။ သူ႕ဆရာနာမည္က example ဆိုရင္ သူ႕ဆရာ example ကို ဘာလုပ္ရမလဲဆရာဆုိျပီးေမးပါလိမ္႔မယ္။ သူ႕ဆရာကလည္း အေပၚဘက္က သူေနရာကိုျပန္တက္ျပီး စားပြဲကအံ႔ဆြဲကိုဖြင္႔ေတာ႔မွ business.ServletExample ကိုေတြ႕ပါတယ္။ အဲဒီေကာင္ကိုသာ run လုိက္ေပေတာ႔ဆိုျပီး run လုိက္တဲ႔အခါမွာ doGet ကိုေရာက္ျပီး Hello, world! ကိုျမင္ရပါလိမ္႔မယ္။

အခုေျပာေနတာဟာ hello world အေၾကာင္းလုိ႕မ်ား ထင္ေနၾကမလားမသိပါဘူး။ မဟုတ္ရပါဘူး။ တကယ္ေျပာေနတာက tomcat ရဲ႕ project folder structure အေၾကာင္းပါ။ အဲဒီ ServletExample ကို compile လုပ္ဖုိ႕အတြက္ လိုတဲ႔ jar file ကိုလည္း tomcat ရဲ႕ lib folder ထဲမွာေတြ႕ႏိုင္ပါတယ္။ servlet-api.jar ျဖစ္ပါတယ္။ ဒီ jar ဟာအေရးၾကီးပါတယ္။ tomcat ဗားရွင္းအနိမ္႔ေတြမွာ run ဖုိ႕ဆုိရင္လည္း အဲဒီ tomcat ရဲ႕ lib ထဲက servlet-api.jar ကိုယူျပီး compile လုပ္ရပါတယ္။

ဒီအခု post ဟာ hello world servlet example ေတြထဲမွာေတာ႔ ေတာ္ေတာ္ေလးျပည္႕ျပည္႕စံုစံုျဖစ္တဲ႔ hello world တစ္ခုလုိ႕ထင္ပါတယ္။ မ်ားေသာအားျဖင္႔ အလုပ္လုပ္တဲ႔သူေတြမွာ အလုပ္ကရႏိုင္တဲ႔ အေတြ႕အၾကံဳေတြ တေလွၾကီးရႏိုင္ေပမယ္႔ အလုပ္မလုပ္ရေသးတဲ႔လူေတြအဖုိ႕ ပိုျပီးျပည္႕ျပည္႕စံုစံုေရးဖုိ႕လိုမယ္ထင္လို႕ ဒီပို႕စ္ကိုေရးလုိက္ပါတယ္။

ဒီေနရာမွာ သိပ္ဟုန္သြားမွာဆိုးလို႕ servlet API ေတြရဲ႕ Version ေတြထည္႕မေျပာေတာ႔ပါဘူး။ ေနာက္ပို႕စ္မ်ားၾကမွ ပိုျပီး တိတိက်က် ေရးလိုက္ပါဦးမယ္။

ေပ်ာ္ရႊင္ဖြယ္ေလ႔က်င္႔ခန္းေလးျဖစ္ပါေစ။

Regards,
Zero

No comments: