การสร้างโปรแกรมใน Java สำหรับความช่วยเหลือของ Servlets จาวา. โปรโตคอล HTTP และเซิร์ฟเล็ต Web Java และคอนเทนเนอร์เว็บ

โกลอฟนา / ฟังก์ชั่นเพิ่มเติม

เซิร์ฟเล็ตคืออะไร? เซิร์ฟเล็ต เซิร์ฟเวอร์ โมดูลสำหรับประมวลผลคำขอ HTTP และ FTP การเรียกพอร์ทัล (เว็บเกต)

พื้นฐานของพอร์ทัลเหล่านี้คือเว็บเซิร์ฟเวอร์ที่ทรงพลัง - โปรแกรมที่ลองใช้ซ็อกเก็ตเซิร์ฟเวอร์และรับและส่งข้อมูล ส่วนใหญ่ เพื่อประโยชน์ของความเร็ว เซิร์ฟเวอร์ไม่ได้เขียนในภาษา Java แต่เป็นการเขียนโปรแกรมของฉันเอง (เช่น ใน C ++)

ลิงค์ไปยังเซิร์ฟเวอร์ขึ้นอยู่กับเซิร์ฟเล็ตพื้นฐาน เซิร์ฟเวอร์ข้อมูลได้รับการจัดการโดยเซิร์ฟเวอร์ข้อมูล และในทำนองเดียวกัน จะพิจารณาว่าข้อมูลนั้นได้รับการจัดการโดยไคลเอ็นต์ อันที่จริง เซิร์ฟเล็ตพื้นฐานคือ "สมอง" ของเซิร์ฟเวอร์ หน้าที่หลักของเซิร์ฟเล็ตนี้คือการอ่านคำขอของลูกค้า ถอดรหัส ถอดรหัส ส่งผ่านไปยังหุ่นยนต์เซิร์ฟเล็ต ซึ่งขอข้อมูลประเภทใด ที่สำคัญที่สุด เพื่อประโยชน์ในการเข้าถึง เซิร์ฟเวอร์จะเล่นบทบาทของเซิร์ฟเล็ตพื้นฐาน ตัวอย่างเช่น Jacarta Tomcat อยู่เบื้องหลังโครงการดังกล่าว

ไดอะแกรมขนาดเล็กแสดงการส่งคำขอ (คำขอ) และการตอบกลับ (การตอบกลับ) ระหว่างเซิร์ฟเวอร์และเซิร์ฟเล็ต โครงการเฉียฉันเป็นตัวแทนของงานของเซิร์ฟเวอร์ HTTP ซึ่งอาจมีหน้า JSP และสองทรัพยากร "/sample1" และ "/sample2" สำหรับการประมวลผลของสองเซิร์ฟเล็ต - "Sample1 Servlet" และ "Sample2 Servlet" สามารถมองเห็นได้

Rozberemo pokrokovo ที่วาดภาพเด็กน้อย:

  1. ลูกค้ามาที่เซิร์ฟเวอร์
  2. เซิร์ฟเวอร์ส่งคำขอไปยังเซิร์ฟเล็ตพื้นฐาน ("เซิร์ฟเล็ตพื้นฐาน")
  3. เซิร์ฟเล็ตพื้นฐานทำให้ URI ถูกริบไปยังทรัพยากร
    • หาก URI ระบุ "/sample1" ระบบจะถาม มากกว่า(ไม่มีการเปลี่ยนแปลง) ถูกส่งไปยังเซิร์ฟเล็ต "Sample1 Servlet" ซึ่งส่งและประมวลผลตามคำขอ
    • หาก URI ชี้ไปที่ "/sample2" เซิร์ฟเวอร์จะส่งคำขอไปยังเซิร์ฟเล็ต "Sample2 Servlet"
    • ในกรณีอื่นๆ คำขอจะถูกส่งไปยังโมดูล "JSP Servlet"
  4. เซิร์ฟเล็ตที่ควบคุมถูกถ่ายโอน ประมวลผลข้อมูล สร้างการตอบสนอง (ตอบกลับ) หลังจากนั้นการตอบสนองจะถูกบังคับกลับไปที่เซิร์ฟเล็ตพื้นฐาน
  5. เซิร์ฟเล็ตฐาน อย่าประมวลผลข้อมูลกลับ ส่งกลับไปที่เซิร์ฟเวอร์ทันที
  6. เซิร์ฟเวอร์เห็นข้อมูลไปยังไคลเอนต์

ด้วยวิธีนี้ เป็นไปได้ที่จะแก้ปัญหาการประมวลผลคำขอในส่วนตรรกะ สำหรับสกินที่จำเป็นต้องจัดเตรียมโมดูลของตัวเอง นั่นคือ "รหัสโปรแกรม" ของตัวเอง อันที่จริงขั้นตอนของการชำระเงินนั้นสามารถมั่งคั่งขึ้นได้ ตัวอย่างเช่น สำหรับวิธี "GET" และ "POST" สามารถจับคู่โมดูลต่างๆ ได้

อินเตอร์เฟสเซิร์ฟเล็ต

รวมโมดูลเหล่านี้ทั้งหมดที่มีกลิ่นเหม็นอยู่รวมกันเพื่อช่วย javax.servlet.Servlet interface

ลองดูที่อินเทอร์เฟซนี้ ใหม่มีทั้งหมด 5 วิธี:

init โมฆะสาธารณะ (การกำหนดค่า ServletConfig) พ่น ServletException วิธีการนี้ถูกเรียกใช้เพื่อแจ้งเซิร์ฟเล็ตเกี่ยวกับสิ่งที่รวมอยู่ในโมดูลบริการคำขอของไคลเอ็นต์ พารามิเตอร์ config ขยายอินเตอร์เฟส javax.servlet.ServletConfig ซึ่งมีข้อมูลเกี่ยวกับเซิร์ฟเวอร์ ชื่อของเซิร์ฟเล็ต พารามิเตอร์พื้นฐาน และสินค้าอื่นๆ อินเตอร์เฟส javax.servlet.ServletConfig จะถูกกล่าวถึงเพิ่มเติมเล็กน้อย ผ่านไปแล้วหลังจากการเรียกใช้ฟังก์ชัน servlet จะบันทึกการกำหนดค่าในตัวเองอย่างระมัดระวังในการเปลี่ยนแปลงและดูเพื่อขอความช่วยเหลือจากวิธีการอื่น: การสร้าง ServletConfig สาธารณะ getServletConfig() ข้อมูลอื่น ๆ เกี่ยวกับ servlet ที่สามารถเข้าถึงได้โดย สตริงสาธารณะ getServletInfo() โทร

ในการประมวลผลคำขอและรับผลลัพธ์ของการประมวลผลฟังก์ชัน

บริการโมฆะสาธารณะ (คำขอ ServletRequest การตอบสนอง ServletResponse) พ่น ServletException, java.io.IOException ในฟังก์ชันนี้ เครื่องมือสองชิ้นจะถูกส่งไปยังโค้ดเพื่อประมวลผลข้อมูล: อันหนึ่งใช้สำหรับดึงเซิร์ฟเวอร์ประเภทนี้ อีกอันใช้สำหรับแก้ไข ผลลัพธ์ของหุ่นยนต์เซิร์ฟเล็ต ดูเหมือนว่าพารามิเตอร์คำขอและการตอบสนองจะแยกอินเทอร์เฟซ javax.servlet.ServletRequest และ javax.servlet.ServletResponse

หลังจากที่เซิร์ฟเวอร์หยุดใช้โมดูล เมธอดจะถูกเรียกใช้

โมฆะสาธารณะ destroy() ซึ่งสิ้นสุดการดำเนินการทั้งหมดบนวัตถุเซิร์ฟเล็ต

ServletConfig อินเตอร์เฟส

4 เมธอดซึ่งมีชื่อพูดสำหรับตัวเอง สร้างแก่นแท้ของอินเทอร์เฟซ javax.servlet.ServletConfig:

สตริงสาธารณะ getServletName() ServletContext สาธารณะ getServletContext() สตริงสาธารณะ getInitParameter(ชื่อสตริง) java.util.Enumeration getInitParameterNames()

ฉันคิดว่าการรู้จำหน้าที่ทั้งหมดนั้นสมเหตุสมผล krim

Public ServletContext getServletContext() เมธอดนี้เปิดเครื่องมือหลักเดียวกันสำหรับการทำงานกับเซิร์ฟเวอร์:

ServletContext อินเตอร์เฟส

ServletContext - อินเทอร์เฟซที่ให้การเข้าถึงฟังก์ชันหลักถัดไป:

วัตถุสาธารณะ getAttribute (ชื่อสตริง) java.util.Enumeration getAttributeNames สาธารณะ () โมฆะสาธารณะ setAttribute (ชื่อสตริง วัตถุวัตถุ) โมฆะสาธารณะ removeAttribute (ชื่อสตริง) วิธี Chotiri สำหรับการทำงานกับแอตทริบิวต์ บทบาทของแอตทริบิวต์vikonuєไม่ว่าจะมีวัตถุของคลาสใด ๆ เมตาของฟังก์ชันเหล่านี้คือการข้ามระหว่างเซิร์ฟเล็ตที่ไม่มีผลผูกพันของอ็อบเจ็กต์ต่างๆ สตริงสาธารณะ getInitParameter(ชื่อสตริง) java.util.Enumeration getInitParameterNames() การเข้าถึงพารามิเตอร์ต่างๆ เช่น การเริ่มต้นเซิร์ฟเวอร์ คุณสามารถค้นหาชื่อโฮสต์ พอร์ต และหมายเลขพอร์ตอื่นๆ ได้ที่นี่ int สาธารณะ getMajorVersion() int สาธารณะ getMinorVersion() ตรวจสอบเวอร์ชันของ Servlet API สตริงสาธารณะ getMimeType (ไฟล์สตริง) ส่งคืนประเภทการเชื่อมโยง MIME ของไฟล์ ไปยังประเภทที่ระบุในไฟล์ที่เปลี่ยนแปลง เดาว่ามันเกิดขึ้นได้อย่างไรเพื่อรับ MIME จากโปรแกรม SimpleWEBServer และประเมินประสิทธิภาพ! java.util.Set getResourcePaths() สาธารณะ java.net.URL getResource (เส้นทางสตริง) พ่น java.net.MalformedURLException สาธารณะ InputStream getResourceAsStream (เส้นทางสตริง) เปลี่ยนเส้นทางไปยังทรัพยากรที่มีอยู่สำหรับเซิร์ฟเวอร์และทรัพยากรเองให้ดูเหมือน URL และมีลักษณะ เหมือนกระแสข้อมูล RequestDispatcher สาธารณะ getRequestDispatcher (เส้นทาง) RequestDispatcher สาธารณะ getNamedDispatcher (ชื่อ) RequestDispatcher เป็นเครื่องมือสำหรับการขอทรัพยากรอื่น จำเป็นต้องใช้ฟังก์ชันเหล่านี้ในการเลือกออบเจ็กต์ของเครื่องมือสำหรับทรัพยากรเหล่านี้ สมมติว่าหากต้องการเปลี่ยนเส้นทางคำขอไปยังเซิร์ฟเล็ต "sample1" จากเนื้อหาของเซิร์ฟเล็ต คุณสามารถทำได้: getServletConfig().getServletContext().getNamedDispatcher("sample1").forward(request, response);

โดยทั่วไป คลาส RequestDispatcher มีเพียงสองเมธอด:

โมฆะสาธารณะไปข้างหน้า (คำขอ ServletRequest การตอบสนอง ServletResponse) พ่น ServletException, java.io.IOException โมฆะสาธารณะรวมถึง (คำขอ ServletRequest การตอบสนอง ServletResponse) พ่น ServletException, java.io.IOException ตัวอย่างเช่น เซิร์ฟเล็ต 1 มีอีกคำหนึ่งว่า "ทดสอบ 1" จากนั้นจะเรียกรวมสำหรับเซิร์ฟเล็ตสอง ซึ่งมีอีกคำหนึ่งว่า "ทดสอบ 2" Servlet 2 ใช้คำว่า "และ" ผลลัพธ์ของเซิร์ฟเล็ตหุ่นยนต์ 1 คือแถว "การทดสอบ 1 และการทดสอบ 2" บันทึกโมฆะสาธารณะ (ข้อความสตริง) เขียนไปยังบันทึกของเซิร์ฟเวอร์ บันทึกโมฆะสาธารณะ (ข้อความสตริง โยนทิ้งได้) ระบุผู้กระทำผิดและวลีที่จะเขียนลงในบันทึกหลังจากลบการโยน สตริงสาธารณะ getRealPath (เส้นทางสตริง) แปลประเภทพาธ "/index.html" เป็น "http://host/contextPath/index.html" สตริงสาธารณะ getServerInfo() ส่งคืนชื่อเซิร์ฟเวอร์ ServletContext สาธารณะ getContext(String uripath) วิธีนี้ช่วยให้ ServletContext สามารถแลกเปลี่ยนระหว่างทรัพยากรต่างๆ ของเซิร์ฟเวอร์เดียวกันได้ สตริงสาธารณะ getServletContextName() เปลี่ยนชื่อเซิร์ฟเล็ตซึ่งเป็นอ็อบเจ็กต์ที่เป็นของอินเตอร์เฟส ServletContect

ServletRequest อินเทอร์เฟซ

อินเทอร์เฟซ ServletRequest เป็นเครื่องมือสำหรับการดึงพารามิเตอร์จากคำขอ HTTP อินเทอร์เฟซนี้อาจมีวิธีการที่เหมือนกับชื่อที่กำหนดให้กับ ServletContext:

วัตถุสาธารณะ getAttribute (ชื่อสตริง) java.util.Enumeration getAttributeNames สาธารณะ () โมฆะสาธารณะ setAttribute (ชื่อสตริง วัตถุ o) โมฆะสาธารณะ removeAttribute (java.lang.String ชื่อ) สตริงสาธารณะ getServerName () สาธารณะ RequestDispatcher getRequest

เมธอดที่ถูกละไว้ ช่วยให้คุณสามารถประมวลผลคำขอส่วนหัว HTTP ได้อย่างง่ายดาย:

สตริงสาธารณะ getCharacterEncoding() โมฆะสาธารณะ setCharacterEncoding (String env) java.io.UnsupportedEncodingException การทำงานกับการเข้ารหัสอักขระบนฟิลด์ส่วนหัว HTTP ฟังก์ชันกำหนดวิธีการถอดรหัสอินพุต CGI จากรูปแบบ %NN ของอักขระหลัก ตัวอย่างเช่น มาตรฐานบางอย่างคือ KOI8-R, windows-1251 หรือ UTF-8 จำเป็นสำหรับการถอดรหัสอักขระซิริลลิก int สาธารณะ getContentLength() public String getContentType() อ่านฟิลด์ "Content-Length", "Content-Type" จากคำขอ HTTP jString สาธารณะ getParameter(ชื่อสตริง) java.util.Enumeration สาธารณะ getParameterNames() สตริงสาธารณะ getParameterValues(ชื่อสตริง) java.util.Map สาธารณะ getParameterMap() ฟังก์ชันเพื่อดึงฟิลด์ส่วนหัว HTTP จากค่านั้น ServletInputStream สาธารณะ getInputStream () พ่น java.io.IOException สาธารณะ java.io.BufferedReader getReader () พ่น java.io.IOException Reader zastosovuetsya สำหรับการอ่าน ข้อมูลข้อความ- vin จะถอดรหัสแถวโดยอัตโนมัติในลักษณะเดียวกับชุดอักขระที่ระบุ เคารพ! J2EE เวอร์ชัน 1.3 มีข้อบกพร่อง: เมื่อถอดรหัสอักขระ %25 (อักขระ % ในคำขอโพสต์และรับ) Reader จะเห็นการอภัยโทษ (ข้อบกพร่องของโน้ตบนเซิร์ฟเวอร์ Tomcat 4 และ Resign) เป็นไปได้ว่าจุดบกพร่องที่คล้ายกันสามารถใช้กับสัญลักษณ์อื่นได้ สตริงสาธารณะ getProtocol() รับเวอร์ชัน HTTP ของโปรโตคอลสำหรับคำขอ (เช่น "HTTP/1.1") สตริงสาธารณะ getScheme() เปิดใช้ชื่อสคีมา ตัวอย่างเช่น "http", "https" หรือ "ftp" int สาธารณะ getServerPort() สตริงสาธารณะ getRemoteAddr() สตริงสาธารณะ getRemoteHost() บูลีนสาธารณะ isSecure() พอร์ตเซิร์ฟเวอร์ ที่อยู่ IP ของไคลเอ็นต์ ชื่อโฮสต์ไคลเอ็นต์ และจำนวนความลับ (ผ่านโปรโตคอล HTTPS) java.util.Locale สาธารณะ getLo java.util .Enumeration getLocales() การแปลเอกสารที่ลูกค้าคาดว่าจะยอมรับ (ผลลัพธ์ของการประมวลผลฟิลด์ "Accept-Language")

อินเตอร์เฟส ServletResponse

อินเทอร์เฟซ ServletResponse เป็นเครื่องมือที่ดีที่สุดสำหรับการบังคับใช้ข้อมูลสำหรับลูกค้า วิธีการที่เป็นประโยชน์ เครื่องมือนี้ให้บริการตามวัตถุประสงค์ของฉันเอง:

java.lang.String สาธารณะ getCharacterEncoding() โมฆะสาธารณะ setLocale(java.util.Locale loc) java.util.Locale getLocale() สาธารณะ วิธีแรกคือการแปลงประเภทการเข้ารหัส MIME (เช่น UTF8) เพื่อให้แสดงข้อมูล อีกสองวิธียังทำงานจากชุดอักขระ กลิ่นเหม็นพูดถึงภาษาซึ่งเขียนในเอกสาร (เช่นรัสเซีย) ServletOutputStream สาธารณะ getOutputStream() พ่น java.io.IOException เปิดสตรีมเอาต์พุตสำหรับเซิร์ฟเล็ต Tsey potik vikoristovuetsya ตัวอย่างเช่นสำหรับการเห็น ไฟล์ไบนารี. ข้อมูลข้อความสามารถแสดงได้ด้วยความช่วยเหลือของ java.io.Writer: public java.io.PrintWriter getWriter () พ่น java.io.IOException วิธีนี้จะแปลงแถวเป็นชุดอักขระที่ระบุโดยเมธอด getCharacterEncoding() และ getLocale() โดยอัตโนมัติ โมฆะสาธารณะ setContentLength(int len) เมธอดนี้ตั้งค่าของฟิลด์ส่วนหัว HTTP "ความยาวเนื้อหา" เมธอด setContentType (ประเภทสตริง) โมฆะสาธารณะสำหรับการแทนที่ประเภท MIME ในเอกสาร ฟิลด์ส่วนหัว HTTP "ประเภทเนื้อหา" โมฆะสาธารณะ setBufferSize(ขนาด int) สาธารณะ int getBufferSize() โมฆะสาธารณะ flushBuffer() พ่น java.io.IOException โมฆะสาธารณะ resetBuffer() ตรงที่ข้อมูลกำลังถูกบัฟเฟอร์ ซึ่งหมายความว่าไคลเอ็นต์จะเห็นส่วนถัดไปของข้อมูลเหล่านี้หลังจากเติมบัฟเฟอร์แล้วเท่านั้น เมธอดที่กำหนดอนุญาตให้ตั้งค่าขนาดบัฟเฟอร์การแก้ไข ลบบัฟเฟอร์การแก้ไข เริ่มต้นการแก้ไขไปยังบัฟเฟอร์ไคลเอ็นต์โดยไม่ต้องตรวจสอบบัฟเฟอร์ข้อมูล และล้างบัฟเฟอร์ข้อมูลด้วย isCommitted() บูลีนสาธารณะ สามารถใช้วิธีนี้เพื่อดึงธงซึ่งได้ส่งไปยังไคลเอนต์แล้ว ค่าสถานะจะเป็นค่าบวก เนื่องจากได้ส่งส่วนหัว HTTP แล้ว รีเซ็ตโมฆะสาธารณะ () แม้ว่าส่วนหัว HTTP จะยังไม่อยู่ในการควบคุม แต่วิธีนี้ "รีเซ็ต" ส่วนหัว HTTP เป็นค่า "ปิด"

ประเภทเซิร์ฟเล็ต

Java Servlet API ซึ่งเป็นอินเทอร์เฟซที่ทรงพลังที่สุดในโลก ยังรวมถึงคลาสเซิร์ฟเล็ตสองสามคลาสที่สามารถเป็นพื้นฐานสำหรับโปรแกรมของคุณ

พื้นฐานสำหรับคลาสเหล่านี้คือคลาสนามธรรม javax.servlet.GenericServlet:

คลาสนามธรรมสาธารณะ GenericServlet ใช้ Servlet, ServletConfig, java.io.Serializable

ดังที่เห็นได้จากคลาสที่กำหนด สามารถใช้เมธอดทั้งหมดของ Servlet และ ServletConfig ได้ ไม่ได้ดำเนินการโดยวิธีการ

บริการโมฆะนามธรรมสาธารณะ (คำขอ ServletRequest, ServletResponse res) พ่น ServletException, java.io.IOException แล้วแต่จำนวนใดจะเป็นนามธรรม

บนพื้นฐานของคลาสนี้ มีการสร้างคลาสนามธรรมอีกคลาส - javax.servlet.http.HttpServlet:

คลาสนามธรรมสาธารณะ HttpServlet ขยาย GenericServlet ใช้งาน java.io.Serializable

คลาสนี้สร้างขึ้นในแนวความคิดที่ว่า "มีประสิทธิภาพมากขึ้นสำหรับโปรแกรมเมอร์" และวิธีการต่างๆ มากมาย:

ป้องกันโมฆะ doDelete (คำขอ HttpServletRequest, ตอบกลับ HttpServletResponse) พ่น ServletException, java.io.IOException ป้องกันโมฆะ doGet (คำขอ HttpServletRequest, HttpServletResponse resp) ServiceException, ข้อยกเว้น, ข้อยกเว้น java.io.IOException ป้องกันบริการโมฆะ , HttpServletRequest , ServletR esponse res) พ่น ServletException, java.io.IOException บริการที่แตกต่างกัน (คำขอ ServletRequest, ServletResponse res) สำหรับวิธี HTTP DELETE และ GET ที่แตกต่างกันไปยัง PUT และ TRACE และเพื่อรับข้อมูลด้วยตนเองผ่านอินเทอร์เฟซ CGI โดยไม่ต้องถอดรหัส ส่วนหัวของการสร้างคลาส HttpServletRequest และ HttpServletResponse ซึ่งรวมอยู่ในแพ็คเกจ HttpServlet ในแพ็คเกจ javax.servlet.http ที่ได้รับการป้องกันแบบยาว getLastModified (คำขอ HttpServletRequest) เมธอดนี้จะเปลี่ยนค่าชั่วโมงต่อชั่วโมง vin ใช้จากฟิลด์ "Date" HTTP สำหรับ ถามหัวหน้า หากช่องไม่แสดง ให้เปลี่ยน -1

เป็นไปได้ที่จะแยกวิเคราะห์อินเทอร์เฟซ HttpServletRequest และ HttpServletResponse กลิ่นเหม็นเป็นข้อเสียของ ServletRequest และ ServletResponse

วิธี HttpServletRequest creme ซึ่งปฏิเสธประเภท ServletRequest อาจเป็นวิธีการที่คล้ายกัน:

คุกกี้ getCookies() ส่งกลับชุดของคุกกี้ที่ลูกค้าส่งไปยังเซิร์ฟเวอร์

คลาส Cookie ซึ่งอยู่ในแพ็คเกจ javax.servlet.http เดียวกัน สามารถมีข้อมูลทั้งหมดเกี่ยวกับคุกกี้ วิธีการที่สำคัญที่สุดของคลาสนี้

Int getMaxAge() String getName() String getValue() เห็นได้ชัดว่าคุกกี้เสียชีวิตกี่ครั้ง คุกกี้นั้นมีค่านั้น คุกกี้ (ชื่อสตริง ค่าสตริง) เป็นโมฆะ setValue (สตริง newValue) เป็นโมฆะ setMaxAge (หมดอายุ int) เพื่อตั้งค่าคุกกี้ ตั้งค่าอายุสูงสุด long getDateHeader(ชื่อสตริง) ส่งคืนวันที่จากส่วนหัว HTTP ดังนั้นมันจึงเป็นเช่นนั้น int getIntHeader(java.lang.String name) ส่งกลับค่าตัวเลขของฟิลด์ที่ชื่อ name จาก HTTP request header String getMethod() ส่งกลับวิธีการร้องขอ HTTP String getQueryString() String getRequestURI() StringBuffer getRequestURL() ส่งกลับสตริงที่จะพบใน URL ของเอกสารหลังอักขระ "?", URI ของเอกสารและ URL นั้น HttpSession getSession() HttpSession getSession (การสร้างบูลีน) บูลีน isRequestedSessionIdFromURL() บูลีน isRequestedSessionIdValid() อนุญาตให้ฝึกฝนด้วยกลไกการส่งสัญญาณที่สำคัญที่สุดเช่นเซสชั่น

เซสชั่นมีความจำเป็นเพื่อที่จะดึงข้อมูลที่ได้มาอย่างยากลำบากจากด้านหนึ่งไปอีกด้าน ตัวอย่างเช่น koristuvach ไปที่ด้านข้าง (1) หักข้อมูลสำหรับด้าน (2) และช่วยประหยัดคำพูดสำหรับด้าน (3)

โดยหลักการแล้ว ด้านข้าง (1) คุณสามารถส่งข้อมูลของ koristuvachev จากนั้นถอดออกที่ด้านข้าง (2) เพิ่มเข้าไป ส่ง koristuvachev... ในลักษณะเดียวกัน คุณสามารถค่อยๆ โอนทั้งชุด ของข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์และย้อนกลับ นอกจากนี้ หลายครั้ง นอกจากนี้ สิ่งที่คุณไม่ได้ถูกครอบงำเช่นนั้น มันจะกลืนกินการจราจร

คุณสามารถแก้ไขเป็นอย่างอื่นได้ - เอาชนะกลไกของเซสชัน กลไกของงานนี้มีดังนี้: ข้อมูล, ส่งข้อความ, บันทึกเซิร์ฟเวอร์ในไฟล์ okremu - ไฟล์เซสชัน ในไฟล์นี้ งานทั้งหมดจะดำเนินการเพื่อเปลี่ยนแปลงข้อมูล ลูกค้าสามารถเห็น "คีย์เซสชัน" (ในคีย์เซสชันเดียวกัน ในรหัสเซสชันเดียวกัน) ซึ่งเป็นตัวบ่งชี้เฉพาะสำหรับไฟล์ ซึ่งสามารถแก้แค้นตัวเองสำหรับ koristuvach นี้ได้ ในตอนนี้ เพื่อที่จะรับข้อมูลทั้งหมดจากไคลเอนต์ใด ๆ เซิร์ฟเวอร์จำเป็นต้องรู้รหัสเซสชันเท่านั้น รางวัลนี้คือความแข็งแกร่งและความเร็วของชัยชนะของเขา

Axis และวิธีหลักๆ ทั้งหมดสำหรับอินเทอร์เฟซ HttpServletRequest รายการใหม่ดูเอกสาร Java Servlet API สำหรับวิธีการ

ตอนนี้เกี่ยวกับอินเทอร์เฟซ HttpServletRequest หลักvіdminnіstklаіv, yakіrazdіlyаyat tsey interfes, yоmu, scho vіdіvatsya v_drazu ในขณะเดียวกัน จะพิจารณาการรวบรวมข้อมูลจาก HTTP ทั้งหมด มันจะถูกครอบงำหลังจากเสร็จสิ้นการทำงาน HttpServlet.service() เท่านั้น

ดังนั้นเกี่ยวกับวิธีการ:

เป็นโมฆะ addHeader(ชื่อสตริง ค่าสตริง) โมฆะ addIntHeader (ชื่อสตริง ค่า int) เป็นโมฆะ addDateHeader (ชื่อสตริง วันที่แบบยาว) วิธีการเพิ่มพารามิเตอร์ไปยังส่วนหัว HTTP วิธีที่เหลือตั้งค่าพารามิเตอร์ "วันที่" ถือเป็นโมฆะ addCookie(คุกกี้คุกกี้) วิธีการเพิ่มคุกกี้ในส่วนหัวบูลีนประกอบด้วยส่วนหัว (ชื่อสตริง) ช่วยให้คุณทราบว่าส่วนหัวของพารามิเตอร์ค่าควรเป็นอย่างไร String encodeURL(String url) String encodeRedirectURL(String url) วิธีแรกคือการเข้ารหัสตัวอักษรโดยใช้การแทนที่ %NN อีกวิธีในการปล้นเหมือนกันและคลิก void sendRedirect(ตำแหน่งสตริง) void setStatus(int sc) void sendError(int sc) void sendError(int sc, String msg) วิธีแรกคือการตั้งค่ารหัสเทิร์น อีกสองคือ ส่งการแจ้งเตือนเกี่ยวกับการให้อภัย ในอินเทอร์เฟซ เป็นไปได้ที่จะตั้งค่าตัวแบ่งถัดไปสำหรับพารามิเตอร์ sc ซึ่งตรงกับรหัสการเปิดโปรโตคอล HTTP: (303) SC_NOT_MODIFIED - รหัสสถานะ (401) SC_UN - รหัสสถานะ (404) SC_METHOD_NOT_ALLOWED - รหัสสถานะ (405) SC_NOT_ACCEPTABLE - รหัสสถานะ (406) SC_PROXY_AUTHENTICATION_REQUIRED - รหัสสถานะ (407) SC_REQUEST_TIMEOUT - รหัสสถานะ (408) SC_CONFLICT - สถานะ (409) SC_GONE - รหัสสถานะ (410) SC_LENGTH_REQUIRED - รหัสสถานะ (411) SC_PRECONDITION_FAILED - รหัสสถานะ (412) SC_RETQUE รหัส (413) SC_REQUEST_URI_TOO_LONG - รหัสสถานะ (414) SC_UNSUPPORTED_MEDIA_TYPE - รหัสสถานะ (415) SC_REQUESTED_RANGE_NOT_SATISFIABLE - รหัสสถานะ ( 416) SC_EXPECTATION_FAILED - รหัสสถานะ (417) SC_INTERNAL_SERVER_500 (รหัสสถานะ) ode (501) SC_BAD_GATEWAY - รหัสสถานะ (502) SC_SERVICE_UNAVAILABLE - รหัสสถานะ (503) SC_GATEWAY_TIMEOUT - รหัสสถานะ (504) SC_HTTP_VERSION_NOT_SUPPORTED - รหัสสถานะ (505)

Axis และทุกสิ่งที่คุณสามารถบอกได้เกี่ยวกับ HttpServletResponse

การใช้เซิร์ฟเล็ตในเว็บแอดออน

ทีนี้มาพูดถึงการใช้เซิร์ฟเล็ตในโปรแกรมเว็บกัน สำหรับผู้ที่ฉันจะนำสองหุ้นสั้นที่สามารถเป็นประโยชน์

ตัวอย่างแรกแสดงวิธีการทำงานของ HttpServlet และการแสดงภาพแทนด้าน HTML ได้อย่างรวดเร็ว ตามความคิด ด้าน HTMLในหน้าต่างเบราว์เซอร์ควรแสดงเป็นข้อความธรรมดา แต่เพื่อเพิ่มความเร็วของข้อมูล สิ่งที่กำลังส่ง คุณสามารถทำให้ GZIP นูนขึ้นได้ เบราว์เซอร์สมัยใหม่(ยอมรับเบราว์เซอร์รุ่นที่ 4 ขึ้นไป) รองรับวิธีนี้ในการถ่ายโอนข้อมูลที่เป็นข้อความและแสดงด้านข้างในลักษณะที่ไม่บีบ

นำเข้าจาวา io.*; นำเข้า javax เซิร์ฟเล็ต.*; นำเข้า javax เซิร์ฟเล็ต http.*; นำเข้าจาวา ใช้ประโยชน์ zip.*; // servlet พร้อม HttpServlet fallback ZipServlet คลาสสาธารณะขยาย HttpServlet ( // ฟังก์ชันสำหรับจัดการเมธอด GETโมฆะสาธารณะ doGet (คำขอ HttpServletRequest การตอบสนอง HttpServletResponse) พ่น ServletException, IOException ( // กำหนดให้ด้านข้างเป็นเอกสาร HTMLการตอบสนอง. setContentType("ข้อความ/html"); // รับพารามิเตอร์ "Accept-Encoding" จากส่วนหัว HTTPการเข้ารหัสสตริง=คำขอ getHeader("ยอมรับการเข้ารหัส"); // รับพารามิเตอร์ "การเข้ารหัส" - ก่อนตั้งค่าการเข้ารหัสของเอกสารสตริง encodeFlag=คำขอ getParameter("การเข้ารหัส"); // Kudi displaytimemo PrintWriter ออก; // เช่นเดียวกับฟิลด์ "ยอมรับการเข้ารหัส" ในคำขอถ้า (การเข้ารหัส != null) ( // ฟิลด์นี้ต้องมีค่า "gzip" ด้วย และยังไม่ได้ตั้งค่าการเข้ารหัส if ((encodings. indexOf("gzip" ) != - 1 ) &&! encodeFlag. equals("none") )) ( // ที่ที่เราจะเข้าไปจะเป็นหนึ่งและคว้าข้อความเพื่อขอความช่วยเหลือ GZIP out = new PrintWriter(ใหม่ GZIPOutputStream(response.getOutputStream()) , false); // และตั้งค่าแฟล็กสำหรับเบราว์เซอร์ที่เอกสารจะถูกบีบอัดการตอบสนอง. setHeader("การเข้ารหัสเนื้อหา", "gzip"); ) อื่นๆ ออก = ตอบกลับ getWriter(); ) อื่น // ไม่อย่างนั้นเราจะอยู่ได้โดยปราศจากการบีบคั้นออก = ตอบกลับ getWriter(); ออก. println("นี่คือการทดสอบ!!!"); // เขียนเนื้อความของเอกสารออก. ปิด(); // นั่น zakryvaemo vysnovok //ทุกอย่างเสร็จงานก็ส่งเอกสาร } }

อีกตัวอย่างหนึ่งแสดงให้เห็นว่าเซิร์ฟเล็ตสามารถใช้งานได้โดยไม่หยุดชะงักเพื่อดูด้านข้าง มุมมองด้านข้างประเภทนี้สามารถเล่นได้ ตัวอย่างเช่น ในแชท: หากต้องการอ่านโน้ตใหม่ ไม่จำเป็นต้องอัปเดตด้านข้าง บันทึกใหม่จะถูกดาวน์โหลดเพียงชั่วโมงเดียว จำเป็นต้องสาบาน พร็อกซีเซิร์ฟเวอร์ดังกล่าวไม่สนับสนุนการถ่ายโอนข้อมูลประเภทนี้ ale z cym - ขออภัย - ไม่มีอะไรสามารถทำได้

นำเข้าจาวา io.*; นำเข้า javax เซิร์ฟเล็ต.*; // โปรแกรมใช้อินเทอร์เฟซ Servletคลาส DoloadServlet ใช้ Servlet (การกำหนดค่า ServletConfig; // วัตถุ ServletConfig สาธารณะ DoloadServlet () () // ไม่ทำอะไร // บันทึกการกำหนดค่าในการเริ่มต้น init โมฆะสาธารณะ (การกำหนดค่า ServletConfig) พ่น ServletException ( this.config = config;) // ดูการกำหนดค่าการออม ServletConfig สาธารณะ getServletConfig() ( return config;) // ข้อมูลเกี่ยวกับเซิร์ฟเล็ตสตริงสาธารณะ getServletInfo () (ส่งคืน "DoloadServlet" ;) การทำลายโมฆะสาธารณะ () () // ไม่ทำอะไร //ขอคำร้องบริการโมฆะสาธารณะ (คำขอ ServletRequest การตอบสนอง ServletResponse) พ่น ServletException, java ไอโอ IOException( // เราจะไม่ขอความช่วยเหลือในทันที // สร้างส่วนหัว HTTP:หัวสตริง = "HTTP/1.0 200 ตกลง\n" + + "เซิร์ฟเวอร์: DoloadServlet\n" + "ประเภทเนื้อหา: text/html; charset=UTF-8\n"+ "การเชื่อมต่อ: รักษาชีวิต\n" + "การเข้ารหัสเนื้อหา: หลายส่วน/ผสม\n"+ "การเข้ารหัสการถ่ายโอน: เป็นกลุ่ม" + "Pragma: ไม่มีแคช\n\n" ; // ตอนนี้เพิ่มข้อมูลโพสต์ // สำหรับก้นนี้ - 20 แท็ก "
จากแถวที่โอน
สำหรับ (int i = 0; i< 20 ; i++ ) head = head + "
\n" ; //พาลูกไป ServletOutputStream ระบบปฏิบัติการ=ตอบสนอง getOutputStream(); // เขียนส่วนหัวและโพสต์ข้อมูลที่นั่นระบบปฏิบัติการ พิมพ์(หัว); // เอาชนะทุกอย่างที่เขียนไปยังบัฟเฟอร์ก่อนไคลเอนต์การตอบสนอง. flushBuffer(); // เริ่มเพิ่มแถวใหม่: // แถว qi จะมีลักษณะดังนี้: หมายเลขแถว แล้ว "
\n"
// หนังแถวใหม่ปรากฏขึ้นทุก 3 วินาที int ผม = 0; ในขณะที่ (จริง)( // การเพิ่มของ lichnikผม++; // เขียนแถว os. พิมพ์ ("" + i+ "
\n"); // การตอบสนองบัฟเฟอร์ล้าง flushBuffer(); // ตรึง potik ไว้ 3 วินาทีลอง ( sleep(3000 );) catch (ข้อยกเว้น e)() ) )

มันหายไปที่จะบอกว่ากลไกเซิร์ฟเล็ตนั้นเป็นพลาสติกมากกว่าและช่วยให้คุณสร้างสุนทรพจน์ดังกล่าวได้เนื่องจากสามารถใช้การเขียนเว็บเซิร์ฟเวอร์ภายนอกได้ (เช่นในกรณีของเรซูเม่เซิร์ฟเล็ต) ข้อเสียของหุ่นยนต์เซิร์ฟเล็ตคือความเร็วต่ำของการเปิดตัวครั้งแรก (เซิร์ฟเล็ตถูกคอมไพล์โดยเครื่อง JIT) การสูญเสียหน่วยความจำสูงและความล้มเหลวของโปรแกรมทั้งหมดใน Java - ความเร็วต่ำของการทำงานกับแถว สภาพแวดล้อมที่เหลือจะล้าสมัยด้วยหุ่นยนต์เซิร์ฟเล็ตที่ยอมรับข้อมูลข้อความใน โพสต์คำขอโอ้. POST ได้รับการร้องขอจาก HttpServlet ด้วยขนาด 50 kb เมื่อแยกวิเคราะห์เพื่อขอความช่วยเหลือจาก HttpServletRequest.getReader () สามารถทำให้หุ่นยนต์เซิร์ฟเวอร์เป็นอัมพาตสำหรับ hvilins สองสามตัว เช่นเดียวกับโปรแกรมจาวาอื่น ๆ

ฉันจะยกตัวอย่างเล็ก ๆ สองตัวอย่าง:

// กำหนดแถวข้อความสตริง // ก้น 1 // ค้นหาหุ่นยนต์ในแถวสำหรับการดำเนินการ "+" เพิ่มเติมสำหรับ Stringสตริง test1 = ""; สำหรับ (int i = 0; i< text. length(); i++ ) test1 += text. charAt(i); // ก้น 2 // ค้นหาหุ่นยนต์ในแถวเพื่อหาบัฟเฟอร์เพิ่มเติม char buf = ถ่านใหม่ [ข้อความ. ความยาว()]; สำหรับ (int i = 0; i< text. length(); i++ ) buf[ i] = text. charAt(i); String sample2 = new String(buf);

หากคุณใช้แถวเล็ก ๆ - มากถึง 2-3 kb ข้อมูลในแอปพลิเคชันหุ่นยนต์ก็ไม่สำคัญ หากคุณใช้แถวข้อความที่มีขนาด 10 kb ในขั้นตอนแรกโปรแกรมจะทำงานกับแถวนั้นอย่างมีนัยสำคัญ มากกว่า. นี่คือลักษณะเฉพาะของ java และ єปัญหาของการใช้งานฟังก์ชันของคลาส String ดังนั้นหากคุณต้องการเขียนเซิร์ฟเล็ตสวีเดน จงมีเอกลักษณ์ แถวยาวเพื่อช่วยคลาส String เช่น แท็กคลาส StringBuffer ความก้าวหน้านี้ควรดำเนินการต่อหน้าเราจนกว่าจะมีการนำข้อความที่ดีออกจากระยะขอบและการประมวลผลไฟล์ในเครื่อง (เช่น ในกรณีของฐานข้อมูลข้อความสำหรับสมุดเยี่ยมที่มีข้อมูลอ้างอิงจำนวนมาก)

ปัญหาอีกประการหนึ่งคือการทำงานหลายอย่างของระบบเว็บ อย่าลืมว่าเซิร์ฟเล็ตของคุณสามารถขอ koristuvachiv ได้ทุกชั่วโมง บ่อยครั้งที่ปัญหาของการซิงโครไนซ์ข้อมูล การแลกเปลี่ยนข้อมูลระหว่างเธรดการนับต่างๆ ของเซิร์ฟเล็ตเดียวกันมักถูกตำหนิ และปัญหาที่แพร่หลายที่สุดคือปัญหาของการเข้าถึงไฟล์และการตั้งชื่ออื่นๆ ของระบบแบบซิงโครนัส ตัวอย่างเช่น โปรแกรมหนึ่งเปิดไฟล์เพื่ออ่าน และบางครั้งก็พยายามเขียนที่นั่น เป็นผลให้โปรแกรมอื่นลบตำหนิหรือตรวจสอบในขณะที่ไฟล์ถูกเรียกสำหรับการบันทึก ที่ลิงก์กับ zim ฉันต้องการหันหลังให้ความเคารพของคุณ: อย่าท่วมสตรีมที่ไม่ได้กรีดร้องและปิดสตรีมเพราะจำเป็นเท่านั้น Potik เห็นได้ชัดว่าปิดโดยอัตโนมัติในภายหลัง แต่จะเกิดขึ้นเพียงครั้งเดียวหาก "smіttyar" ไปที่ไฟล์ใหม่และในเวลาเดียวกันโปรแกรมอื่นไม่สามารถเข้าถึงไฟล์สำหรับบันทึกได้

นอกเหนือจากการทำงานหลายอย่างพร้อมกัน ฉันต้องการทราบว่าสำหรับวิธีการเพิ่มเติม "Object getAttribute(String name)" และ "void setAttribute(String name, Object object)" ในอินเทอร์เฟซ ServletContext คุณสามารถแลกเปลี่ยนระหว่างเซิร์ฟเล็ตและข้อมูลได้ มีการซิงโครไนซ์

Servlets (Servlets) - tse java-programs, yakі vykonuyutsya บนฝั่งเซิร์ฟเวอร์ของเว็บโปรแกรม เช่นเดียวกับแอปเพล็ตที่ขยายฟังก์ชันการทำงานของเว็บเบราว์เซอร์แบบไดนามิก เซิร์ฟเล็ตจะขยายการทำงานของเว็บเซิร์ฟเวอร์แบบไดนามิก หากเซิร์ฟเล็ตสามารถให้บริการการโทรได้ จะมีการเรียกกลิ่นเหม็นเพื่อขยายเว็บเซิร์ฟเวอร์ สำหรับโปรแกรมดังกล่าว เทคโนโลยี Java Servlet จะกำหนดคลาสเซิร์ฟเล็ตเฉพาะ HTTP แพ็คเกจ javax.servlet และ javax.servlet.http จัดเตรียมอินเตอร์เฟสและคลาสสำหรับการสร้างเซิร์ฟเล็ต

  • โครงสร้างของโครงการเว็บคืออะไร?

  • คอนเทนเนอร์เซิร์ฟเล็ตคืออะไร? วงจรชีวิตของเซิร์ฟเล็ต

คอนเทนเนอร์เซิร์ฟเล็ตคือโปรแกรมที่จัดการวงจรชีวิตของเซิร์ฟเล็ต
วงจรชีวิตของเซิร์ฟเล็ต: มันถูกควบคุมโดยคอนเทนเนอร์เซิร์ฟเล็ต ในครั้งแรกที่เราไปที่เซิร์ฟเล็ต มันติดอยู่กับปริศนาและเรียกเมธอด init() อย่างไรก็ตาม โปรแกรมหุ่นยนต์จะเรียกใช้เมธอด service() เพื่อดำเนินการตามคำขอของลูกค้า เมื่อโปรแกรมเสร็จสิ้น จะเรียกเมธอด destroy() และเซิร์ฟเล็ตจะถูกลบออกจากหน่วยความจำ

  • คำจำกัดความ ฟังก์ชันการทำงานของคอนเทนเนอร์เซิร์ฟเล็ตคืออะไร?

คอนเทนเนอร์เซิร์ฟเล็ตสามารถใช้เป็นเว็บเซิร์ฟเวอร์แบบสแตนด์อโลนเต็มรูปแบบ เป็นโฮสต์บุคคลที่สามของเว็บเซิร์ฟเวอร์อื่น เช่น Apache หรือรวมเข้ากับเซิร์ฟเวอร์เสริม Java EE การแลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเล็ตและไคลเอนต์อย่างปลอดภัย โดยรับหน้าที่ต่างๆ เช่น การสร้างสภาพแวดล้อมซอฟต์แวร์สำหรับเซิร์ฟเล็ตที่ทำงาน การระบุและการอนุญาตของลูกค้า การจัดระเบียบเซสชันสำหรับสกินของพวกเขา

  • sendRedirect() และ forward() ต่างกันอย่างไร

สำหรับวิกิ JSP เมธอด forward() เป็นวิธีที่แพงที่สุด สำหรับการเรียก JSP เมธอด sendRedirect() เป็นวิธีที่แน่นอน Vіdminnіst tsikh methodіv vіd scho z method forward() ได้ส่งผ่านคำขอคำขอวัตถุหลักแล้ว และการเรียกใช้เมธอด sendRedirect() จะสร้างคำขอใหม่ ข้อมูลในช่วงเวลาที่เหลือควรถูกส่งไปยังวัตถุอื่น ก่อนหน้านั้นเมธอด forward() จะฉลาดกว่า

  • คุณรู้อะไรเกี่ยวกับเซิร์ฟเล็ตตัวกรองบ้าง?

การใช้งานอินเทอร์เฟซตัวกรองช่วยให้คุณสร้างวัตถุที่สามารถใช้เปลี่ยนคำขอได้ คุณสามารถเปลี่ยนส่วนหัวและแทนที่คำขอของลูกค้าได้ ตัวกรองไม่ได้สร้างคำขอ มิฉะนั้นจะเปลี่ยนแปลง การแก้ไขจะน้อยลง ตัวกรองถูกส่งผ่านหน้าคำขอ ตัวกรองแรกถูกใช้ในเซิร์ฟเล็ต โดยมีการประมวลผลอินพุตเพิ่มเติม (ตามความจำเป็น) ที่ออกมาจากเซิร์ฟเล็ต ตัวกรองสามารถเปลี่ยนได้ด้วย ประเภทต่างๆทรัพยากร zocrema และ servlets และฝั่ง JSP ตัวกรอง Servlet สามารถ:

  • แทนที่การเริ่มต้นเซิร์ฟเล็ต เซิร์ฟเล็ตแรกจะถูกเตรียมข้อมูลเบื้องต้น
  • กำหนดการเปลี่ยนแปลงในการร้องขอ เซิร์ฟเล็ตล่างตัวแรกจะเริ่มต้นขึ้น
  • แก้ไขส่วนหัวและข้อมูลในคำขอ วิธีบรรจุคำขอ สิ่งที่ต้องค้นหา
  • แก้ไขหัวเรื่องและข้อมูลในแบบฟอร์ม ซึ่งในกรณีนี้ ประเภทจะถูกบรรจุ ซึ่งเป็นที่ยอมรับ
  • คืนค่าการเริ่มต้นเซิร์ฟเล็ตหลังการเปลี่ยนไปใช้เซิร์ฟเล็ต

ตัวกรองเซิร์ฟเล็ตสามารถปรับแต่งได้ เพื่อให้คุณสามารถทำงานกับเซิร์ฟเล็ตเดี่ยวหรือกลุ่มของเซิร์ฟเล็ต พื้นฐานสำหรับการสร้างตัวกรองคืออินเทอร์เฟซ javax.servlet.Filter ซึ่งดำเนินการสามวิธี:

  • เป็นโมฆะ init (FilterConfig config) พ่น ServletException;
  • โมฆะทำลาย ();
  • โมฆะ doFilter (คำขอ ServletRequest, การตอบสนอง ServletResponse, ห่วงโซ่ FilterChain) พ่น IOException, ServletException;

มีการเรียกเมธอด init() ตัวกรองล่างตัวแรกจะได้รับการซ่อมแซม และอ็อบเจ็กต์ตัวกรองการกำหนดค่าใหม่จะได้รับการอัปเดต วิธีการ doFilter จะแทนที่การทำงานของตัวกรองโดยตรง ด้วยวิธีนี้ เซิร์ฟเวอร์เรียก init() หนึ่งครั้งเพื่อเรียกใช้ตัวกรองในโรบ็อต จากนั้นเรียก doFilter() หลายครั้ง จำนวนคำขอจะถูกทำลายโดยไม่หยุดชะงักจนกระทั่ง ตัวกรองนี้. หลังจากตัวกรองทำงานเสร็จ จะเรียกเมธอด destroy()

  • จำเป็นต้องใช้เครื่องช่วยฟังในเซิร์ฟเล็ตอย่างไร?

เมื่อฟังบริบทของเซสชั่นนั้น - ce class yakіสามารถติดตามได้หากบริบทของเซสชันนั้นเริ่มต้นขึ้นหรือหากเป็นเวลาหนึ่งชั่วโมงหากกลิ่นเหม็นอาจทำให้มึนงงและหากเพิ่มแอตทริบิวต์และเห็นจาก บริบทของเซสชั่น Servlet 2.4 ขยายโมเดลคิวรี่ Listener เพื่อให้คุณสามารถระบุวิธีการสร้างและระงับการสืบค้น และวิธีการเพิ่มและลบแอตทริบิวต์จากเซิร์ฟเล็ต Servlet 2.4 เพิ่มคลาสนี้:

  • ServletRequestListener
  • ServletRequestEvent
  • ServletRequestAttributeListener
  • ServletRequestAttributeEvent

  • จะรับโทษได้อย่างไร ชนะด้วยเซิร์ฟเล็ตอื่นจากภาคผนวก?

หากเบราว์เซอร์รู้มากกว่า HTML เท่านั้น ถ้าโปรแกรม wiki คอนเทนเนอร์เซิร์ฟเล็ต ลุกโชนและสร้างการตอบสนอง HTML ซึ่งคล้ายกับที่ใช้กับรหัสให้อภัยสำหรับ kshtalt 404, 403 เป็นต้น Servlet API ให้คำแนะนำแก่เซิร์ฟเล็ตหลักสำหรับการประมวลผลการอ้างอิงและการให้อภัย ซึ่งเราสามารถใส่ไว้ที่คำอธิบายของการเบลอ งานหลักของเซิร์ฟเล็ตดังกล่าวคือการได้รับการให้อภัยหรือตำหนิ และส่งความเข้าใจเกี่ยวกับ HTML ไปยัง coristuvachev ตัวอย่างเช่น คุณสามารถให้กำลังกับ หัวด้านตลอดจนคำอธิบายรายละเอียดบางประการเกี่ยวกับการอภัยโทษ

  • ลักษณะของกล่องเสียงคืออะไร?

goroutine descriptor เป็นไฟล์คอนฟิกูเรชันสำหรับอาร์ติแฟกต์ที่คอนเทนเนอร์เซิร์ฟเล็ตกำหนด ที่สเปค แพลตฟอร์ม Java, Enterprise Edition descriptor อธิบายว่าส่วนประกอบ โมดูล หรือโปรแกรม (เช่น โปรแกรมเสริมของเว็บหรือโปรแกรมระดับองค์กร) สามารถเปิดได้หรือไม่

ไฟล์การกำหนดค่านี้ระบุพารามิเตอร์ของโครงร่างสำหรับโมดูลหรือโปรแกรมด้วยการตั้งค่าพื้นฐาน พารามิเตอร์ความปลอดภัยที่อธิบายตัวเลือกเฉพาะสำหรับการกำหนดค่า สำหรับไวยากรณ์ของ file descriptor ภาษานั้นเขียน XML

  • วิธีการใช้การเปิดใช้เซิร์ฟเล็ตโดยการเปิดโปรแกรม?

คอนเทนเนอร์เซิร์ฟเล็ตควรเริ่มต้นเซิร์ฟเล็ตตามคำร้องขอแรกของไคลเอ็นต์ มิฉะนั้น จำเป็นต้องเริ่มต้นเซิร์ฟเล็ตตั้งแต่เริ่มต้นโปรแกรม (เช่น เซิร์ฟเล็ตจำนวนมาก คอนเทนเนอร์จะเริ่มทำงานเป็นเวลานาน) ซึ่งจำเป็นต้องเลือกองค์ประกอบ load-on-startup บน descriptor (หรือคำอธิบายประกอบ loadOnStartup) ซึ่งจะทำให้เซิร์ฟเล็ตต้องทำงานเมื่อเริ่มต้น

ค่าสามารถเป็น int หากค่าเป็นลบ เซิร์ฟเล็ตจะถูกครอบครองเมื่อมีการร้องขอไคลเอ็นต์ และหากเป็น 0 และมากกว่านั้น เซิร์ฟเล็ตจะถูกครอบครองเมื่อเริ่มต้นโปรแกรม ยิ่งจำนวนน้อยเท่าไหร่ Cherz ก็จะยิ่งมีเซิร์ฟเล็ตอยู่ในมือเร็วขึ้นเท่านั้น

  • วัตถุ ServletConfig คืออะไร?

อินเตอร์เฟส javax.servlet.ServletConfig ออกแบบมาเพื่อส่งข้อมูลการกำหนดค่าไปยังเซิร์ฟเล็ต สกินเซิร์ฟเล็ตสามารถโฮสต์อ็อบเจ็กต์ ServletConfig สร้างอินสแตนซ์ของคอนเทนเนอร์เซิร์ฟเล็ตบางประเภท ในการตั้งค่าพารามิเตอร์ในการกำหนดค่า พารามิเตอร์ init ใน web.xml (หรือหมายเหตุประกอบ WebInitParam) จะถูกเลือก ในการดึงข้อมูลอ็อบเจ็กต์ ServletConfig ของเซิร์ฟเล็ตนั้น เมธอด getServletConfig() จะถูกดึงกลับมา

  • วัตถุ ServletContext คืออะไร?

อินเตอร์เฟส javax.servlet.ServletContext กำหนดวิธีการต่างๆ เช่น เคล็ดลับของเซิร์ฟเล็ต เพื่อสื่อสารกับคอนเทนเนอร์เซิร์ฟเล็ต ตัวอย่างเช่น ใช้ประเภท MIME ของไฟล์ ส่งคำขอ หรือเขียนไปยังไฟล์บันทึก ออบเจ็กต์ ServletContext มีลักษณะเฉพาะและสามารถเข้าถึงได้จากเว็บเซิร์ฟเวอร์ทั้งหมดของโปรแกรม เราสามารถชนะอ็อบเจกต์ ServletContext หากเราต้องการให้สิทธิ์ในการเข้าถึงเซิร์ฟเล็ตตั้งแต่หนึ่งรายการขึ้นไปเพื่อเริ่มต้นพารามิเตอร์ในโปรแกรมเว็บ ซึ่งองค์ประกอบแห่งชัยชนะ ที่ web.xml วัตถุ ServletContext สามารถค้นหาได้โดยเมธอดตัวช่วย getServletContext() ในอินเทอร์เฟซ ServletConfig

คอนเทนเนอร์เซิร์ฟเล็ตสามารถจัดหาอ็อบเจ็กต์บริบทที่ไม่ซ้ำกันสำหรับกลุ่มของเซิร์ฟเล็ต สกินของกลุ่มจะเชื่อมโยงกับชุดเส้นทาง URL โฮสต์ของตัวเอง

ServletContext ขยายไปยังข้อกำหนดของ Servlet 3 และให้โปรแกรมเพิ่มการได้ยินและการกรองลงในโปรแกรม นอกจากนี้ อินเทอร์เฟซนี้มีเมธอดที่ไม่ระบุตัวตน เช่น getMimeType(), getResourceAsStream() และอื่นๆ

  • เหตุใด ServletContext และ ServletConfig จึงมีความสำคัญ

ด้านล่างนี้เป็นโฉนดของผู้มีอำนาจ:

  • ServletConfig นั้นมีลักษณะเฉพาะสำหรับ servlet สกิน ในขณะที่ ServletContext นั้นไม่ซ้ำกับโปรแกรมทั้งหมด
  • ServletConfig ถูกเลือกสำหรับพารามิเตอร์ที่กำหนดในการเริ่มต้นของเซิร์ฟเล็ต และ ServletContext สำหรับพารามิเตอร์ที่กำหนดในการเริ่มต้นของโปรแกรมสำหรับเซิร์ฟเล็ตทั้งหมด
  • เราไม่สามารถตั้งค่าแอตทริบิวต์ในอ็อบเจ็กต์ ServletConfig ได้ แต่เราสามารถตั้งค่าแอตทริบิวต์ในอ็อบเจ็กต์ ServletContext เพื่อให้ใช้ได้กับเซิร์ฟเล็ตอื่น

  • อินเตอร์เฟส ServletResponse

อินเทอร์เฟซ ServletResponse เป็นเครื่องมือที่ดีที่สุดสำหรับการบังคับใช้ข้อมูลสำหรับลูกค้า ใช้วิธีของเครื่องมือนี้เพื่อใช้วิธีการเดียวกัน

  • ServletRequest อินเทอร์เฟซ

อินเทอร์เฟซ ServletRequest เป็นเครื่องมือสำหรับการดึงพารามิเตอร์จากคำขอ HTTP อินเทอร์เฟซนี้อาจมีวิธีการที่เหมือนกับชื่อที่กำหนดให้กับ ServletContext

  • ผู้ส่งคำขอคืออะไร?

อินเทอร์เฟซ RequestDispatcher ออกแบบมาเพื่อส่งคำขอไปยังทรัพยากรอื่น (HTML, JSP หรือเซิร์ฟเล็ตอื่นที่มีภาคผนวกเดียวกัน) เราสามารถเอาชนะความท้าทายในการเพิ่มทรัพยากรอื่นให้อยู่ด้านบน อินเทอร์เฟซนี้ออกแบบมาสำหรับการสื่อสารภายในระหว่างเซิร์ฟเล็ตในบริบทเดียวกัน มีการใช้งานสองวิธีในอินเทอร์เฟซ:

  • void forward(ServletRequest var1, ServletResponse var2) - ส่งต่อคำขอจากเซิร์ฟเล็ตไปยังทรัพยากรอื่น (servlet, JSP หรือไฟล์ HTML) บนเซิร์ฟเวอร์
  • โมฆะรวม (ServletRequest var1, ServletResponse var2) - รวมเนื้อหาของทรัพยากร (ด้านเซิร์ฟเล็ต, JSP หรือ HTML) ในมุมมอง

การเข้าถึงอินเทอร์เฟซสามารถทำได้ด้วยความช่วยเหลือของ ServletContext getRequestDispatcher(String s) เส้นทางมีความผิดในการเริ่มต้นด้วย / ซึ่งจะถูกตีความในลักษณะที่เส้นทางรากปัจจุบันถูกตีความในบริบท

  • คุณจะสร้างการหยุดชะงักบนเซิร์ฟเล็ตได้อย่างไร?

การหยุดชะงักสามารถลบออกได้โดยใช้การวนซ้ำในเมธอด call-click เช่น การเรียกเมธอด doPost() จากเมธอด doGet() และการเรียกเมธอด doGet() จากเมธอด doPost()

  • จะใช้ที่อยู่ของเซิร์ฟเล็ตบนเซิร์ฟเวอร์ได้อย่างไร?

ในการดึงเส้นทางเซิร์ฟเวอร์จริงบนเซิร์ฟเวอร์ คุณสามารถบิดโครงสร้างต่อไปนี้: getServletContext().getRealPath(request.getServletPath())

  • จะดึงข้อมูลเกี่ยวกับเซิร์ฟเวอร์จากเซิร์ฟเล็ตได้อย่างไร?

ข้อมูลเกี่ยวกับเซิร์ฟเวอร์สามารถดึงมาจากตัวช่วย ServletContext จากเมธอดตัวช่วย getServerInfo() ทูบโต getServletContext().getServerInfo().

  • จะนำที่อยู่ IP ของลูกค้าไปไว้บนเซิร์ฟเวอร์ได้อย่างไร?

ปรับแต่ง request.getRemoteAddr() เพื่อดึง IP ของลูกค้าในเซิร์ฟเล็ต

  • คุณรู้อะไรเกี่ยวกับคลาส wrapper สำหรับเซิร์ฟเล็ต?

Servlet HTTP API หวังว่าจะมีตัวห่อหุ้มสองตัว - HttpServletRequestWrapper และ HttpServletResponseWrapper พวกเขาช่วยผู้ค้าปลีกในการขายการขายคำขอและประเภทการตอบสนองของเซิร์ฟเล็ตของตนเอง เราสามารถขยายชั้นเรียนและกำหนดวิธีการที่ไม่จำเป็นสำหรับการดำเนินการประเภทพลังงานของวัตถุที่ดื่มและดื่ม คลาสเหล่านี้ไม่ชนะการเขียนโปรแกรมเซิร์ฟเล็ตมาตรฐาน

เซิร์ฟเล็ต- โปรแกรมจาวาทั้งหมด ตามที่ปรากฏบนฝั่งเซิร์ฟเวอร์ของโปรแกรมเว็บ เช่นเดียวกับแอปเพล็ตที่ขยายฟังก์ชันการทำงานของเว็บเบราว์เซอร์แบบไดนามิก เซิร์ฟเล็ตจะขยายการทำงานของเว็บเซิร์ฟเวอร์แบบไดนามิก

หุ่นยนต์ เซิร์ฟเล็ต"หรือสามารถอธิบายได้ว่าเป็นแนวทาง: เมื่อคุณต้องการขอไคลเอนต์, เว็บเซิร์ฟเวอร์, ด้วยความช่วยเหลือของไฟล์การกำหนดค่าพิเศษ คุณสามารถกำหนดได้ว่าคุณต้องเลือกเซิร์ฟเล็ตใด - เซิร์ฟเวอร์ (อาจอยู่ในมุมมองของ HTML ด้านข้าง)

เว็บเซิร์ฟเวอร์เป็นคอนเทนเนอร์เพลงซึ่งน่าสนใจ เซิร์ฟเล็ต"และ, vykonuєїх, і, เมื่อคำนึงถึงผลลัพธ์, เอาชนะลูกค้า

Servlet ในสถาปัตยกรรมเว็บแอปพลิเคชัน

ผ่านความรัดกุมและความคลั่งไคล้ของคุณ เซิร์ฟเล็ตคุณสามารถมีบทบาทสำคัญในสถาปัตยกรรมของระบบ พวกเขาสามารถปรับปรุงขั้นตอนการสมัคร ซึ่งเป็นที่ยอมรับในระดับอุตสาหกรรม ทำงานเป็นพร็อกซีเซิร์ฟเวอร์สำหรับไคลเอ็นต์ และปรับปรุงฟังก์ชันการทำงานของระดับกลาง เพิ่มโปรโตคอลใหม่และฟังก์ชันอื่นๆ เซิร์ฟเวอร์ vikonu riven ระดับกลางทำหน้าที่dodatkіvที่เรียกว่าเซิร์ฟเวอร์ไคลเอนต์ระบบสามแม่น้ำและแลกเปลี่ยนระหว่างไคลเอนต์ "น้ำหนักเบา" เช่นเว็บเบราว์เซอร์ที่ dzherelom danich

Servlet เป็นพร็อกซีเซิร์ฟเวอร์

เพื่อรองรับแอปเพล็ต เซิร์ฟเล็ตสามารถแทนที่ฟังก์ชันของพร็อกซีเซิร์ฟเวอร์ อาจมีความสำคัญเช่นกัน แต่ระบบความปลอดภัยของ Java อนุญาตให้แอปเพล็ตเชื่อมต่อกับเซิร์ฟเวอร์เท่านั้นไม่ว่าจะเหม็นแค่ไหน แอพเพล็ตนี้จะต้องลงทะเบียนกับเซิร์ฟเวอร์ฐานข้อมูลที่ใช้งานบนเครื่องอื่น เซิร์ฟเล็ตคุณสามารถสร้างแอปเพล็ต

Timchasovo และเร็ว เซิร์ฟเล็ต"และ

Servlets สามารถเริ่มต้นและเรียกใช้สำหรับคำขอสกินของไคลเอ็นต์ได้ นอกจากนี้ กลิ่นเหม็นสามารถเริ่มตั้งแต่เริ่มต้นเว็บเซิร์ฟเวอร์และจนถึงฟันซี่สุดท้าย Timchasovo เซิร์ฟเล็ต"และพวกเขากำลังพยายามช่วยและส่งเสริมวิธีที่ดีในการประหยัดทรัพยากรเซิร์ฟเวอร์สำหรับฟังก์ชันที่ไม่ค่อยได้รับชัยชนะ กลิ่นเหม็นมีความผิดในการยอมรับคำขอของลูกค้า yaknaishvidshe เซิร์ฟเล็ตแต่เร็ว abo Timchasov; เป็นหน้าที่ของการตั้งค่าเว็บเซิร์ฟเวอร์

วงจรชีวิตของเซิร์ฟเล็ต javax.servlet.Servlet

Servlets ถูกสร้างขึ้นบนแพลตฟอร์มของเว็บเซิร์ฟเวอร์โดยเป็นส่วนหนึ่งของกระบวนการนั้น เช่นเดียวกับตัวเว็บเซิร์ฟเวอร์เอง เว็บเซิร์ฟเวอร์ตอบกลับสำหรับการเริ่มต้น การเรียกคืน และการเลิกใช้อินสแตนซ์สกินเซิร์ฟเล็ต เว็บเซิร์ฟเวอร์โต้ตอบกับเซิร์ฟเล็ตผ่านอินเทอร์เฟซอย่างง่าย: javax.servlet.Servlet.

อินเตอร์เฟส javax.servlet.Servlet มีสามวิธีหลัก:

  • ในนั้น()
  • บริการ()
  • ทำลาย()

และอีกสองวิธีเพิ่มเติม:

  • getServletConfig()
  • getServletInfo()

ความคล้ายคลึงกันระหว่างอินเทอร์เฟซ เซิร์ฟเล็ต"และแอปเพล็ต Java ก็ชัดเจน นั่นคือวิธีที่มันถูกออกแบบ! Java servlets มีไว้สำหรับเว็บเซิร์ฟเวอร์ เช่น แอปเพล็ตสำหรับเว็บเบราว์เซอร์ ตัวมันเองทำงานบนเว็บเซิร์ฟเวอร์

การเริ่มต้น Servlet, init() method

เมื่อเซิร์ฟเล็ตถูกโจมตีครั้งแรก เมธอด init() จะถูกเรียก สิ่งนี้ทำให้เซิร์ฟเล็ต Viconate เป็นหุ่นยนต์เพื่อติดตั้ง ตัวอย่างเช่น เปิดไฟล์หรือติดตั้งการเชื่อมต่อกับเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์ถูกติดตั้งบนเซิร์ฟเวอร์ เซิร์ฟเวอร์จะถูกติดตั้งโดยอัตโนมัติเมื่อเซิร์ฟเวอร์เริ่มทำงาน มิฉะนั้น เซิร์ฟเวอร์จะเปิดใช้งานเซิร์ฟเล็ตในขณะที่ลบคำร้องขอแรกออกจากไคลเอนต์เพื่อให้บริการ ซึ่งจัดเตรียมโดยเซิร์ฟเล็ต

รับรองว่าวิธีการ ในนั้น()สิ้นสุดก่อนขั้นตอนอื่น ๆ ไปยังเซิร์ฟเล็ต - เช่น การเรียกเมธอดอย่างรวดเร็ว บริการ(). เพื่อเป็นการตอบแทนความนับถือ sho ในนั้น()จะมีมากกว่าหนึ่งสาย win จะไม่ถูกเรียกจนกว่าจะไม่มีการเรียกเซิร์ฟเล็ต จากนั้นเซิร์ฟเวอร์จะดึงข้อความค้นหา

วิธี ในนั้น()ยอมรับหนึ่งอาร์กิวเมนต์ - ส่งไปที่วัตถุ ServletConfigสิ่งที่ต้องส่งผ่านอาร์กิวเมนต์เพื่อเริ่มต้นเซิร์ฟเล็ต วิธีวัตถุ Tsey maє getServletContext()ซึ่งหมุนวัตถุ ServletContextซึ่งก็คือการดึงข้อมูลเกี่ยวกับการเพิ่มความคมชัดของเซิร์ฟเล็ต

เซิร์ฟเล็ตคอร์, บริการ () วิธีการ

วิธี บริการ()єหัวใจของเซิร์ฟเล็ต ขอประเภทไคลเอนต์เพื่อสร้างวิธีการประตูได้มากถึงหนึ่งวิธี บริการ(). เมธอดนี้อ่านและขอรูปแบบการแจ้งเตือนเพื่อขอความช่วยเหลือจากสองอาร์กิวเมนต์ ServletRequest และ ServletResponse:

ในลักษณะนี้ มีสองวิธีในการส่งผ่านข้อมูลประจำตัวของลูกค้าไปยังเซิร์ฟเล็ต สิ่งแรกคือความแข็งแกร่งของค่าพารามิเตอร์ของแหล่งจ่ายไฟ สามารถแทรกค่าพารามิเตอร์ลงใน URL ได้ อีกวิธีในการส่งอินพุตของไคลเอ็นต์ไปยังเซิร์ฟเล็ตคือผ่าน InputStream (หรือ Reader)

วิธีหุ่นยนต์ บริการ()วันต่อวันเป็นเรื่องง่าย - ฉันสร้างคำขอของลูกค้า โอนจากเซิร์ฟเวอร์ถึงคุณ อย่างไรก็ตาม จำเป็นต้องจำไว้ว่าคุณสามารถใช้เครื่องดื่มแบบขนานจำนวนเล็กน้อยซึ่งทำเสร็จพร้อม ๆ กัน วิธีไหน บริการ()จำเป็นต้องตรวจสอบให้แน่ใจว่าการเข้าถึงทรัพยากรได้รับการป้องกันสตรีม เช่น ไฟล์ ฐานข้อมูลของข้อมูล

ความมีชีวิตชีวาของ Servlet, destroy() method

วิธี ทำลาย()เรียกร้องให้เรียกทรัพยากรทั้งหมด (เช่น เปิดไฟล์รายการฐานข้อมูลนั้น) ก่อนความสดใสของเซิร์ฟเล็ต วิธีนี้สามารถเว้นว่างไว้ได้ เนื่องจากไม่จำเป็นต้องดำเนินการขั้นสุดท้ายให้เสร็จสิ้น ก่อนวิธีวิกิ ทำลาย()เซิร์ฟเวอร์จะตรวจสอบความสมบูรณ์ของการดำเนินการบริการทั้งหมด หรือสิ้นสุดชั่วโมงเพลง Tse หมายความว่า วิธีการ ทำลาย()บางที buti vyklikaniya pіd hour vykonannya เป็นวิธีการที่ไม่สำคัญ บริการ().

ระวังด้วยวิธีการ ทำลาย()ในลักษณะที่จะปิดทรัพยากรที่จำเป็นในขณะที่วิกิทั้งหมด บริการ()ไม่สิ้นสุด

การกำหนดค่าเซิร์ฟเล็ต, เมธอด getServletConfig()

วิธี getServletConfig()เปลี่ยนคำขอไปยังวัตถุที่ใช้อินเทอร์เฟซ ServletConfig. อ็อบเจ็กต์นี้ได้รับสิทธิ์เข้าถึงข้อมูลเกี่ยวกับคอนฟิกูเรชันของเซิร์ฟเล็ต นั่นคือ เข้าถึงพารามิเตอร์การเริ่มต้นเซิร์ฟเล็ตและวัตถุบริบทเซิร์ฟเล็ต ServletContextซึ่งให้การเข้าถึงเซิร์ฟเล็ตที่ดี

ข้อมูลเซิร์ฟเล็ต, เมธอด getServletInfo()

วิธี getServletInfo()มันถูกกำหนดโดยโปรแกรมเมอร์ที่สร้างเซิร์ฟเล็ต สำหรับการหมุนแถว วิธีการดึงข้อมูลเกี่ยวกับเซิร์ฟเล็ต ตัวอย่างเช่น ผู้แต่งและเวอร์ชันของเซิร์ฟเล็ต

ServletRequest อินเทอร์เฟซ

ServletRequest ส่งข้อมูลพารามิเตอร์ HTTP ของไคลเอ็นต์ไปยังเซิร์ฟเล็ตเพื่อให้ ข้อมูลที่ปลอดภัยรวมถึงชื่อของพารามิเตอร์ ค่า คุณลักษณะ และโฟลว์อินพุต ข้อมูลใดบ้างที่ถูกส่งผ่านไปยังเมธอด บริการ().

ก้าวร้าว ก้นเซิร์ฟเล็ตแสดงวิธีการดึงข้อมูลจากพารามิเตอร์ ขอกระบวนการ บริการ():

ผู้อ่าน BufferedReader; พารามิเตอร์สตริง1; พารามิเตอร์สตริง2; บริการโมฆะสาธารณะ (คำขอ ServletRequest การตอบสนอง ServletResponse) ( reader = request.getReader(); param1 = request.getParameter("First"); param2 = request.getParameter("Second"); )

ข้อมูลเพิ่มเติมเกี่ยวกับคำขอมีอยู่ในเซิร์ฟเล็ตผ่านเมธอด ข้อมูลหลักในตารางต่อไปนี้:

รับแอตทริบิวต์ () หมุนค่าของแอตทริบิวต์ที่ระบุไปยังคำขอ
getContentLength() Rozmir zapitu เท่าที่เห็น
getContentType() เปลี่ยนประเภทเป็น MIME
getInputStream() หมุน InputStream เพื่ออ่านข้อมูลสองเท่าจากเนื้อหาไปยังคำขอ
GetParameterNames() หมุนอาร์เรย์ของแถวด้วยชื่อของพารามิเตอร์ทั้งหมด
getParameterValues() หมุนค่าอาร์เรย์ของพารามิเตอร์ที่กำหนด
getProtocol() แปลงโปรโตคอลเป็นเวอร์ชันนั้นเพื่อให้ถูกต้อง /..
getReader() หมุน BufferedReader เพื่อแก้ไขข้อความตามคำขอ
getRealPath() เปลี่ยนเส้นทางจริงสำหรับเส้นทางเสมือนที่กำหนด
getRemoteAddr() ที่อยู่ IP ของลูกค้าซึ่งเขาร้องขอ
getRemoteHost() Іm'ya โฮสต์ของเครื่องไคลเอนต์ซึ่ง nad_slav คำขอนี้
getScheme() หมุนโครงร่างที่รวมอยู่ใน URL ของคำขอนี้ (เช่น https, http, ftp เป็นต้น)
getServerName() ชื่อโฮสต์ของเซิร์ฟเวอร์ที่ยอมรับคำขอ
getServerPort() หมุนหมายเลขไปที่พอร์ตซึ่งได้รับชัยชนะสำหรับการถอนคำขอนี้

อินเตอร์เฟส ServletResponse

อินเตอร์เฟซ ServletResponse- เครื่องมือ Tse สำหรับ nadsilannya ที่มอบให้กับลูกค้า วิธีการทั้งหมดของเครื่องมือนี้ทำงานด้วยตัวเองเพื่อให้งานนี้เสร็จสมบูรณ์:

java.lang.String สาธารณะ getCharacterEncoding() โมฆะสาธารณะ setLocale(java.util.Locale loc) java.util.Locale getLocale()

วิธีแรกคือเปลี่ยนประเภทการเข้ารหัส MIME (เช่น - UTF8) เพื่อให้คุณสามารถดูข้อมูลได้ อีกสองวิธียังทำงานจากชุดอักขระ กลิ่นเหม็นพูดถึงภาษาซึ่งเขียนในเอกสาร (เช่นรัสเซีย)

ServletOutputStream สาธารณะ getOutputStream() พ่น java.io.IOException

เมธอด getOutputStream เปลี่ยนเอาต์พุตสตรีมสำหรับเซิร์ฟเล็ต Tsey potіk vykoristovuєtsyaเช่นไฟล์ไบนารี vyvedennya สามารถดึงข้อมูลข้อความได้ด้วยความช่วยเหลือของ java.io.Writer:

java.io.PrintWriter สาธารณะ getWriter() พ่น java.io.IOException

เมธอด getWriter() จะแปลงแถวโดยอัตโนมัติเป็นชุดอักขระที่ระบุโดยเมธอด getCharacterEncoding() และ getLocale()

โมฆะสาธารณะ setContentLength (int len)

เมธอด setContentLength ตั้งค่าของฟิลด์ส่วนหัว HTTP "Content-Length"

โมฆะสาธารณะ setContentType (ประเภทสตริง)

เมธอด setContentType ถูกปรับแต่งเพื่อบังคับประเภท MIME แทนเอกสาร ฟิลด์ส่วนหัว HTTP "ประเภทเนื้อหา"

การไหลของข้อมูลการดูถูกบัฟเฟอร์ ซึ่งหมายความว่าไคลเอ็นต์จะเห็นข้อมูลบางส่วนหลังจากเติมบัฟเฟอร์แล้ว

โมฆะสาธารณะ setBufferSize(ขนาด int) int สาธารณะ getBufferSize() โมฆะสาธารณะ flushBuffer() พ่น java.io.IOException โมฆะสาธารณะ resetBuffer()

การโฮเวอร์เหนือ 4 วิธีช่วยให้คุณติดตั้งขนาดบัฟเฟอร์การแก้ไข ลบบัฟเฟอร์การแก้ไข เริ่มต้นการแก้ไขบัฟเฟอร์ไปยังไคลเอนต์ ไม่ตรวจสอบบัฟเฟอร์ข้อมูล และล้างบัฟเฟอร์ข้อมูลด้วย

isCommitted บูลีนสาธารณะ ()

เมื่อใช้เมธอด isCommitted คุณสามารถลบธงที่ส่งไปยังไคลเอนต์แล้ว ค่าสถานะจะเป็นค่าบวก เนื่องจากได้ส่งส่วนหัว HTTP แล้ว

รีเซ็ตโมฆะสาธารณะ ()

หากยังไม่ได้เพิ่มส่วนหัว HTTP วิธีการรีเซ็ตจะ "รีเซ็ต" ส่วนหัว HTTP เป็นค่า "ล็อก"

แผนภูมิ JFreeChart ใน Servlets

ไลบรารีกราฟิก JFreeChart สามารถใช้ในเซิร์ฟเล็ตเพื่อสร้างแผนภูมิและแสดงไว้ที่ด้านข้างของไซต์เพื่อดูรูปภาพ รายละเอียดคำอธิบายของแอปพลิเคชัน JFreeChart สำหรับการดูเซิร์ฟเล็ต

Servlet จากไลบรารีกราฟิก Chart.js

JNI ในเซิร์ฟเล็ต

สำหรับตัวเลือกจำนวนมาก คุณอาจต้องใช้ภาคผนวกของเว็บเวอร์ชัน JNI ตัวอย่างการใช้ JNI สำหรับมุมมองเซิร์ฟเล็ต

การแจ้งเตือนเซิร์ฟเล็ต JMS

เซิร์ฟเล็ตสามารถเสนอราคาแลกเปลี่ยนได้ JMSโปรแกรมpovіdomlennyamіzh เครื่องมืออาชีวศึกษา Servlet สำหรับการเปิดเครื่องและการอ่าน JMS Containerized JBoss Views

หนึ่งในคุณสมบัติที่สำคัญที่สุดของ Java คือธรรมชาติที่สมบูรณ์ เห็นได้ชัดว่าการสร้างเดสก์ท็อปแบบดั้งเดิมและ navit อาหารเสริมมือถือ- มันวิเศษมาก นอกจากนี้ คุณต้องการที่จะออกจากเส้นทางที่ไม่คุ้นเคยและเข้าสู่อาณาเขตของการพัฒนาโปรแกรมเสริมเว็บ Java หรือไม่? มีข่าวดีสำหรับคุณ: ในแพ็คเกจความคิดของฉันมี Servlet API ขั้นสูง ซึ่งช่วยให้คุณสามารถสร้างโปรแกรมเว็บแบบกำหนดเองได้โดยไม่ต้องใช้ turbos พิเศษ

การสร้างโปรแกรม Java สำหรับความช่วยเหลือของ Servlets

พ่อเราทำเสร็จแล้ว ไฟล์การกำหนดค่าโปรแกรม อย่างไรก็ตาม ไม่มีอะไรต้องทำลายในสายการผลิตอย่างแท้จริง หากเราต้องการให้ลูกค้าสามารถลงทะเบียนแบบฟอร์ม HTML เพิ่มเติมได้ สิ่งต่อไปที่เราต้องทำคือสร้างไฟล์ JSP ราวกับว่าจะแสดงภาพรูปแบบที่คาดเดาของข้อมูลลูกค้านั้นหลังจากการลงทะเบียนสำเร็จแล้ว จิมมี แป๊บเดียวก็ยุ่งแล้ว

Pratsiyuemo เหนือzovnіshnіm vglyad

โปรแกรมที่ดูแปลก ๆ ถูกกำหนดโดยไฟล์ JSP สองไฟล์ - ในบริบทของ MVC เรียกว่าการแสดงอาการ แจ้งการยื่นแบบลงทะเบียนครั้งแรก การให้อภัยที่เป็นไปได้, viklikanіหลังจากตรวจสอบการแนะนำข้อมูลอีกครั้ง อีกส่วนจะเป็นส่วนหลักของการลงทะเบียน ซึ่งจะแสดงข้อมูลที่ลูกค้าป้อน หลังจากเสร็จสิ้นขั้นตอนการลงทะเบียน

ไฟล์ JSP แรกของแกน:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> การลงทะเบียน

การลงทะเบียน

$ (การละเมิด)

© 2022 androidas.ru - ทั้งหมดเกี่ยวกับ Android