servlet - dev.cs.kku.ac.th 1.pdf · servlet จะต้องสืบทอด httpservlet...

Post on 14-Oct-2019

21 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

ธระยทธ ทองเครอ

สาขาวชาวทยาการคอมพวเตอร คณะวทยาศาสตร

มหาวทยาลยขอนแกน

บทท 1

Servlet

การสงค ารองและขอมลไปยง Serverแบบ GET การเรยก URL ผาน Browser เปนการสงค ารอง (request) แบบ GET สามารแนบขอมลตอทาย URL สามารถใชฟอรม HTML ในการสง (submit) ขอมลได โดยไมตองระบ method

ในแทก <form>

แบบ POST สงค ารองผานฟอรม หรอโปรแกรมเทานน ขอมลจะสงแบบเบองหลง โดยจะมองไมเหนบน URL ใชฟอรม HTML ในการสง โดยระบ <form method="post“>

2

การสงขอมลแบบ GETการสงขอมลไปยง server โดยแนบไปกบ URL จะขนตนดวยเครองหมาย ?สามารถก าหนดชอและคาในรปแบบ name=valueคนแตละขอมลดวยเครองหมาย &ขอมลทสงไปยง server เรยกวา Request Parameter

http://www.tjung.com/profileList?major=it&year=2560&section=1

3

ชอ Domain ชอไฟลรบ request parameter

ขอมลแรก

จดเรมตนของ Request Parameter มหลาย parameter ขนดวย &

ขอมลท 2 ขอมลท 3

Servlet

Servlet คอ คลาสในภาษาจาวา ทใชในการรบ request และสง respond บนเครอขายอนเทอรเนตServlet ไมใชภาษา แตเปน Interface มาตรฐานทอยใน Java EE

เพอใหนกพฒนาสามารถสบทอดเพอสรางสวนจดการกบค ารองตางๆบน HTTP Protocol ไดServlet จะไมมเมธอด main เนองจากการท างานอยภายใตการ

ควบคมของ Web Containerตวอยาง Web Container เชน Tomcat, JBoss, WebSphere

4

Servlet แรก

5

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

@WebServlet("/wow")public class Test extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html; charset=utf-8");PrintWriter out = response.getWriter();out.println("<html><body>");out.println("<h1>Hello สวสด</h1>");out.println("</html></body>");

}

}

Servlet จะตองสบทอด HttpServlet เสมอ

Web Container จะเรยกเมธอด doGet( ) อตโนมต เมอม HTTP Request แบบ GET

*ขอสงเกต Servlet เปนคลาสทไมมเมธอด main แตกยงท างานได เพราะ Web Container เปนผเรยกเมธอด doGet( ) ใหอตโนมต

ทดสอบ Servlet

6

ชอ Projectชอ Servlet หรอชอ path ทก าหนดใน @WebServlet("/wow")

การรบขอมลแบบ GET

7

import java.io.*;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;

@WebServlet("/StudentServlet")public class StudentServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("stdName");String age = request.getParameter("age");

response.setContentType("text/html; charset=utf-8");PrintWriter out = response.getWriter();out.println("<html><body>");out.println("Student name: " + name + "<br>");out.println("Age: " + age);out.println("</body></html>");

}

}

รบคาจากฟอรม

สรางผลลพธตอบกลบไปยงBrowser

ผลลพธ

8

กรณไมแนบขอมลไปกบ URL

กรณแนบขอมลไปกบ URL

การใชฟอรม HTML สงขอมล

9

<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body><form action="StudentServlet">

Student name: <input type="text" name="stdName"><br>Age: <input type="text" name="age"><br><input type="submit">

</form></body></html>

กรอกขอมล หลงจากกดปม Submit

ขนตอนการท างานของ Servlet

10

ผใชกรอก URL ของ Servlet บน Browser เพอสงค ารองมายง

Container สราง Object 2 ตว - request (คลาส HttpServletRequest) เกบ

ขอมลตางๆทสงมาจากค ารอง- response (คลาส HttpServletResponse) ใช

ส าหรบบรรจขอความสงกลบ

Container คนหา Servlet ทผใชตองการตาม URL ทรองขอ และสราง Thread ของ Servlet พรอมกบสง object request และ response ไปใหเมธอด service( )

ขนตอนการท างานของ Servlet

11

เมธอด service() เรยกเมธอดตามรปแบบค ารอง- ค ารองแบบ GET จะเรยกเมธอด doGet( ) - ค ารองแบบ POST จะเรยกเมธอด doPost( )

นกพฒนาจะสงผลลพธกลบไปยง client โดยการก าหนดคาตางๆลงในตวแปร response

เมอสง response แลว Container จะก าจด Thread ของ Servlet นน

กจกรรม

จงสราง Servlet ใหมชอ Compute โดยสามารถรบขอมลจาก URL ได 2 คา ไดแก a และ b เพอน าคา a และ b มาหาผลบวก ลบคณ และหาร

12

กจกรรมจงสรางแบบฟอรม HTML ส าหรบสงคา a และ b ไปยง Servlet ในกจกรรมกอน

หนาน

13

กจกรรมจากกจกรรมกอนหนาน จงสราง dropdown เพอใหผใชเลอกได วาตองการค านวณ

ดวยเครองหมายใด

14

HTTP Messages

15

@WebServlet("/Test")

public class Test extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) {

String girlfriend = request.getParameter("girlfriend");

String status = request.getParameter("status");

response.setContentType("text/html; charset=utf-8");

PrintWriter out = response.getWriter();

out.println("<html><body>");

out.println("<h1>Hello " + girlfriend + "</h1>");

out.println("Status:" + status);

out.println("</html></body>");

}

}

Http Request

HeadersGET /FirstProj/Test HTTP/1.1

Host: localhost:8080

Accept: text/html

User-Agent: Chrome/68.0.344

Accept-charset: utf-8

Body

girlfriend=luzy&status=happy

Http Response

HeadersHTTP/1.1 200 OK

server: Apache Tomcat

content-type: text/html; charset=utf-8

Body<html><body>

<h1>Hello lucy</h1>

Status:happy

</html></body>

Servlet

คลาสบรรพบรษของ Servlet

16

public class TestServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) {String age = request.getParameter("age");PrintWriter out = response.getWriter();out.println("<html><body>....</html>");

}

}

คลาสบรรพบรษของ Servletคลาสทเปน Servlet จะตองสบทอดคลาส HttpServlet เพอใหสามารถ Deploy และ

ท างานบน Web Container ได

HttpServletRequest (เปน interface) เกบขอมลค ารองท Browser สงมา นกพฒนาสามารถใชเมธอดตาง ๆ เพอดงขอมลจากค ารองทถกสงมาได เชน URL Parameter, Header, Cookies

HttpServletResponse (เปน interface) ใชเกบขอมลทตองการสงกลบไปยง Browser โดยสามารถเรยกเมธอดทมใหในการก าหนดคาตาง ๆ ทงในสวน header และ bodyของ HTTP Response

17

18

เปน interface ทประกอบดวย 5 methodในวงจรชวตตาง ๆ ของ Servlet

นกพฒนาจะสราง servlet โดยการสบทอดคลาส HttpServlet โดยอาจเขยนบางเมธอดซ ากบเมธอดแม (override) เพอท างานตามทตองการ

เปน abstract class ทมเมธอดจดการเกยวกบโปรโตคอล HTTP โดยมเมธอด service ท าหนาทตดสนใจเรยกเมธอด doGet( ) เมอมค ารองแบบ GET และ doPost( ) เมอมค ารองแบบโพส

เปน abstract class ทม implement เมธอดบางเมธอด จาก Servlet interface นกพฒนาจะไมสรางคลาสเพอสบทอดคลาสน

การสบทอดคลาส Servlet

กจกรรมจงสรางแบบฟอรมส าหรบใส username และ password เมอกดปม Sign In แลวจะสง

ขอมลให Servletสราง Servlet รบขอมลจากฟอรมแบบ Post ดวยเมธอด doPost( ) และตรวจสอบ

เงอนไข ก าหนดให username มคาเปน “bobby” และ password มคาเปน “1234” หมายถงการเขาสระบบส าเรจ โดยแสดงขอความและสตามตวอยาง

19

ผลลพธจาก Servlet

กรณเขาสระบบไมไดกรณเขาสระบบได

ผลลพธ

การใช Postman ทดสอบสง request

20

1. เลอก method ในการสง 2. ระบ URL

3. ก าหนดขอมลทจะสง request- เลอก x-www-form-urlencoded- ก าหนดชอและคา parameter ทจะสง

4. เรมสง request

5. ดขอความ response

กจกรรมสราง Servlet ใหมทสามารถรบ URL Parameter ชอ nickname ได โดยมการ

override เมธอด 2 เมธอด ดงน doGet( ) ให response ขอความ

"Hello " + คาในตวแปร nickname ทสงมา + " from doGet()"

doPost( )ให response ขอความ

"Hello " + คาในตวแปร nickname ทสงมา + " from doPost()"

ทดสอบ Servlet ทสรางขน โดยใชโปรแกรม Postman หรอสรางแบบฟอรม HTML ส าหรบทดสอบสง request ไปยง servlet

21

การใช method service( ) เมธอด service เปนเมธอดแรกทท างานเมอรบ request โดยจะเปนผเลอกวาจะเรยก

เมธอด doGet( ) หรอ doPost( ) หากนกพฒนา override เมธอดนใน Servlet เมอม request ในรปแบบใดกตามจะ

ท างาน ท าให doGet( ) หรอ doPost( ) ไมท างาน

22

กจกรรมจาก Servlet ในกจกรรมกอนหนาน ใหสรางเมธอด service( ) เพมเตม โดยให

response ขอความ

"Hello " + คาในตวแปร nickname ทสงมา + " from service()"

ทดสอบ Servlet ทสรางขน โดยใชโปรแกรม Postman หรอสรางแบบฟอรม HTML ส าหรบทดสอบสง request ไปยง servlet

23

เปรยบเทยบวธการสงขอมล

แบบ GET แบบ POSTสงขอมลผาน URL ขนตนดวย ? และสงคของชอตวแปร=คา คนแตละคดวย &

สงขอมลแบบเบองหลงใช HTML form ในการสง

หากฟอรมไมระบวาเปน method="?" ในแทก<form> จะสงแบบ GET เปนคา default

หากตองการสงแบบ POST ตองระบ attribute method="post" ในแทก <form>

ผใชสามารถเหนขอมลบน URL ของเบราวเซอรได

ผใชไมสามารถมองเหนขอมลบน URL ของเบราวเซอรได

สามารถเกบ Bookmark ไวได และสงขอมลไดอกเพยงเรยก URL เดม

ไมสามารถเกบ Bookmark ไวได การสงขอมลซ าตองกรอกขอมลใหม

จ ากดขนาดขอมลท 2000 อกขระ ไมจ ากดขนาดขอมล ใชในการ upload ไฟลได

24

การใชลป for ในภาษาจาวา

25

for (ประกาศตวแปรพกคา: ตวแปรอารเรย) { ....

}

for (ตวแปรเกบต าแหนง; เงอนไข; เพม/ลบตวแปรเงอนไข) { ....

}

String colorArray[] = {"red", "blue", "green", "black"};

for (int i=0; i<colorArray.length; i++) {System.out.println(colorArray[i]);

}

for (String color: colorArray) {System.out.println(color);

} output

แบบท 1

แบบท 2

การรบขอมลแบบหลายคาคลาส HttpServletRequest มเมธอด

String[] getParameterValues(String name)

ใชในการรบคาจาก input ทสามารถเลอกไดหลายคา เชน Check Box หรอ List แบบ Multiple

26

27

<html><body><form method="POST" action="SelectBeer">Select beer characteristics<br>Brand:<br><select name="brand" multiple>

<option value="Chang">Chang</option><option value="Leo">Leo</option><option value="Asahi">Asahi</option><option value="Carlsberg">Carlsberg</option>

</select><br>Can Sizes:<br><input type="checkbox" name="sizes" value="12">12 oz.<br><input type="checkbox" name="sizes" value="16">16 oz.<br><input type="checkbox" name="sizes" value="22">22 oz.<br><input type="SUBMIT"></form></body></html>

protected void doGet(...) {String brand[] = request.getParameterValues("brand");String sizes[] = request.getParameterValues("sizes");

PrintWriter out = response.getWriter();for(int x=0; x<brand.length ; x++)out.println("<br>brand: " + brand[x]);

for(int x=0; x<sizes.length ; x++)out.println("<br>sizes: " + sizes[x]);

}

HTML form

Servlet class

top related