[JAVA] Install MAVAN

วันนี้มาเขียน Blog สรุปชั้นตอน การ Install MAVEN ครับ สำหรับ Windows โดยมีชั้นตอน ดังนี้

เตรียมตัว

  • ติดตั้ง Java Development Kit(JDK)
  • ทำการกำหนด  JAVA_HOME  เรียบร้อยแล้ว
  • ซึ่งสามารถทดสอบโดยใช้คำสั่ง  java -version  ซึ่งควรได้ผลลัพธ์
  • Download ตัวติดตั้ง Maven จาก http://maven.apache.org/download.cgi#Installation โดยเลือกไฟล์  apache-maven-X.X.X-bin.zip  ดังรูป

ขั้นตอนการติดตั้ง

  • แตก zip ไฟล์ตัวติดตั้ง MAVEN  จากนั้นนำว่าไปใน Path  C:\Program Files\apache-maven  โดยใช้ Path นี้ไปใช้กับ Enviroment Variable ในขั้นตอนถัดไป
  • กำหนด Enviroment Variable โดยไปคลิกขวาที่ This PC >> Properties >> Advanced System Settings  มาที่ Tab Advance >> Enviroment Variable
  • เพิ่ม System Variable 2 ตัว (ที่เพิ่มทั้ง 2 ตัว เพราะกันไว้ดีกว่าแก้ครับ)
    • M2_HOME  โดยใส่ค่า  C:\Program Files\apache-maven  ดังรูป
    • MAVEN_HOME  โดยใส่ค่า  C:\Program Files\apache-maven  ดังรูป
  • กำหนดตัวแปร  PATH  โดยใส่ค่า  %M2_HOME%\bin ดังรูป

ทดสอบใช้งาน

  • ทดสอบด้วยคำสั่ง  mvn version  โดยมีผลลัพธืที่ได้ดังนี้

 

[JAVA] illegal escape character

หลังจากให้ Tools ตัวนึงปรากฏว่าได้ Code ในลักษณะแบบนี้

ซึ้งพอใช้คำสั่ง maven install แล้วเนี่ย ได้ Error มาเพียบเลยยย

โดย illegal escape character มีสาเหตุเกิดจากการใช้ \ คู่กับ String บางตัว แล้วดันไปเข้ากับคำสั่งพิเศษใน String ของภาษา Java อาทิ เช่น

  • \t = tab
  • \n = newline
  • และตัวอื่นๆ อาทิ เช่น \U, \J, \D, \N, \x

สำหรับหาการแก้ไข – หลืกเลี่ยงสิ ไม่ใช่ \ ไปใช้สัญลักษณ์อื่นแทน ซึ่งมี 2 แบบ ได้แก่

  • โดยใช้ \\ แทน \ เช่น
  • หรือใช้ / แทน \ เช่น

[Java] ติดตั้ง Apache Tomcat / Java Web Server

Reference: http://maxpixel.freegreatpicture.com/Tomcat-Charming-Kitten-Animals-Cat-Fur-Animal-1199937

หลังจากตบตีกับ Java -version สำเร็จไป คราวนี้มาถึงตัว Tomcat บาง ขึ้น Web Server ทั้งทีจะขาดเจ้าแมวน้อยตัวนี้ไปได้อย่างไร โดยขั้นตอนการ Setup บน Windows ง่ายมากครับ โดยมีขั้นตอน ดังนี้

Step 1 : เตรียมตัว

  • ตรวจสอบก่อนเลย ว่าติดตั้ง Java หรือยัง ถ้าไม่มีก็จัดการลงเลยครับ สำหรับสาย Dev แนะนำลงตัว JDK (Java Development Kit) เลยครับ
  • Download ตัว Tomcat จาก มารอเลยครับ โดยตอนนี้ผมขอใช้ Tomcat Version 8 ก่อนนะครับ Version 9 ยัง Beta อยู่ ไม่อยากเสี่ยง โดยเลือกเป็นแบบ .zip ครับ

Step 2 : ตั้งค่าที่จำเป็น

  • หลังจากลง Java เสร็จแล้ว อย่าลืม Set Enviroment Variable ดังนี้

    • JAVA_HOMEC:\Program Files\Java\jdk1.8.0_152
    • JRE_HOMEC:\Program Files\Java\jre1.8.0_152
  • ค่าของ JAVA_HOME และ JRE_HOME ปรับตาม Default Path ที่ได้ลง Java ไว้ในเครื่องนะครับ (ถ้าลงใน Path ที่ไม่เหมือนจากนั้น ก็ปรับให้ถูกต้องด้วย)

Step 3 : ติดตั้ง Tomcat

    • แตกไฟล์ Zip ของ Tomcat ไว้ยัง Path ที่ต้องการ
    • เข้าไปที่ [TOMCAT_FOLDER] >> bin>> Startup.bat
    • ทดสอบ Run ไฟล์ Startup.bat เมื่อเข้าไปที่ url  http://localhost:8080 พบกับหน้าจอต้อนรับ ดังรูป
    • หมายเหตุ: ถ้า Firewall มี Prompt ถามให้ Allow ก็ Allow ให้มันด้วยนะครับ เดี๋ยวจะเข้าเว็บไม่ได้กัน

Step 4 : Hello World

  • ลองเขียน Code JSP ดังนี้
  • จากนั้น Save ไฟล์ ในชื่อ index.jsp
  • นำไฟล์ที่เขียนไป deploy ไว้ที่ webapps โดยเข้าทาง Path [TOMCAT_FOLDER] >> webapps จากนั้นเอาไฟล์ที่เพิ่งสร้างใส่ไว้ในโพลเดอรฺ์ helloworld ดังรูป
  • ทดสอบผลลัพธ์ที่ได้ โดยเข้าผ่าน url http://localhost:8080/helloworld/

Step 5 : ทดสอบจิปาถะอื่นๆ

  • เปลี่ยน Port จาก 8080 ไปเป็น Port อื่นๆ โดยแก้ไขที่ไฟล์ server.xml ซึ่งอยู่ใน Path [TOMCAT_FOLDER] >> conf โดยแก้ไขในส่วน Connector Port จากเดิม 8080 มาเป็น 5555 โดยแก้ไขเสร็จแล้ว อย่าลืม Save ไฟลฺ์ จากนั้น Stop Server และ Start Server ใหม่ด้วย
  • เพิ่ม User & Role เพื่อให้เราเข้าไปจัดการกับ Tomcat ได้ โดยปกติแล้ว ถ้าใน Tomcat มี Default User ขึ้นมา และในภายหลัง Tomcate 7, 8 และ 9 ถูกต้องออกครับ โดยเป็นเหตุผลด้านความปลอดภัย ใส่ Defaul User & Role โดยแก้ไขที่ไฟล์ tomcat-users.xml ซึ่งอยู่ใน Path [TOMCAT_FOLDER] >> conf

    • จากนั้นก็ลอง Login ดูครับ เห็น Helloworld ที่เพิ่งสร้างไปด้วย

      This slideshow requires JavaScript.

 

 

[JAVA] Eclipse exit code 13

บางครั้งวลาเราไปอบรมข้างนอก ลงเครื่องใหม่ หรืออ่า่นๆก็แล้วที่ ที่จำเป็นต้องลง Java ตามที่มีคนให้มา หรือ download มาลงเองแหละ แล้วพอไปจะไปเปิดมัน ดันเจอ Message แบบนี้เข้า

2015-04-21_130135

สำหรับเจ้า Error มีสาเหตุ และวิธีการแก้ไข ดังนี้ครับ

  • สาเหตุ: เกิดจากตัว Eclipse ไม่พบ Java ที่เรา Required ครับ
  • การแก้ไข: มีวิธีการแก้ที่เป็นไปได้ ดังนี้ครับ
    • วิธีแรก: ลง JDK ให้ตรงตามที่ Eclipse ต้องการ อย่างในรูป คือ JDK 1.6 ครับ แล้ว Set ตัวแปร Path ใน Environment ด้วยครับ หลายอาจจะสงสัยว่า Error ไหนมันบอกให้ดูจาก Message ครับ ตัดมาจากภาพด้านบน
      Dosgi.requiredJavaVersion=1.6
    • วิธีที่สอง: Set ค่าใน Eclipse.ini ให้ไปหา JDK ที่เราต้องการครับ กรณีที่เรามีลงไว้หลาย Version เช่น Java 7 กับ 8 ครับ โดยเพิ่มคำสั่ง -vm ที่ล่างสุดของไฟล์ครับ โดยมีรูปแบบคำสั่งเป็น -vm Path ของ javaw.exe ตัวอย่าง เช่น
      -vm C:\Program Files (x86)\Java\jdk1.7.0_75\bin\javaw.exe 

 

[JAVA] A java exception has occurred

หลายครั้งที่เราเอาไฟล์ .jar จากที่อื่นมาใช้ แล้วพบ Error Message นี้

JavaException

ผมขอสรุปวิธีแก้ปัญหาที่เคยใช้ได้ผลดังนี้ครับ (พอดีเห็นโพสของรุ่นน้องเลยคิดว่าเอามาเขียนกองๆไว้ใน Blog ดีกว่า)

  • ตรวจสอบ Version ของ .jar ก่อนเลยครับ ว่ามันสร้างมาจาก Java Version อะไร
  • ตรวจสอบ Version Java ในเครื่องเราครับ ว่าเป็น Version ที่ต่ำกว่า จากข้อที่แล้ว หรือไม่
  • ถ้าใช่
    • Update Java ให้เครื่องเราครับ แต่ถ้า Update ไม่ได้ (จะมีบางกรณีที่เป็นระบบใหญ่ มันจะขอ Update Java ยาก และกลัวผลกระทบกับระบบอื่นๆครับ) เราต้องมาตรวจสอบและว่าเจ้า .jar ของเรา มี required feature พิเศษหรือว่า เช่น Stream API ของ Java 8 เป็นต้น จากนั้น เราไปหา Code มา Bulid .jar เองครับ แต่ถ้าไม่มี Code เนี่ยเราต้องคิดค่อ Vendor ที่ทำ .jar นั้น โดยตรงครับ

[JAVA] Access Modifier ของ Class/Method แต่ละตัวเหมือน หรือต่างกันอย่างไร

Q: public, private, protect ที่เราใช้ใน Class และ Method ต่างๆ มันเหมือน หรือ แตกต่างกันอย่างไร
A: จะแยกตอบที่ละอันตามนี้ เดี๋ยวของเพิ่ม default (เกิดจากการที่เราไมได้กำหนด Access Modifier ให้กับ Class/Method) ลงไปด้วยและกัน
– private >> ใช้ได้เฉพาะ class มันเองเท่านั้น
– protect >> ใช้ได้เฉพาะ Class แม่(Super Class)กับ Class ลูก(Sub Class) ใช้ได้เท่านั้น
– default >> ใช้ได้เฉพาะ Package เดียวกันเท่านั้น
– public >> ใช้ได้หมด 

FizzBuzz Problem without if (ปัจฉิมบท)

จากบทความที่แล้ว แสดงวิธีการเขียน Code กับโจทย์ปัญหา FizzBuzz โดยไม่ใช่ IF กันแล้วนะครับ แต่ผมยังทิ้งท้ายไว้อีกปัญหานึง คือ ถ้ามีเงื่อนไขเพิ่มขึ้นมาหละ โดยให้แสดง WOOF ้เพิ่ม ถ้าตัวเลขนั้นหาร 7 ได้ลงตัว (อ้างอิงจาก WIKI FIZZ BUZZ WOOF ) เราจะมีวิธีการแก้ปัญหาอย่างไรนะครับ โดยผมขอทวนวิธีการที่ใช้แก้ปัญหาใน Blog ตอนที่แล้วก่อนนะครับ

  1. แยกเงื่อนไข แต่ละข้อออกมาเป็น Class ของใครของมันเลย ตาม output ที่ได้ทั้ง 4 แบบ โดยการแตก Class นี้ เราจะใช้ Decision Tree ช่วยนะครับ ดังรูป
    FizzBuzzRelationCodeAndDecisionTree
  2. ลองทำ Decison Tree อีกอันเพื่อหาความลองหาหน่วยย่อยที่สุดของ Class ที่นำมา Reuse ได้ โดยในตัวอย่างนี้จะเป้น Class FizzBuzzRule ที่นำเงื่อนไขของ Class FizzRule และ Class BuzzRule มาใช้งานต่อได้ครับ
  3. จากนั้นนำเงื่อนไข แต่ละอันมาเรียงตามที่ลำดับไว้ใน Decesion Tree ครับ ตามรูปด้านบนครับ
  4. ทำ Unittest เพิ่อทดลองลำดับการทำงานครับ

(more…)

FizzBuzz Problem without if (ปฐมบท)

จากบทความที่แล้ว FizzBuzz Problem  ไปนะครับ ต่อไปผมลอง Refactor Code อีกรอบ โดยมีเงื่อนไขว่าห้ามใช้ IF

ทำไมถึงต้องห้ามใช้ IF

เพราะ การใช้ IF ส่งผลให้เกิดความมักง่ายของ Developer ทำให้เกิดปัญหาในการแก้ไข หรือพัฒนา Module เพิ่มเติม ต้องไปแก้ Code จนเกินความจำเป็น และทำให้เกิด Defect(ฺBug) เพิ่มขึ้นด้วย ซึ่งมีแนวคิดทางวิชาการมาสนันสนุนแนวคิดนี้อย่าง The Open Close Principle(OCP) และ High Coupling & Low Cohesion (สามารถอ่านเพิ่มเติมได้ใน Blog ผมครับ ^__^)

หลังจากรู้ที่มาคร่าวๆแล้ว เรามาลองทำ FizzBuzz โดยไม่ใช้ IF กันนะครับ

(more…)

FizzBuzz Problem

จริงๆจะเขียนมานานและ Solution พร้อม แต่ติดงานที่บริษัทตลอด 55 โดยเรื่องของเรื่อง คือ มีรุ่นน้องวิทย์คอม มศว มาถามเรื่อง FizzBuzz ว่าจะเขียนอย่างไร(จะเขียนในบทความนี้นะครับ) โดยไม่ใช้ if  (ผมเขียนในบทความถัดไปครับ)ในภาษา python ผมก็ได้แนะนำไปเกี่ยวกับการใช้ Recusive Call ในการแก้ปัญหา มาคราวนี้ผมขอมาเรียบเรียงใหม่ในบล๊อกเผื่อมีคนอื่นสนใจ โดยผมใช้ภาษา java ในการแก้ปัญหานะครับ

FizzBuzz คือ อะไร

FizzBuzz ที่ฝึกสมองของเด็กที่ช่วยในการเรีบยนรู้เรื่องการหาร โดยสามารถไปอ่านกฏเพิ่มเติมได้จากใน WIKI: FIZZBUZZ ครับ แต่บทความนี้ผมขอนำกฏของ FizzBuzz มาประยุกต์กับการเขียนโจทย์โปรแกรม โดยกฏอยู่ว่ารับข้อมูล Input มา 1 ตัวเลข

  • ถ้าหาร 3 ลงตัวให้แสดง Fizz
  • ถ้าหาร 5 ลงตัวให้แสดง Buzz
  • ถ้าหาร 15 ลงตัวให้แสดง FizzBuzz
  • ถ้าไม่ใช้ก็ให้ Print ตัวเลข Input ออกมา

โดยในภาษา Java สามารถแก้ด้วย if ง่ายๆก่อนเลย ทุกคนคงเขียน Code ประมานนี้ (เขียนได้หลายแบบครับ ตอนนี้เอาแบบ Basic ก่อน เผื่อคนที่เพิ่งเริ่มศึกษา Java เข้ามาอ่าน)

package testFizzBuzz;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class SimpleFizzBuzz {
	public static void main(String[] args) {
		try
		{
			Scanner sc = new Scanner(System.in);
			System.out.print("Enter a number to test fizzbuzz: ");
			int input = sc.nextInt();
			System.out.println("Result form input number "+ input + " is " + testFizzBuzz(input));
		}
		catch(Exception ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage(), "ERROR", 0);
		}
	}

	private static String testFizzBuzz(int p_Input) {
		if (p_Input % 15 == 0) {
			return "FizzBuzz";
		} else if (p_Input % 3 == 0) {
			return "Fizz";
		} else if (p_Input % 5 == 0) {
			return "Buzz";
		} else {
			return String.valueOf(p_Input);
		}
	}
}

(more…)