ඕං ආවා lesson 6 අරගෙන. පොඩි කරදර වගයක් උනා. ඒකයි late උනේ. 
මම කලින් කියපු විදියටම, අද කරන්න බලාපොරොත්තු වෙන්නේ අපේ project එකට database එකක් connect කරන්න.
5th lesson එකේදී කිව්වා වගේ
1 - MySQL server
2 - MySQL-administrator
3 - MySQL-query-browser
ටික install කරගන්න ඇති කියලා හිතනවා.
හරි! මේ තියෙන්නේ මම install කරගත්ත ටික.
මේ?
MySQL server එක windows service එකක් විදියට දැනටමත් run වෙනවා.
අපි මුලින්ම පොඩි database එකක් හදමු.
MySQL-administrator එක open කරපල්ලකෝ.
ඔය Server host කියන තැනට localhost කියලා දීපල්ලා, port එක වෙනස් කරන්න යන්න එපා. ඒක තමයි default port එක.
ඊට පස්සේ username, password ඉල්ලන තැනට මේක install කරගද්දි දුන්න username, password දාලා OK කලාම මෙන්න මේ වගේ MySQL-administrator එකට අපිට log වෙන්න පුළුවන්.
හරි! ඒ Basics! වැඩේට බහිමු බොලව්!
අපි මුලින්ම schema එකක් හදන්න ඕනේ.
** ඒ කියන්නේ මේ schema එකක් ඇතුලේ තමයි අපේ project එක related database tables තියෙන්නේ.
දැන් ඔය left panel එකේ තියෙන Catalogs කියන node එක click කරපල්ලා.
ඊට පස්සේ පහලින් බොලාට පෙනෙයි දැනට තියෙන default schemes ටික.
දැන් ඒ schemes තියෙන පැත්තෙන් right click කලා --> Create New Schema
හරි! අපි දැන් මේකට නමක් දෙන්න ඕනේ බොලව්!
හැමදාම බොලාට Student management systems හදලා, Library systems හදලා එපා වෙලා ඇතිනේ? අපි හදමු contacts management system එකක්!
complex නෑ simple and easy!
ඔන්න මම නම දෙනවා contacts කියලා.
දැක්කනේ?
ඊට පස්සේ OK ඔබපල්ලා! ඕන්න add උනා.
දැන් contacts උඩ double click කරපියව්
Create Table button එක click කරන්න පුතාලා!
දැන් එන wizard එකට ඔන්න ඔය විදියට අපි table fields ටික දාගන්නවා.
දැනට ඔය තියෙන field settings ඔහොම්මම apply කරගන්න.
** ලොකු දෙයක් නෑ! උඹලට අත පත ගාලා මේ වැඩේ කරගන්න පුළුවන්.
after that, click on "Apply changes" button බොලව්!
Da faq is that?
පුතාලා, ගණන් ගන්න එපා Execute ඔබන්න.
** ඔය පෙන්නන්නේ අපි apply කරපු fields වලට අදාලව user table එක create කරන්න execute කරන්න ඕනේ SQL statement එක.
ඔන්න add උනා.
** දැනට මේකේ (user table) data මොනවත් නෑ හොඳේ? ඔය පේනවානේ? Row count එක 0.
අපි දැන් මේකට data add කරන්නයි යන්නේ. හරි ළමායි! දැන් MySQL-query-browser open කරන්න.
ඔව්! කලින් වගේම තමයි!
ඔහොම මගුලක් එයි! ඔය tick එක දාල OK කරපල්ලා.
ඕන්න ආවා!
පේනවානේ අපෙ schema එක and table එක තියෙනවා?
එහෙනම් දැන් මේකට මම fake data ටිකක් දානවා.
ඔන්න හරිනේ?
** ඔය row cell එකක් උඩ click කරලා F2 ඔබපුවාම edit mode එකට එනවා! Data insert කරලා, ඊට පස්සේ ඔය පහාලම තියෙන Apply changes button එක click කරලා changes apply කරන්න.
Okay! දැන් අපිට data තියෙනවා!
පොඩි login page එකක් හදලා userව verify කරගෙන අපි එයාව (userව) user page එකට redirect කරන්නයි දැන් යන්නේ.
පොඩි පොඩි වෙනස්කම් කීපයක් කරලා මම අපේ සුපුරුදු project එකම මේකට use කරනවා!
දන්නවනේ, බොලාලා අළුත්ම project එකක් කරගෙන මෙව්වා කලොත් තමයි හොඳ!
ඔන්න දැන් තමයි වැඩේට බහින්නේ!
මුලින්ම මම login.jsp එක දාගන්නවා simple login form එකකුත් එක්ක.
දන්නවනේ? WebContent folder එක ඇතුලටයි login.jsp එක ඔබා ගන්න ඕනේ! (කට්ටියට jsp pages හදන හැටි මතක ඇති කියලා හිතනවා)
**මම මේකට පොඩි CSS පාරක් දාලා ලස්සන කරලා ගන්නවා.
ඔය පේනවනේ? මම blue color එකෙන් box කරලා තියෙන්නේ external css file එකක්.
* මම අලුත් servlet එකක් හදා ගන්නවා, login කියලා ඒක තමයි ඔය form එකේ action එකට දීලා තියෙන්නේ. (red color එකෙන් box කරලා තියෙන්නේ ? )
* මතකද මන්දා, අපි කලින් පාර form එක submit කලේ get method එකෙන්? දැන් කරන්නේ post method එකෙන්. ඒ දෙකේ වෙනස දන්නවා ඇති කියලා හිතනවා.
* ${error} කියලා attribute එකකුත් define කරලා තියෙනවා පේනවා ඇතිනේ? මේකෙන් වෙන දේ ඉස්සරහට බලන්න පුළුවන්.
හොඳායි! දැන් web.xml එක open කරලා මම ඒකේ welcome file එකට set කරනවා අපේ login.jsp page එක. දැන් ඒක තමයි උදේ පාන්දරම project එක run කලාම එන්නේ.
මේ..
ඔන්න මම server එක up කරලා project එක run කරනවා.
apply කරපු styles ටිකත් එක්ක ඔය විදියට තමයි login.jsp එක display වෙන්නේ.
ඊළඟට login action handle කරන්න මම අලුත් servlet එකක් හදා ගන්නවා.
ඔව්! පරණ package එක ඇතුලෙම තමයි! කලින් පාර හැදුවා වගේම servlet එකක්.
පේනවනේ?
** අපි කලින් use කලේ doGet() method එක. දැන් use කරන්නේ doPost() method එක.
ඇයි? මතක නැද්ද තොපිට? අපි කලින් form එක submit කලේ get method එකෙන්. (form එකෙ method එකක් define කලේ නැත්තන් by default ගන්නේ get method එක)
දැන් submit කරන්නේ post method එකෙන්.
** ඒ ඒ බනිස් වලට ඒ ඒ කෙසෙල් theoryය මේ අවස්ථාවේදී apply වන බව තරයේ සිත තබා ගනිව්!!
ඔන්න ඔහොමයි දැන් folder structure එක පේන්න තියෙන්නේ.
** ඔය එහෙන් මෙහෙන් පේන පරණ project එකේ කෑලි ගැන හිතන්න එපා!
දැන් මම මේ අලුත් servlet එක map කරගන්නවා web.xml එකේ!
අහ්! මතකයිනේ? මම කිව්වා මේකට නම දෙන්නේ login කියලා?
ඊළඟට අපි database connection එකක් හදා ගන්න ඕනේ! නැත්තන් user inputs validate කරන්න බෑනේ?
මේ ටික අපි code කරන්නේ Login class එක ඇතුලේ!
** අමතකම උනා යකුනේ! අපිට මේකට jar file එකක් ඕනේ වෙනවා! (mysql-connector-java.jar) ඒක නැතුව ඉතින් හුකෑස් තමයි!
ඔන්න තියෙනවා jar file link එක! එතනින් ඒක download කරගන්න
http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.36
හරි! දැන් ඕක අපේ project එකට දාගන්න හැටි මම කියලා දෙන්නම්! ඊට පස්සේම coding වලට බහිමු.
project එක උඩ right click කලා -- > Properties
Okay! then, ඔය left panel එකේ තියෙන Java Build Path කියන node එක select කරලා, Libraries කියන tab එක click කරන්න.
ඊට පස්සේ Add External JARS.. button එක click කරලා එන browser window එකෙන් , mysql-connector-java.jar එක brows කරලා select කරලා OK කරන්න.
ඔන්න add උනා!
Okay! coding වලට බහිමු.
මෙන්න තියෙනවා full method implementation එක.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
String username = request.getParameter("username");
String password = request.getParameter("password");
// Initializing the JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// Setting up the connection
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/contacts","root", "root");
// SQL query to select the user
String query = "SELECT * FROM user WHERE username = '"+username+"' and password = '"+password+"'";
// create the java statement
Statement st = connection.createStatement();
// execute the query, and get a java resultset
ResultSet rs = st.executeQuery(query);
// If there is such user
if (rs.next()){
request.setAttribute("username", username);
request.getRequestDispatcher("user").forward(request, response);
return;
} else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
// Eventually releases the Statement object's database and JDBC resources
st.close();
} catch (ClassNotFoundException e) {
request.setAttribute("error", "No MySQL JDBC driver found");
} catch (SQLException e) {
request.setAttribute("error","Connection Failed!");
} catch(Exception exception){
request.setAttribute("error","An error occurred!");
}
request.getRequestDispatcher("login.jsp").forward(request, response);
}
වැදගත්ම lines ටික මම explain කරන්නම්! අනිත් ඒවා comments බලලා තෙරුම් ගන්න පුළුවන්.
මේ තියෙන්නේ database එකට connection එක හදා ගන්න විදිය.
Statement st = connection.createStatement();
** SQL statements run කරගන්නයි, ඒ අදාල SQL statement එක run කලාම එන result set එක බලාගන්නයි තමයි මේක use කරන්නේ.
ResultSet rs = st.executeQuery(query);
** පේනවනේ? අර කලින් declair කරපු Statement object එක use කරලා තමයි මෙතන ResultSet කියන object එක initialize කරලා තියෙන්නේ.
if (rs.next()){
request.setAttribute("username", username);
request.getRequestDispatcher("user").forward(request, response);
return;
} else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
** rs.next() කියන method එකෙන් කරන්නේ අපිට st.executeQuery(query) කියන method එක execute කලාම return වෙන result set එකේ
(මෙතන result set එක කියලා කියන්නේ ඇත්තටම අපි ලිව්ව SQL statement එකට අදාල data ටික) row එකෙන් row එක තියෙනවාද බල බල loop කරන එක.
(data තියෙනවා නම් true කියලා return වෙනවා නැත්තන් false කියලා return වෙනවා)
මෙතනදී අපි දුන්න SQL statement එකට අදාලව තියෙන්නේ එක result set එකයි. ඒ කියන්නේ එක row එකයි.
request.setAttribute("username", username);
** මේ කරලා තියෙන එක දැනටමත් උඹලා දන්නවා. අපි අපේ relevant jsp file එකට send කරන්නයි මේ username කියන attribute එක හදාගෙන ඒකට අපේ username එක assign කරගෙන තියෙන්නේ
request.getRequestDispatcher("user").forward(request, response);
මේ කරලා තියෙන එකත් දැනටමත් උඹලා දන්නවා. මේ අපි කලින් පාර lesson එකේදී කලා වගේම log වෙන userව එයාගේ user page එකට redirect කරලා තියෙන්නේ.
** හැබැයි username and passwords correct නම් විතරයි
else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
** comment එකෙන්ම පේනවනේ? අපි දුන්න username and password වලට අදාලව user කෙනෙක් නැත්තන්, අපි error කියලා attribute එකක් හදල proper error message එකක් දෙනවා මේ data වලට අදාලව user කෙනෙක් නෑ කියලා
ඊට පස්සේ අපි වඩාත් වැදගත්ම exceptions ටික handle කරගෙන තියෙනවා. මේවා ගැන උඹලම ටිකක් හොයලා බැලුවොතින් තමයි හොඳ!
catch (ClassNotFoundException e) {
request.setAttribute("error", "No MySQL JDBC driver found");
} catch (SQLException e) {
request.setAttribute("error","Connection Failed!");
} catch(Exception exception){
request.setAttribute("error","An error occurred!");
}
** පේනවානේ ඒ ඒ exceptions වලට අදාලව වෙනම වෙනම error attributes දාලා තියෙන හැටි?
හරි! එහෙනම් ඔන්න අපි මේක දැන් run කරන්නයි යන්නේ. server එක එහෙම start කරලා ගමු!
හරි! username and password දැම්මා signin button එක එබුවා!
ට' *කෙයි කිව්වලු!


මේ මොකද්ද මේ?
හරි කලබල වෙන්න එපා, ඕක ඔහොම වෙන බව මම දැනගෙන හිටියා.
** ඔය error message එක දිහා හොඳට බැලුවොතින් පෙනෙයි, ඔය error message එක generate වෙලා තියෙන්නේ exception එකක් fire උන හින්දා කියලා.
ඔව්! ClassNotFoundExceptionඑක තමයි.
දැන් මෙහෙමයි fire නිවන්නේ.

මම මුලින්ම ඕක ඔහොම වෙන්න හේතුව කියන්නම්.
java program එකක time stages දෙකක් තියෙනවා.
1 - Compile time
2 - Run time
ඒ කියන්නේ, අපේ code එක මුලින්ම compile වෙනවා, ඊට පස්සේ තමයි run වෙන්නේ.
Server එක run කරනවා කියලා කියන්නේ tomcat මල්ලිව up කරනවා විතරක්ම නෙමෙයි. එයා (IDE) ඒ වෙලාවට අපේ project එකේ තියෙන java files එහෙමත් compile කරගන්නවා.
compile කරගද්දී compile errors පැන්නොත් අපේ project එක up කරන්නෙත් නෑ.
ඒ කියන්නේ localhost:8080/HelloWorld/ කියලා ගැහුවට එන්නේ 404 තමයි. ඒ කියන්නේ ඉතින් බොලව් හුකෑස්!
(not found තමයි)
අපේ project එකේ compile errors තිබුනොත් tomcat මල්ලී බොහෝ දුරට up වෙන්නේ නෑ. and අනික compile errors තිබුනොත් අපේ IDE එකේ හරි ලස්සනට ඒ ටික පෙන්නනවා.
දැන් මෙතනදී අපේ IDE එකේ compile errors පෙන්නන්නෙත් නෑ, tomcat මල්ලිත් up උනා අව්ලක් නැතුව, project එකත් up උනා.
** ඒ කියන්නේ මෙතන තියෙන්නේ Run time අව්ලක්.
හේතුව තමයි, මෙයා MySQL එකට connection එක හදාගන්න යද්දී බලනවා මේකට connection එක හදාගන්න ක්රමයක් කොහේ හරි කියලා තියෙනවද කියලා.
ඔව්නේ! අපි කියලා තියෙනවා.
මේ.?
Class.forName("com.mysql.jdbc.Driver");
ඊට පස්සේ මෙයා යනවා අන්න ඒ Driver කියන class file එක හොයාගෙන.
tomcat මල්ලී refer කරන external class files (jar files) තියෙන තැන හරිම වෙනස්.
STS ලොක්කා වගේ නෙමෙයි! මතකයිනේ? අපි STS ලොක්කට, external jar file එකක් විදියට mysql-connector-java.jar file එක include කලා අපේ project එකට?
ඒත් අපි tomcat මල්ලිට mysql-connector jar එක introduce කලාද? නෑ නේ බොලව්?
STS ලොක්කට mysql-connector-java.jar file එක introduce කරපු හින්දා ඌ අව්ලක් නැතුව compile කරලා tomcat මල්ලිට දෙනවා ""ආහ් run කරපන් දැන්"" කියලා, ඒත් tomcat මල්ලී jar files refer කරන තැන mysql-connector-java.jar file එක නෑ.
හරි! jar file එක නැත්තන් ඉතින් jar file එක දාමු!
මුලින්ම tomcat stop කරන්න ඕනේ.
ඊට පස්සේ tomcat home එකේ තියෙන lib folder එක ඇතුලට අර mysql-connector-java.jar file එක copy කරන්න
මෙන්න මේ වගේ
ඕක කියලා දෙන්නේ නැතුව ගියානම් ඉස්සරහට ගොඩක් කරදර වෙන්න වෙනවා errors හොයාගන්න ගියාම
දැන් අයෙමත් server එක up කරලා ගමු.
ඊට පස්සේ username password දීලා sign in වෙන්න.
ඔන්න හරි!
බොරු username password දීලත් බලපල්ලා.

ඉතින්, අද තවත් වැදම වැදගත් lesson එකක් කලා.
අපි ටික ටික ඉස්සරහට යනවා. Next lesson එකේදී මම කරන්න බලාපොරොත්තු වෙන්නේ JSTL (JSP Standard Tag Libraries) ගැන. චුට්ටක් internet එකේ බලලා ලෑස්ති වෙලා ඉඳහල්ලා.
අදත් ගොඩක් දේවල් ඉගෙන ගත්තනේ. එහෙනම් හැමෝටම ජය!
අහ්! මෙන්න අනිත් lessons ටික.
java web development පළමු කොටස
java web development දෙවෙනි කොටස - Application server එක configure කරමු.
java web development 3 කොටස - IDE එක configure කරමු
java web development 4 කොටස - simple java web project
java web development 5 කොටස - JSP
හරි! එහෙනම් next lesson එකෙන් හම්බෙමු!
මේකට උඹලගේ කැපවීම අනිවාර්යයි! මට පුලුවන් බොලාට මඟ පෙන්නන්න විතරයි!

මම කලින් කියපු විදියටම, අද කරන්න බලාපොරොත්තු වෙන්නේ අපේ project එකට database එකක් connect කරන්න.
5th lesson එකේදී කිව්වා වගේ
1 - MySQL server
2 - MySQL-administrator
3 - MySQL-query-browser
ටික install කරගන්න ඇති කියලා හිතනවා.

හරි! මේ තියෙන්නේ මම install කරගත්ත ටික.
මේ?
MySQL server එක windows service එකක් විදියට දැනටමත් run වෙනවා.

අපි මුලින්ම පොඩි database එකක් හදමු.
MySQL-administrator එක open කරපල්ලකෝ.
ඔය Server host කියන තැනට localhost කියලා දීපල්ලා, port එක වෙනස් කරන්න යන්න එපා. ඒක තමයි default port එක.
ඊට පස්සේ username, password ඉල්ලන තැනට මේක install කරගද්දි දුන්න username, password දාලා OK කලාම මෙන්න මේ වගේ MySQL-administrator එකට අපිට log වෙන්න පුළුවන්.
හරි! ඒ Basics! වැඩේට බහිමු බොලව්!

අපි මුලින්ම schema එකක් හදන්න ඕනේ.
** ඒ කියන්නේ මේ schema එකක් ඇතුලේ තමයි අපේ project එක related database tables තියෙන්නේ.
දැන් ඔය left panel එකේ තියෙන Catalogs කියන node එක click කරපල්ලා.
ඊට පස්සේ පහලින් බොලාට පෙනෙයි දැනට තියෙන default schemes ටික.
දැන් ඒ schemes තියෙන පැත්තෙන් right click කලා --> Create New Schema
හරි! අපි දැන් මේකට නමක් දෙන්න ඕනේ බොලව්!
හැමදාම බොලාට Student management systems හදලා, Library systems හදලා එපා වෙලා ඇතිනේ? අපි හදමු contacts management system එකක්!
complex නෑ simple and easy!
ඔන්න මම නම දෙනවා contacts කියලා.
දැක්කනේ?
ඊට පස්සේ OK ඔබපල්ලා! ඕන්න add උනා.
දැන් contacts උඩ double click කරපියව්
Create Table button එක click කරන්න පුතාලා!
දැන් එන wizard එකට ඔන්න ඔය විදියට අපි table fields ටික දාගන්නවා.
දැනට ඔය තියෙන field settings ඔහොම්මම apply කරගන්න.
** ලොකු දෙයක් නෑ! උඹලට අත පත ගාලා මේ වැඩේ කරගන්න පුළුවන්.

after that, click on "Apply changes" button බොලව්!
Da faq is that?

පුතාලා, ගණන් ගන්න එපා Execute ඔබන්න.
** ඔය පෙන්නන්නේ අපි apply කරපු fields වලට අදාලව user table එක create කරන්න execute කරන්න ඕනේ SQL statement එක.
ඔන්න add උනා.
** දැනට මේකේ (user table) data මොනවත් නෑ හොඳේ? ඔය පේනවානේ? Row count එක 0.
අපි දැන් මේකට data add කරන්නයි යන්නේ. හරි ළමායි! දැන් MySQL-query-browser open කරන්න.
ඔව්! කලින් වගේම තමයි!
ඔහොම මගුලක් එයි! ඔය tick එක දාල OK කරපල්ලා.
ඕන්න ආවා!
පේනවානේ අපෙ schema එක and table එක තියෙනවා?

එහෙනම් දැන් මේකට මම fake data ටිකක් දානවා.
ඔන්න හරිනේ?
** ඔය row cell එකක් උඩ click කරලා F2 ඔබපුවාම edit mode එකට එනවා! Data insert කරලා, ඊට පස්සේ ඔය පහාලම තියෙන Apply changes button එක click කරලා changes apply කරන්න.
Okay! දැන් අපිට data තියෙනවා!

පොඩි login page එකක් හදලා userව verify කරගෙන අපි එයාව (userව) user page එකට redirect කරන්නයි දැන් යන්නේ.
පොඩි පොඩි වෙනස්කම් කීපයක් කරලා මම අපේ සුපුරුදු project එකම මේකට use කරනවා!
දන්නවනේ, බොලාලා අළුත්ම project එකක් කරගෙන මෙව්වා කලොත් තමයි හොඳ!
ඔන්න දැන් තමයි වැඩේට බහින්නේ!
මුලින්ම මම login.jsp එක දාගන්නවා simple login form එකකුත් එක්ක.
දන්නවනේ? WebContent folder එක ඇතුලටයි login.jsp එක ඔබා ගන්න ඕනේ! (කට්ටියට jsp pages හදන හැටි මතක ඇති කියලා හිතනවා)
**මම මේකට පොඩි CSS පාරක් දාලා ලස්සන කරලා ගන්නවා.

ඔය පේනවනේ? මම blue color එකෙන් box කරලා තියෙන්නේ external css file එකක්.
* මම අලුත් servlet එකක් හදා ගන්නවා, login කියලා ඒක තමයි ඔය form එකේ action එකට දීලා තියෙන්නේ. (red color එකෙන් box කරලා තියෙන්නේ ? )
* මතකද මන්දා, අපි කලින් පාර form එක submit කලේ get method එකෙන්? දැන් කරන්නේ post method එකෙන්. ඒ දෙකේ වෙනස දන්නවා ඇති කියලා හිතනවා.
* ${error} කියලා attribute එකකුත් define කරලා තියෙනවා පේනවා ඇතිනේ? මේකෙන් වෙන දේ ඉස්සරහට බලන්න පුළුවන්.
හොඳායි! දැන් web.xml එක open කරලා මම ඒකේ welcome file එකට set කරනවා අපේ login.jsp page එක. දැන් ඒක තමයි උදේ පාන්දරම project එක run කලාම එන්නේ.
මේ..
ඔන්න මම server එක up කරලා project එක run කරනවා.
apply කරපු styles ටිකත් එක්ක ඔය විදියට තමයි login.jsp එක display වෙන්නේ.

ඊළඟට login action handle කරන්න මම අලුත් servlet එකක් හදා ගන්නවා.
ඔව්! පරණ package එක ඇතුලෙම තමයි! කලින් පාර හැදුවා වගේම servlet එකක්.
පේනවනේ?
** අපි කලින් use කලේ doGet() method එක. දැන් use කරන්නේ doPost() method එක.
ඇයි? මතක නැද්ද තොපිට? අපි කලින් form එක submit කලේ get method එකෙන්. (form එකෙ method එකක් define කලේ නැත්තන් by default ගන්නේ get method එක)
දැන් submit කරන්නේ post method එකෙන්.
** ඒ ඒ බනිස් වලට ඒ ඒ කෙසෙල් theoryය මේ අවස්ථාවේදී apply වන බව තරයේ සිත තබා ගනිව්!!

ඔන්න ඔහොමයි දැන් folder structure එක පේන්න තියෙන්නේ.
** ඔය එහෙන් මෙහෙන් පේන පරණ project එකේ කෑලි ගැන හිතන්න එපා!
දැන් මම මේ අලුත් servlet එක map කරගන්නවා web.xml එකේ!
අහ්! මතකයිනේ? මම කිව්වා මේකට නම දෙන්නේ login කියලා?
ඊළඟට අපි database connection එකක් හදා ගන්න ඕනේ! නැත්තන් user inputs validate කරන්න බෑනේ?
මේ ටික අපි code කරන්නේ Login class එක ඇතුලේ!
** අමතකම උනා යකුනේ! අපිට මේකට jar file එකක් ඕනේ වෙනවා! (mysql-connector-java.jar) ඒක නැතුව ඉතින් හුකෑස් තමයි!

ඔන්න තියෙනවා jar file link එක! එතනින් ඒක download කරගන්න
http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.36
හරි! දැන් ඕක අපේ project එකට දාගන්න හැටි මම කියලා දෙන්නම්! ඊට පස්සේම coding වලට බහිමු.
project එක උඩ right click කලා -- > Properties
Okay! then, ඔය left panel එකේ තියෙන Java Build Path කියන node එක select කරලා, Libraries කියන tab එක click කරන්න.
ඊට පස්සේ Add External JARS.. button එක click කරලා එන browser window එකෙන් , mysql-connector-java.jar එක brows කරලා select කරලා OK කරන්න.
ඔන්න add උනා!

Okay! coding වලට බහිමු.
මෙන්න තියෙනවා full method implementation එක.

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
String username = request.getParameter("username");
String password = request.getParameter("password");
// Initializing the JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// Setting up the connection
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/contacts","root", "root");
// SQL query to select the user
String query = "SELECT * FROM user WHERE username = '"+username+"' and password = '"+password+"'";
// create the java statement
Statement st = connection.createStatement();
// execute the query, and get a java resultset
ResultSet rs = st.executeQuery(query);
// If there is such user
if (rs.next()){
request.setAttribute("username", username);
request.getRequestDispatcher("user").forward(request, response);
return;
} else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
// Eventually releases the Statement object's database and JDBC resources
st.close();
} catch (ClassNotFoundException e) {
request.setAttribute("error", "No MySQL JDBC driver found");
} catch (SQLException e) {
request.setAttribute("error","Connection Failed!");
} catch(Exception exception){
request.setAttribute("error","An error occurred!");
}
request.getRequestDispatcher("login.jsp").forward(request, response);
}
වැදගත්ම lines ටික මම explain කරන්නම්! අනිත් ඒවා comments බලලා තෙරුම් ගන්න පුළුවන්.
මේ තියෙන්නේ database එකට connection එක හදා ගන්න විදිය.
Statement st = connection.createStatement();
** SQL statements run කරගන්නයි, ඒ අදාල SQL statement එක run කලාම එන result set එක බලාගන්නයි තමයි මේක use කරන්නේ.
ResultSet rs = st.executeQuery(query);
** පේනවනේ? අර කලින් declair කරපු Statement object එක use කරලා තමයි මෙතන ResultSet කියන object එක initialize කරලා තියෙන්නේ.
if (rs.next()){
request.setAttribute("username", username);
request.getRequestDispatcher("user").forward(request, response);
return;
} else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
** rs.next() කියන method එකෙන් කරන්නේ අපිට st.executeQuery(query) කියන method එක execute කලාම return වෙන result set එකේ
(මෙතන result set එක කියලා කියන්නේ ඇත්තටම අපි ලිව්ව SQL statement එකට අදාල data ටික) row එකෙන් row එක තියෙනවාද බල බල loop කරන එක.
(data තියෙනවා නම් true කියලා return වෙනවා නැත්තන් false කියලා return වෙනවා)
මෙතනදී අපි දුන්න SQL statement එකට අදාලව තියෙන්නේ එක result set එකයි. ඒ කියන්නේ එක row එකයි.
request.setAttribute("username", username);
** මේ කරලා තියෙන එක දැනටමත් උඹලා දන්නවා. අපි අපේ relevant jsp file එකට send කරන්නයි මේ username කියන attribute එක හදාගෙන ඒකට අපේ username එක assign කරගෙන තියෙන්නේ
request.getRequestDispatcher("user").forward(request, response);
මේ කරලා තියෙන එකත් දැනටමත් උඹලා දන්නවා. මේ අපි කලින් පාර lesson එකේදී කලා වගේම log වෙන userව එයාගේ user page එකට redirect කරලා තියෙන්නේ.
** හැබැයි username and passwords correct නම් විතරයි
else{ // If there is no such user
request.setAttribute("error", "Username or password is incorrect!");
}
** comment එකෙන්ම පේනවනේ? අපි දුන්න username and password වලට අදාලව user කෙනෙක් නැත්තන්, අපි error කියලා attribute එකක් හදල proper error message එකක් දෙනවා මේ data වලට අදාලව user කෙනෙක් නෑ කියලා
ඊට පස්සේ අපි වඩාත් වැදගත්ම exceptions ටික handle කරගෙන තියෙනවා. මේවා ගැන උඹලම ටිකක් හොයලා බැලුවොතින් තමයි හොඳ!
catch (ClassNotFoundException e) {
request.setAttribute("error", "No MySQL JDBC driver found");
} catch (SQLException e) {
request.setAttribute("error","Connection Failed!");
} catch(Exception exception){
request.setAttribute("error","An error occurred!");
}
** පේනවානේ ඒ ඒ exceptions වලට අදාලව වෙනම වෙනම error attributes දාලා තියෙන හැටි?
හරි! එහෙනම් ඔන්න අපි මේක දැන් run කරන්නයි යන්නේ. server එක එහෙම start කරලා ගමු!

හරි! username and password දැම්මා signin button එක එබුවා!
ට' *කෙයි කිව්වලු!



මේ මොකද්ද මේ?
හරි කලබල වෙන්න එපා, ඕක ඔහොම වෙන බව මම දැනගෙන හිටියා.
** ඔය error message එක දිහා හොඳට බැලුවොතින් පෙනෙයි, ඔය error message එක generate වෙලා තියෙන්නේ exception එකක් fire උන හින්දා කියලා.
ඔව්! ClassNotFoundExceptionඑක තමයි.

දැන් මෙහෙමයි fire නිවන්නේ.


මම මුලින්ම ඕක ඔහොම වෙන්න හේතුව කියන්නම්.
java program එකක time stages දෙකක් තියෙනවා.
1 - Compile time
2 - Run time
ඒ කියන්නේ, අපේ code එක මුලින්ම compile වෙනවා, ඊට පස්සේ තමයි run වෙන්නේ.
Server එක run කරනවා කියලා කියන්නේ tomcat මල්ලිව up කරනවා විතරක්ම නෙමෙයි. එයා (IDE) ඒ වෙලාවට අපේ project එකේ තියෙන java files එහෙමත් compile කරගන්නවා.
compile කරගද්දී compile errors පැන්නොත් අපේ project එක up කරන්නෙත් නෑ.
ඒ කියන්නේ localhost:8080/HelloWorld/ කියලා ගැහුවට එන්නේ 404 තමයි. ඒ කියන්නේ ඉතින් බොලව් හුකෑස්!
(not found තමයි)අපේ project එකේ compile errors තිබුනොත් tomcat මල්ලී බොහෝ දුරට up වෙන්නේ නෑ. and අනික compile errors තිබුනොත් අපේ IDE එකේ හරි ලස්සනට ඒ ටික පෙන්නනවා.
දැන් මෙතනදී අපේ IDE එකේ compile errors පෙන්නන්නෙත් නෑ, tomcat මල්ලිත් up උනා අව්ලක් නැතුව, project එකත් up උනා.
** ඒ කියන්නේ මෙතන තියෙන්නේ Run time අව්ලක්.

හේතුව තමයි, මෙයා MySQL එකට connection එක හදාගන්න යද්දී බලනවා මේකට connection එක හදාගන්න ක්රමයක් කොහේ හරි කියලා තියෙනවද කියලා.
ඔව්නේ! අපි කියලා තියෙනවා.
මේ.?

Class.forName("com.mysql.jdbc.Driver");
ඊට පස්සේ මෙයා යනවා අන්න ඒ Driver කියන class file එක හොයාගෙන.
tomcat මල්ලී refer කරන external class files (jar files) තියෙන තැන හරිම වෙනස්.
STS ලොක්කා වගේ නෙමෙයි! මතකයිනේ? අපි STS ලොක්කට, external jar file එකක් විදියට mysql-connector-java.jar file එක include කලා අපේ project එකට?
ඒත් අපි tomcat මල්ලිට mysql-connector jar එක introduce කලාද? නෑ නේ බොලව්?

STS ලොක්කට mysql-connector-java.jar file එක introduce කරපු හින්දා ඌ අව්ලක් නැතුව compile කරලා tomcat මල්ලිට දෙනවා ""ආහ් run කරපන් දැන්"" කියලා, ඒත් tomcat මල්ලී jar files refer කරන තැන mysql-connector-java.jar file එක නෑ.

හරි! jar file එක නැත්තන් ඉතින් jar file එක දාමු!

මුලින්ම tomcat stop කරන්න ඕනේ.
ඊට පස්සේ tomcat home එකේ තියෙන lib folder එක ඇතුලට අර mysql-connector-java.jar file එක copy කරන්න
මෙන්න මේ වගේ
ඕක කියලා දෙන්නේ නැතුව ගියානම් ඉස්සරහට ගොඩක් කරදර වෙන්න වෙනවා errors හොයාගන්න ගියාම

දැන් අයෙමත් server එක up කරලා ගමු.
ඊට පස්සේ username password දීලා sign in වෙන්න.
ඔන්න හරි!
බොරු username password දීලත් බලපල්ලා.


ඉතින්, අද තවත් වැදම වැදගත් lesson එකක් කලා.
අපි ටික ටික ඉස්සරහට යනවා. Next lesson එකේදී මම කරන්න බලාපොරොත්තු වෙන්නේ JSTL (JSP Standard Tag Libraries) ගැන. චුට්ටක් internet එකේ බලලා ලෑස්ති වෙලා ඉඳහල්ලා.අදත් ගොඩක් දේවල් ඉගෙන ගත්තනේ. එහෙනම් හැමෝටම ජය!

අහ්! මෙන්න අනිත් lessons ටික.
java web development පළමු කොටස
java web development දෙවෙනි කොටස - Application server එක configure කරමු.
java web development 3 කොටස - IDE එක configure කරමු
java web development 4 කොටස - simple java web project
java web development 5 කොටස - JSP
හරි! එහෙනම් next lesson එකෙන් හම්බෙමු!
මේකට උඹලගේ කැපවීම අනිවාර්යයි! මට පුලුවන් බොලාට මඟ පෙන්නන්න විතරයි!

