ဒီနေ့ လို အချိန်မျိုးမှာ Servlet ကို သုံးပြီး Application ကို ရေးသား သူများ မှာ မရှိလောက်အောင် အလွန်နည်းပါးပါလိမ့်မယ်။ ဘာလို့လဲ ဆိုတော့ ဒီထက်ပိုပြီး အသုံးဝင်တဲ့ High Level Framework တွေ အများကြီး ပေါ်ပေါက်လာပြီ ဖြစ်တဲ့အတွက် Framework တစ်ခုခုကို သုံးပြီး ရေးကြတာများပါလိမ့်မယ်။
ဥပမာအားဖြင့် သိပ်ပြီး ရှုပ်ထွေးမှု့မရှိတဲ့ Web Application လောက်ကို ရေးမယ်ဆိုရင် Struts Framework ကို သုံးပြီး၊ Business Logic တွေ များပြီး Security တို့ Performance တို့ကို လိုချင်တဲ့ Application မျိုးဆိုရင် Java EE ဒါမှမဟုတ် Spring Framework တို့ကို သုံးပြီး ရေးကြမှာ ဖြစ်ပါတယ်။
ဒါပေမဲ့ High Level Framework တွေကို Customise လုပ်လိုတဲ့အခါ၊ ပြီးတော့ Configuration ကြောင့် ထင်သလို အလုပ်မလုပ်တဲ့ အခါ၊ Error တွေကို ဖြေရှင်းဖို့လိုတဲ့ အခါမျိုးမှာ Low Level API တွေကို သိရှိထားတာ ကောင်ပါတယ်။
ဒါ့ကြောင့် Servlet ကို သိထားတာက အများကြီး အထောက် အကူပြုပါလိမ့်မယ်။ ဒီ အခန်းမှာတော့ Servlet ကို Eclipse နဲ့ Maven ကို သုံးပြီး Dynamic Web Application ကိုဘယ်လို ရေးမယ်ဆိုတာကို လေ့လာသွားပါမယ်။
About Maven
ကျွန်တော်တို့ Servlet ကို အသုံးပြုသော Dynamic Java Web Application တစ်ခုကို Maven ကို သုံးပြီး ရေးသားကြည့်ပါမည်။ အရင်ဆုံး Maven ဆိုတာဘာလဲ ဆိုတာကို ရှင်းပါမည်။
Maven ဆိုတာဟာ Java ဘာသာရပ်မှာ အသုံးပြုတဲ့ Project Management Tools တစ်ခုဖြစ်ပါတယ်။ Maven နဲ့ ဘာလုပ်လိုရလဲဆိုတော့ မိမိရဲ့ Project ထဲမှာ သုံးတဲ့ Library တွေ Build Tools တွေကို Managementလုပ်ပေးနိုင်ပါမယ်။
ပြီးရင် ရေးသားထားတဲ့ Project ကို အလိုအလျောက် Test လုပ်ပြီးမှ Archive လုပ်ပေးတာတို့ကို လုပ်ပေးနိုင်ပါမယ်။ ဒါ့အပြင် သဘောအကျဆုံးက မိမိသုံးလိုတဲ့ Library အပြင်၊ အဲ့ဒီ Library ကနေ လိုအပ်တဲ့ Dependency Library တွေကို အလိုအလျောက် ပြင်ဆင်ပေးနိုင်တဲ့အချက်ဖြစ်ပါတယ်။
တဖန် Java Project တွေဟာ အသုံးပြုနေတဲ့ IDE အပေါ်မူတည်ပြီး Build System နဲ့ Project Structure တွေဟာ တူညီမှု့မရှိပါဘူး။ အဲ့ဒီအတွက် Eclipse နဲ့ ရေးထားတဲ့ Project တစ်ခုကို NetBeans နဲ့ ဖွင့်လို့မရနိုင်သလို ပြောင်းပြန်လဲ မရပါဘူး။ ဒါပေမဲ့ Maven ဟာ IDE Independent ဖြစ်တဲ့အတွက် Maven နဲ့ ရေးသားထားတဲ့ Project တစ်ခုကို ဘယ် IDE နဲ့ မဆို အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။
အခုနောက်ပိုင်း Java Project တွေဟာ Maven နဲ့ ရေးသားကြတာများပါတယ်။
Maven ဟာ Library တွေကို Web အပေါ်မှာနဲ့ Local Machine အပေါ်မှာ ထားပြီး Manage လုပ်ပေးပါတယ်။
Web အပေါ်မှာ Maven Central Repository ဆိုပြီးထားရှိပြီး လိုအပ်တဲ့ Library တွေကို အဲ့ဒီမှာ Manage လုပ်ထားပါတယ်။ အဲ့ဒီအပြင် အသုံးပြုနေတဲ့ စက်ထဲမှာလဲ Local Repository ဆိုတာကို ထားပြီး Manage လုပ်ပါတယ်။
ကျွန်တော်တို့ Java Project ထဲမှာ Library တစ်ခုကို အသုံးပြုမယ်ဆိုရင် pom.xml ဆိုတဲ့ (Project Object Model) Configuration File ထဲမှာ Dependency အနေနဲ့ ရေးသားရပါမယ်။ Maven က Library တစ်ခုကို သတ်မှတ်တဲ့နေရာမှာ Group ID, Artifact ID ပြီးတော့ Version ID ဆိုပြီး သတ်မှတ်ပါတယ်။ ကျွန်တော်တို့ အသုံးပြုလိုရင် အထက်ပါ အချက်အလက်တွေကို pom.xml ထဲမှာ ဖြည့်ရေးပေးရပါမယ်။
အဲ့ဒီအခါမှာ Maven က သတ်မှတ်ထားတဲ့ Library ကို Local Repository ထဲမှာ သွားရှာပါတယ်။ တွေ့ခဲ့ရင်တော့ ကျွန်တော်တို့ Project ရဲ့ Class Path ထဲကို အဲ့ဒီ Library ရဲ့ Reference ကို ဖြည့်ပေးပါမယ်။ Reference သာပေးတဲ့ အတွက် မိမိရဲ့ စက်ထဲမှာ Library တွေ ဖေါင်းပွမနေတော့ပါဘူး။
တကယ်လို့ Local Repository ထဲမှာ မရှိရင် Maven Central Repository ထဲကနေ သွားရှာပြီး၊ မိမိရဲ့ စက်ထဲမှာရှိတဲ့ Local Repository ထဲ ထည့်ပေးပါမယ်။ ပြီးတော့မှ Project ရဲ့ Class Path ထဲကို Reference ပေးပါမယ်။ တစ်ခုသတိထားရမှာကို Maven ကို အသုံးပြုမယ်ဆိုရင် Internet လိုအပ်ပါတယ်။ Internet ကိုမရရင်တော့ Error တက်နေပါမယ်။
1. Create Maven Project
ကဲ ကျွန်တော်တို့ Eclipse ကို သုံးပြီး Maven နဲ့ Web Project တစ်ခုရေးကြည့် ကြပါမယ်။
Eclipse IDE ရဲ့ CTL + N ကို နှိပ်ပြီး New Wizard ထဲကနေ maven လို့ရိုက်ပြီး Maven Project ကို ရွေးကာ Next ကို နှိပ်ပါမည်။
Maven Archetype ကနေမဟုတ်ပဲ သာမန်ရိုးရိုး Maven Project ကို သုံးလိုတဲ့အတွက် create a simple project ကို check လုပ်ပါမယ်။ ပြီးရင် Next ကို ဆက်နှိပ်ပါမယ်။
အဲ့ဒီနောက်မှာ အောက်ဖေါ်ပြပါအတိုင်း Group ID, Artifact ID, Version ID နဲ့ Packaging တို့ကို ဖြည့်စွက်ပါမယ်။ Group ID ကတော့ မိမိရဲ့ အဖွဲ့အစည်းကို Reverse Domain နဲ့ ရေးသားရန်လိုအပ်ပြီး၊ Artifact ID ကတော့ မိမိရဲ့ Project Name ကို ရေးသားရပါမယ်။ Version ကတော့ နှစ်သက်ရာ ရေးသားနိုင်ပါတယ်။
အခုရေးသားမှာက Web Project ဖြစ်တဲ့အတွက် Packaging ကိုတော့ war လို့ရွေးချယ်ပေးရပါမယ်။
ဒါပြီးရင်တော့ Finish ကို နှိပ်လိုက်ရင် Maven Project တစ်ခု တည်ဆောက်ပြီး ဖြစ်ပါလိမ့်မယ်။
ဒါပေမဲ့ အထက်ဖေါ်ပြပါအတိုင်း Error တက်နေပါမယ်။ ဘာလို့လဲဆိုရင် Maven Project ရဲ့ Default JDK ဟာ 1.5 ဖြစ်ပြီး ကျွန်တော်တို့ စက်ထဲမှာ JDK 1.8 သာရှိလို့ကတစ်ကြောင်း Web Project ဖြစ်ပြီး web.xml မပါတက တစ်ကြောင်းကြောင့်ဖြစ်ပါတယ်။
အဲ့ဒီအတွက် ကျွန်တော်တို့ရဲ့ Project ထဲမှာ JDK 1.8 ကို သုံးအောင်၊ Web Module 3.1 ကို သုံးမှာ ဖြစ်တဲ့အတွက် web.xml မပါလဲ Error မထုတ်အောင် Maven Plugin ကို ပြင်ဆင်ပေးရပါမယ်။
2. Update Plugins
Maven Plugin Configuration ကို ပြင်ပေးရပါမယ်။ ပြင်ရမှာက ၃ ချက်ပါ။ ပထမအချက်ကတော့ JDK Version ကို 1.8 ကို သုံးရအောင်ပြင်ရပါမယ်။ ဒုတိယအချက်ကတော့ web.xml မပါလဲ Error မထုတ်အောင်ပြင်ပေးရပါမယ်။ ပြီးရင် ကျွန်တော်တို့ Project မှာ jetty server plugin ကို သုံးမှာ ဖြစ်တဲ့အတွက် jetty plugin ကို လဲ ဖြည့်ပေးရပါမယ်။
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-compiler-plugin</artifactId> | |
<version>3.5.1</version> | |
<configuration> | |
<source>1.8</source> | |
<target>1.8</target> | |
</configuration> | |
</plugin> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-war-plugin</artifactId> | |
<version>2.6</version> | |
<configuration> | |
<failOnMissingWebXml>false</failOnMissingWebXml> | |
</configuration> | |
</plugin> | |
<plugin> | |
<groupId>org.eclipse.jetty</groupId> | |
<artifactId>jetty-maven-plugin</artifactId> | |
<version>9.3.5.v20151012</version> | |
<configuration> | |
<scanIntervalSeconds>3</scanIntervalSeconds> | |
</configuration> | |
</plugin> | |
</plugins> |
အရင်ဦးဆုံး maven-compiler-plugin မှာတော့ JDK Version 1.8 ကို အသုံးပြုအောင် source နဲ့ target ကို 1.8 လို့ပြောင်းပေးပါတယ်။ ရေးထားတဲ့ Source ကလဲ JDK 1.8 ကို သုံးထားပြီး Compiler လုပ်ပြီးတဲ့ Class ရဲ့ Version ကိုလဲ 1.8 နဲ့ ထုတ်ပေးဖို့ဖြစ်ပါတယ်။
ဒုတိယ အနေနဲ့ကတော့ maven-war-plugin မှာ web.xml မပါလဲ error အဖြစ် မသတ်မှတ်ရအောင် failOnMissingWebXml ရဲ့ တန်ဖိုးကို false လို့သတ်မှတ်ပေးပါမယ်။ Servlet 3.1 မှာ web.xml ဟာ Optional ဖြစ်တဲ့အတွက် မရေးလဲရပါတယ်။
နောက်ဆုံး jetty-maven-plugin ကတော့ ကျွန်တော်တို့ Project မှာ Application Server အနေနဲ့ jetty ကို အသုံးပြုမှာ မို့လို့ဖြစ်ပါတယ်။
အထက်ပါ အတိုင်း ဖြည့်စွက်ပြီးတဲ့ နောက်မှာ တစ်ခု ပြုလုပ်ဖို့လိုပါသေးတယ်။ Maven မှာ plugin တွေကို ပြင်ပြီးရင် Project ကို Update လုပ်ပေးရပါမယ်။ ဒါမှသာ လိုအပ်တဲ့ plugin တွေနဲ့ Project ကို ပြန်ပြီး Update လုပ်ပေးမှာ မို့လို့ပါ။
ပြီးပါက အထက်ပါ အတိုင်း Maven Menu ကနေ Update Project ကို ရွေးပြီး OK ကို နှိပ်ပေးရင် Project ကို Update လုပ်ပေးနိုင်မှာ ဖြစ်ပါတယ်။
Project ထဲက JDK ကို ကြည့်ရင်လဲ 1.8 ကို ပြောင်းသွားပြီး၊ Error တွေလဲ ပျောက်သွားတာကို တွေ့ရပါမယ်။
3. Adding Dependencies
ကျွန်တော်တို့ Project ဟာ jetty ပေါ်မှာ Run မှာ ဖြစ်ပေမဲ့ Servlet တို့ JSP တို့ကို Code ရေးသားစဉ်မှာ ရေးသားနိုင်အောင် Library များကို Dependency အဖြစ်ဖြည့်စွက်ပေးရပါမယ်။ သုံးမှာကတော့ Servlet 3.1 နဲ့ JSP 2.2 တို့ဖြစ်ပါတယ်။
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<dependencies> | |
<dependency> | |
<groupId>javax.servlet</groupId> | |
<artifactId>javax.servlet-api</artifactId> | |
<version>3.1.0</version> | |
<scope>provided</scope> | |
</dependency> | |
<dependency> | |
<groupId>javax.servlet.jsp</groupId> | |
<artifactId>jsp-api</artifactId> | |
<version>2.2</version> | |
<scope>provided</scope> | |
</dependency> | |
</dependencies> |
တကယ်ဆို Servlet နဲ့ JSP တို့ဟာ Java Web Application Server တိုင်းမှာ ပါပြီးသားဖြစ်ပါတယ်။ ဒါပေမဲ့ Code ရေးတုန်းမှာ လိုအပ်တဲ့ အတွက် ထည့်ရေးပေးရမှာ ဖြစ်တဲ့ အတွက် Compile လုပ်ပြီးတဲ့အခါ Library အနေနဲ့ Packaging ထဲထည့်ပေးစရာမလိုပါဘူး။ ထည့်ပေးလိုက်ရင် Error ဖြစ်စေမှာ ဖြစ်ပါတယ်။ ဒါကြောင့် Dependency တွေရဲ့ Scope ကို provided လို့ ရွေးပေးရမှာ ဖြစ်ပါတယ်။
အထက်ပါအတိုင်: POM ကို Update လုပ်ပြီ: Save လိုက်တဲ့ အခါ Project ရဲ့ Libraries ထဲမှာ servlet နဲ့ jsp ရဲ့ Library တွေ ရောက်ရှိသွားတာကို တွေ့ရပါမယ်။ ဒါဆို Project ကို ရေးလို့ရပါပြီ။
4. Create Welcome File
အရင်ဆုံး welcome file အနေနဲ့ index.html file တစ်ခုကို src/main/webapp folder အောက်မှာ သွားဆောက်ထားပါမယ်။ ရေးသားထားမှာကတော့ Hello Servlet ကို request လုပ်နိုင်မည့် form တစ်ခုပါပဲ။
action ကို တော့ hello ဆိုပြီး ပေးထားပါမယ်။ ပြီးရင် အောက်မှာ input တစ်ခုနဲ့ submit input တစ်ခုထည့်ထားပါမယ်။ ဒါမှသာ /hello နဲ့ map လုပ်ထားတဲ့ Servlet ကို သွားခေါ်မှာ ဖြစ်ပါတယ်။
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Hello Servlet</title> | |
</head> | |
<body> | |
<h1>Hello Servlet</h1> | |
<form action="hello"> | |
<input name="name"> | |
<input type="submit" value="Say Hello" > | |
</form> | |
</body> | |
</html> |
5. Hello Servlet
အထက်ပါ အတိုင်း Servlet တစ်ခုကို src/main/java အောက်မှာ com.jdc.web.servlet ဆိုတဲ့ package တစ်ခု ဆောက်ပြီး အဲ့ဒီအောက်မှာ သွားရေးထားပါမယ်။ ဒီတစ်ခေါက်က ပတ်ဝန်းကျင် ပြင်ဆင်ပုံကို အဓိကထားဖေါ်ပြမှာ ဖြစ်တဲ့ အတွက် Servlet ရေးသားပုံအကြောင်းနဲ့ ပတ်သက်ပြီးတော့က နောက်မှ ရေးသားသွားပါမယ်။
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jdc.web.servlet; | |
import java.io.IOException; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
@WebServlet("/hello") | |
public class HelloServlet extends HttpServlet { | |
private static final long serialVersionUID = 1L; | |
@Override | |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { | |
String name = req.getParameter("name"); | |
resp.getWriter().append("Hello " + name); | |
} | |
} |
ကဲဒါဆို ကျွန်တော်တို့ Maven ကို သုံးပြီး Web Project တစ်ခု ရေးသားပြီးပါပြီ။ ဆက်လက်ပြီး jetty plugin ကို သုံးပြီး Run ကြည့်ပါမယ်။
6. Running Maven Project
အထက်ပါ အတိုင်း Maven build Configuration ကို ဖွင့်ပါမယ်။
ပြီးရင် Goals နေရာမှာ jetty:run လို့ဖြည့်ပြီး Run ကို နှိပ်ပါမယ်။ ဒါဆိုရင် ကျွန်တော်တို့ရဲ့ Project ကို jetty နဲ့ Run ပေးမှာ ဖြစ်ပါတယ်။ တစ်ခုသတိပြုရမှာက jetty ဟာ port number 8080 ကို သုံးနေတဲ့ အတွက် အလားတူ port ကို သုံးနေတဲ့ Server တွေကို Run ထားရင် Error ဖြစ်ပါမယ်။
တစ်ခါ Run ထားတာကို မပိတ်ပဲ နောက်တစ်ခါသွား Run ရင်လဲ port 8080 ကို သုံးနေဆဲဖြစ်တဲ့ အတွက် Error ဖြစ်ပါမယ်။
ဒါကြောင့် Run မကြည့်ခင် အရင်ဆုံး port 8080 ကို သုံးထားသလားဆိုတာကို အရင် စစ်ပြီးမှ Run စေချင်ပါတယ်။
jetty ကို သုံးရတဲ့ အတွက် အလွန်ပေါ့ပါးပြီး jetty ကို Run ထားပြီး Code တွေကို ပြုပြင်နေမယ်ဆိုရင်လဲ အလိုအလျောက် Referesh လုပ်ပးမှာ ဖြစ်တဲ့အတွက် Server ကို Restart လုပ်စရာမလိုပဲ ရေးလိုက် Browser ကနေ ကြည့်လိုက် ရေးနေလို့ရပါတယ်။
Browser ကနေ localhost:8080 လို့ရိုက်ကြည့်လိုက်ရင် အထက်ပါ အတိုင်း index.html ကို ပြပေးမှာ ဖြစ်ပါတယ်။ ပြီးရင် input ထဲမှာ နာမည် တစ်ခုကို ရိုက်ကြည့်ပြီး say hello button ကို နှိပ်လိုက်ရင် အောက်ပါ အတိုင်း ပြသပေးနိုင်မှာ ဖြစ်ပါတယ်။
Conclusion
ဒီတစ်ခေါက် Eclipse IDE, Maven နဲ့ Jetty Plugin တို့ကို သုံးပြီး Web Application တစ်ခုကို ဘယ်လို ရေးမလဲဆိုတာကို အဓိကထားရေးသားခဲ့ပါတယ်။
အဲ့ဒီ အတွက် Project ကို ဘယ်လို ဆောက်မလဲ။ ပြီးရင် ဘယ်လို Run မလဲ ဆိုတာကို အဓိက ထားဖေါ်ပြခဲ့ပါတယ်။ Servlet ဆိုတာဘာလဲ။ ဘယ်လိုရေးသင့်သလဲ ဆိုတာကို မရေးသားခဲ့သေးပါဘူး။
နောက်ရက်များမှပဲ တစ်ခြား အခန်းတွေကို Update လုပ်ပါတော့မယ်။
GitHub Repository
ကျေးဇူးတင်စွာဖြင့်
မင်းလွင်
Your tutorial is very useful for Myanmar fresh programmer.
ReplyDeleteThank you very much.