Tomcat8 and Java Servlet : Method of RequestDispatcher

Tawan_Ait
4 min readMar 28, 2020

--

เราจะทำหน้า login โดยการใช้ Method forward() และ include() ของ RequestDispatcher Interface เพื่อบอกให้ไปหน้าใหม่ หรือ ให้อยู่ที่เดิม และกรอกใหม่ ด้วย Method ทั้งสองนี้

ความเดิมก่อนหน้า ที่ต้องดู

จากตอนที่แล้วที่ได้เตรียมเครื่องมือ และทดลอง Start แล้ว พอมาตอนนี้เราจะทำ หน้า Login และเช็คว่าตรงไหม ตรงไปไหน ไม่ตรงไปไหน

เปิดโปรเจ็กต์ขึ้นมาเลย เอาตัวเดิมนั้นแหล่ะ

เริ่มต้นสร้างหน้า Login ตั้งชื่อไฟล์ว่า login.jsp โดยคลิกขวาที่ webapp >New > File > login.jsp > กด Enter

ข้างในไฟล์ login.jsp ให้ออกแบบหน้า login ที่มีให้กรอก Username Password และปุ่ม

จากนั้นสร้าง Directory ชื่อ java (ถ้ามีแนะนำให้เลือกตัวนั้น)โดยการคลิกขวาที่ main > New > Directory > java > กด Enter

แล้วสร้าง package มาตัวหนึ่ง ชื่อ com.easyjung โดยการ คลิกขวาที่ java > New > Package > com.easyjung > กด Enter

ต่อมา จะสร้าง Class ชื่อ Loging โดยการ คลิกขวาที่ com.easyjung > New > Java Class > Login > Enter

ภายใน Class Login จะมีการสืบทอด extends HttpServlet และโค้ดจะประมาณนี้ก่อนอื่นต้อง import ตัวนี้มาก่อน

import javax.servlet.http.HttpServlet;

แล้วค่อยทำการสืบทอด extends HttpServlet

จากนั้นพิมพ์ doget และเลือกที่ขึ้นมาแล้ว Enter เลย

จากนั้นเราจะได้แบบนี้ ลบ super.doGet(req, resp); เพราะเราไม่ได้ทำถึงขั้นนั้น

ประกาศตัวแปร ชนิดเป็น String เพื่อที่จะส่ง username กับ password มาแสดงให้เราเมื่อส่งปริ้น logs มาดู และอีกอย่าง จะเอามาไว้ตรวจสอบว่าตรงกันไหม เราสามารถเปิด logs มาดูได้ด้วยน่ะ

เมื่อเราได้สร้าง class ไปแล้ว ให้ไปที่ไฟล์ web.xml เราจะทำการ Mapping Class LoginServlet กับ login.jsp เข้าด้วยกันเพื่อให้ทั้งสองได้สื่อสารกันได้ ข้างล่างนี้เป็นตัวอย่างที่เป็นไว้ทำ Mapping (Tag <servlet>…</servlet> และ <servlet-mapping>…</servlet-mapping> จะต้องอยู่ใน Tag <web-app>)

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.easyjung.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>

หมายเหตุการ Mapping

ต่อมาจะทำการตรวจสอบ username และ password ว่าตรงกับที่กำหนดไว้ไหม ถ้าตรงจะให้ไปที่ home (HomeServlet) ด้วยการใช้งาน Method forward()

เสร็จแล้วลองทำ package ดูน่ะ การ Package ได้บอกวิธีไว้ก่อนหน้าแล้ว อย่าลืมสั่ง Start TomCat ด้วยเน้อ

เมื่อเรา package application จะได้ MyWebApp.war เราจะนำ .war นี้ไป Deploy บน Tomcat ด้วยการ Copy .war นี้ ไปวางไว้ใน Folder ชื่อ webapps หลังจากนั้น Tomcat ก็จะอ่าน Folder MyWebApp.war แต่ๆ ผลที่ได้ คือเรา login สำเร็จ เขาหา /home ไม่เจอ เลยได้แบบนี้มา

ต่อมาเราจะมาสร้าง /home กัน ชื่อว่า HomeServlet เป็น Servlet ตัวหนึ่ง โดยการไปคลิกขวาที่ com.easyjung> New > Java Class > HomeServlet> กด Enter

ภายใน Class HomeServlet ก็จะเขียนประมาณนี้ เริ่มต้นสืบทอดก่อน ด้วย extends HttpServlet พร้อมกับพิมพ์ doget ลบ super.doGet(req, resp); ออกให้เรียบร้อย คือจะให้ PrintWriter ข้อความออกไปว่า Welcome To MyHome ที่หน้าจอ

ต่อไปทำการ Mapping /home โดยการไปที่ไฟล์ web.xml ทำเหมือนกับการ Mapping login โค้ดประมาณนี้ เสร็จแล้วลองทำ package ดูเน้อ

ผลที่ได้ เมื่อ Login สำเร็จ จะได้ข้อความนี้ออกมา

แล้วกรณีเรา Login ไม่สำเร็จล่ะ กำหนดให้ต้องกรอก Username and Password ใหม่ จะให้เงื่อนไขต่อจาก if เป็น else ต่อท้าย คือถ้าไม่ตรงกับ if ก็มาทำงานที่ else แทนนั้นเอง

เราตรงไปที่ Class LoginServlet กันเลย กรอกโค้ดประมาณนี้ ก็จะปริ้นข้อความว่า Try Again และให้กรอกใหม่ ด้วยการใช้งาน Method include()

เมื่อโค้ดเสร็จ มาทำ package เสร็จจะได้แบบนี้ แต่ๆๆ แต่ทำไมไม่เห็นช่องให้ loginใหม่ เราต้องกลับไปเพิ่มโค้ดอีก

เรากลับไปที่ Class LoginServlet อีกทีแล้วเพิ่มโค้ดนี้เข้าไป เราจะกำหนดชนิดที่ให้แสดงเป็น text/html และๆ ลบ comment ออกไปด้วยน่ะ

resp.setContentType("text/html");

แล้วทำลอง package อีกรอบ เราจะได้หน้าให้ login พร้อมบอกเราให้ Try Again เมื่อเรา Login ไม่สำเร็จ

ถ้าเรา Login สำเร็จ จะได้หน้านี้มา

OKey

เอาไว้เท่านี้ นอนแล้วววว การทำ login โดยใช้ Method forward() และ Meyhod include() ของ RequestDispatcher Interface ขอบคุณครูของฉัน

--

--

No responses yet