Servlets Servlets. Бид таны оруулсан мэдээлэлд нийгмийн сүлжээний хэрэглэгчдийг хянах сервлет бичиж байна

Java Servlet нь ижил нэртэй програмчлалын хэл дээр бичигдсэн сервер талын програм бөгөөд үйлчлүүлэгчээс дохиог хүлээн авч, түүнд хариу илгээдэг. Энэ нь JSP, EJB, XML болон бусад холбогдох технологиос гадна ердийн Java EE-г бүрдүүлдэг гол элемент юм. Програмыг вэб сервер дээр байрлуулахын тулд WAR (Web AR chive) файлд багцалж болно. Java сервлет ажиллуулж чадах серверийг контейнер гэж нэрлэдэг. Ийм сервер дээр ажилладаг програм нь динамик вэб хуудсыг үүсгэж чаддаг.

Java Servlet: Үндсэн ойлголтууд

Хамгийн алдартай, өргөн хэрэглэгддэг савнууд бол Tomcat болон JBoss юм. Техникийн хувьд сервлет нь Common Client-Server Protocol эсвэл HTTP-ийн өргөтгөлтэй ердийн Java анги юм. Практикт энэ нь HttpServlet GET болон POST хүчингүй болгох замаар хүсэлтийг боловсруулахад хэрэглэгддэг. Java Servlet контейнер нь хүсэлтэд хариу өгөх объект болох Http.ServletRequest болон Http.ServletResponse-г өгдөг. Мөн динамик контент үүсгэхийн тулд ихэвчлэн JSP-тэй хослуулан ашигладаг.

Ердийн загвар хувилбар:

  • JSP нь хэрэглэгчдэд өгөгдөл оруулах маягтыг өгдөг.
  • Сервлет нь оролтыг хүлээн авч, боловсруулж, хариу илгээдэг.
  • Өндөр чанартай ажлын хувьд тусгай шүүлтүүр ашигладаг.
  • Java Servlet шүүлтүүрүүд нь хүсэлтийг сервлет рүү илгээхээс өмнө таслан зогсоох, боловсруулах, кодыг нь дуусгасны дараа хариу өгөх, мөн контейнер хариуг үйлчлүүлэгч рүү илгээхээс өмнө Java-ийн залгаасын бүрэлдэхүүн хэсгүүд юм.

    Шүүлтүүрээр гүйцэтгэдэг нийтлэг ажлууд:

  • Файл бүртгэх хүсэлтийн параметрүүдийг бүртгэж байна.
  • Нөөцийн хүсэлтийг баталгаажуулах, зөвшөөрөл олгох.
  • Хүсэлтийн үндсэн хэсэг эсвэл толгой хэсгийг сервлет рүү илгээхийн өмнө форматлах.
  • Үйлчлүүлэгч рүү илгээсэн хариултын өгөгдлийг шахдаг.
  • Хариултыг өөрчлөх, зарим күүки нэмэх.
  • Java Servlet толгойн мэдээлэл.
  • Шүүлтүүрийг байршуулалтын тодорхойлогч файлд (web.xml) идэвхжүүлж, тохируулсан. Сервлет болон шүүлтүүрүүд бие биенийхээ талаар мэдэхгүй тул та web.xml-г засварлаж л шүүлтүүр нэмэх эсвэл устгах боломжтой. Нэг нөөцөд зориулж олон шүүлтүүртэй байх эсвэл web.xml-д зориулсан шүүлтүүрийн сүлжээ үүсгэх эсвэл javax.servlet.Filter интерфейсийг хэрэгжүүлсэн Java Servlet шүүлтүүрийг ажиллуулах боломжтой.

    Серверийн зэрэгцээ хүсэлтийг урсгалуудаар боловсруулдаг бөгөөд энэ нь вэбийн чухал чанарыг хангадаг - олон урсгал ба параллелизм.

    Үндсэн функцууд:

  • Зөөврийн чадвар. Java нь платформоос хамааралгүй учраас сервлетүүдийн хувьд ч мөн адил. Жишээлбэл, та үүнийг мэс заслын өрөөнд үүсгэж болно Windows системИнгэснээр GlassFish хөгжүүлэгчид үүнийг вэб сервер болгон ашиглах ба дараа нь apache Java Servlet вэб сервер бүхий Unix, Linux зэрэг бусад үйлдлийн системүүд дээр ажиллуулах боломжтой. Энэ функц нь түүнийг зөөврийн болгодог бөгөөд энэ нь CGI-аас гол давуу тал юм.
  • Үр ашиг, өргөтгөх чадвар. Сервлетийг байрлуулж, вэб серверт ачаалсны дараа тэр даруй үйлчлүүлэгчийн хүсэлтийг гүйцэтгэж эхлэх боломжтой. Энэ нь хөнгөн урсгалаар дуудагддаг тул Java-ийн олон урсгалтай функцийг ашиглан олон үйлчлүүлэгчийн хүсэлтийг нэгэн зэрэг бөглөх боломжтой. Сервер эхлүүлдэг CGI-ээс ялгаатай шинэ процессүйлчлүүлэгчийн хүсэлт бүрт.
  • Найдвартай байдал. Хог хаягдлыг цуглуулах, онцгой тохиолдлуудыг зохицуулах, Java аюулгүй байдлын менежер болон бусад шилдэг Java функцуудыг өвлөн авснаар менежментийн асуудал, санах ойн алдагдалд бага өртдөг. Энэ нь програмыг хөгжүүлэхэд аюулгүй бөгөөд алдаагүй болгодог.
  • Динамик вэб хуудсыг ашиглах хэрэгцээ

    Вэбсайт дээрх өгөгдөл байнга өөрчлөгддөг гэх мэт олон шалтгаан бий. Мэдээ, цаг агаарын сайтууд нь хөгжүүлэгчдийн байнгын анхаарал шаарддаггүй контентыг шинэлэг байлгахын тулд ихэвчлэн CGI-д тулгуурладаг. Одоогийн үнэ болон бараа материалын түвшинг жагсаасан цахим худалдааны вэб хуудсууд нь CGI-г ашиглан энэ агуулгыг компанийн дотоод дэд бүтцээс татан авч, эрэлт хэрэгцээний дагуу авдаг.

    Олон хэрэглэгчид CGI-д суурилсан вэб үйлчилгээг бий болгохын тулд Java технологийг ашиглаж байсан туршлагатай боловч Java Servlet нь уламжлалт CGI хувилбаруудаас илүү үр ашигтай, илүү хүчирхэг, ашиглахад хялбар, хямд байдаг.

    Java Servlet-ийн давуу талууд:

  • Үр ашиг. Уламжлалт CGI-д HTTP хүсэлт бүр шинэ CGI процессыг эхлүүлдэг. Хэдийгээр түүний кодыг төгс хэрэгжүүлсэн ч процесс эхлэхэд төдийгүй түүнийг хэрэгжүүлэх явцад ихээхэн хэмжээний нэмэлт зардал гардаг. Сервлет ашиглах үед JVM санах ойд ачаалагдсан хэвээр байх бөгөөд хүсэлт бүрийг Java урсгалаар боловсруулдаг. Java Servlet-ийн жишээ болгон, хэрэв уламжлалт CGI загварт X тооны зэрэгцээ хүсэлт байгаа бол энэ нь програмын код X олон удаа санах ойд ачаалагддаг гэсэн үг юм. Энэ нь вэб серверт хэт их ачаалал өгөх болно. Гэсэн хэдий ч, сервлет орчинд түүний ангийн зөвхөн нэг хуулбарыг ажиллуулдаг X урсгалууд байдаг. Энэ нь олон платформ дээр үр ашиг, өргөтгөх чадварыг нэмэгдүүлдэг.
  • Тав тухтай байдал. Програмыг ашиглах үед зөвхөн CGI функцийг гүйцэтгэхийн тулд Perl гэх мэт шинэ хэл сурах нь утгагүй юм. Нэмж дурдахад, сервлет нь HTML-тэй холбоотой олон даалгаврын хувьд баялаг дэд бүтэцтэй бөгөөд энэ нь хөгжүүлэлтийн процессыг ихээхэн хурдасгадаг.
  • Хүч чадал - Харамсалтай нь уламжлалт CGI скриптүүд нь хүссэн зүйлээ үлдээдэг. Жишээлбэл, тэдний ердийн програмууд вэб серверүүдтэй шууд харьцаж чадахгүй бөгөөд энэ нь бүхэл бүтэн интерфейсийг үүсгэх ёстой гэсэн үг юм. Сервлетүүд нь вэб серверүүдтэй шууд харилцаж, мэдээллийн дэлгүүрт шууд хандах шаардлагатай үйлдлүүдийг хялбаршуулдаг. Тэд бусад сервлетүүдтэй харилцаж, хүсэлтийн хооронд мэдээлэл хадгалах боломжтой тул сешн хянахыг маш энгийн болгож чаддагаараа онцлог юм.
  • Java-ийн зөөвөрлөх чадвар нь шууд сервлетт хүрдэг. Үнэн хэрэгтээ өнөөдөр ашиглагдаж буй бараг бүх томоохон вэб серверүүд Java Servlet-ийг шууд эсвэл залгаасаар дэмждэг.
  • Эдийн засаг. Хөгжлийн үүднээс авч үзвэл сервлетийг хэрэгжүүлэх нь вэб серверүүдтэй зөв харилцахын тулд тусгай кодчилол шаарддаг бусад сонголтуудаас хамаагүй хямд юм. Java Servlet чиглүүлэлт нь ажиллахад бэлэн бөгөөд динамик агуулгын ашиг тусыг алдагдуулахгүйгээр бизнесийн зардлыг бууруулж чадна.
  • Сервлетнь вэб програмын сервер талд ажилладаг java програм юм. Яг л аплетууд динамикаар өргөждөг шиг функциональ байдалВэб хөтчийн сервлет нь вэб серверийн үйл ажиллагааг динамикаар өргөжүүлдэг.

    Ажил сервлет"болон дараах байдлаар тайлбарлаж болно: үйлчлүүлэгчээс хүсэлт ирэхэд вэб сервер нь тусгай тохиргооны файлыг ашиглан аль сервлетийг гүйцэтгэх шаардлагатайг тодорхойлж чадна. Үүний дараа вэб сервер JVM-г ажиллуулдаг бөгөөд энэ нь эргээд Сервлет нь хүсэлтийг боловсруулж, агуулгыг сервер рүү (HTML хуудас хэлбэрээр) шилжүүлдэг.

    WEB сервер нь үндсэндээ ачаалдаг нэг төрлийн контейнер юм сервлет"s, тэдгээрийг гүйцэтгэж, үр дүнг нь хүлээн авсны дараа үйлчлүүлэгч рүү илгээдэг.

    Вэб програмын архитектур дахь Сервлет

    Түүний хүч чадал, уян хатан байдлаас шалтгаалан сервлет"s нь системийн архитектурт чухал үүрэг гүйцэтгэж чадна. Тэд дунд програм хангамжид зориулагдсан програмын даалгавруудыг гүйцэтгэж, үйлчлүүлэгчийн прокси үүрэг гүйцэтгэж, шинэ протокол болон бусад функцуудыг дэмжих замаар дунд програмын ажиллагааг сайжруулж чадна. Дунд програм Гурван шатлалт клиент-сервер систем гэж нэрлэгддэг програмын серверийн үүргийг гүйцэтгэдэг бөгөөд вэб хөтөч гэх мэт хөнгөн үйлчлүүлэгч болон мэдээллийн эх сурвалжийн хооронд байрладаг.

    Сервлет нь прокси сервер юм

    Апплетуудыг дэмжихийн тулд сервлетууд прокси болж ажиллах боломжтой. Java-ийн аюулгүй байдал нь апплетуудыг зөвхөн татаж авсан сервертээ холбох боломжийг олгодог учраас энэ нь чухал байж болох юм. Хэрэв апплет өөр машин дээр байрлах өгөгдлийн сангийн серверт холбогдох шаардлагатай бол, сервлетапплетад энэ холболтыг үүсгэж болно.

    Түр зуурын ба байнгын сервлет

    Үйлчлүүлэгчийн хүсэлт бүрийн хувьд сервлетийг эхлүүлж, зогсоож болно. Тэд мөн вэб сервер эхлэхэд ажиллуулж, зогсох хүртэл оршин тогтнох боломжтой. Түр зуурын сервлет"-ууд нь эрэлт хэрэгцээний дагуу ачаалагддаг бөгөөд ховор хэрэглэгддэг функцүүдэд зориулж серверийн нөөцийг хэмнэх сайн арга замыг санал болгодог. Байнгын сервлетүүд нь вэб сервер эхлэхэд ачаалагддаг бөгөөд зогсох хүртэл ажилладаг. Сервлетүүд нь серверийн байнгын өргөтгөл болгон суулгадаг. Хэрэв тэдгээр нь сервер талын байнгын ажиллагаатай (жишээ нь RMI үйлчилгээ) санал болгодог бол, эсвэл үйлчлүүлэгчийн хүсэлтэд аль болох хурдан хариу өгөх шаардлагатай тохиолдолд (өгөгдлийн сангийн холболтыг бий болгох гэх мэт) маш өндөр байдаг томилох. сервлет"мөн байнгын эсвэл түр зуурын; энэ нь вэб серверийг тохируулах функц юм.

    Сервлетийн амьдралын мөчлөг, javax.servlet.Servlet

    Сервлетүүд вэб серверийн платформ дээр вэб сервертэй ижил үйл явцын нэг хэсэг болгон ажилладаг. Вэб сервер нь сервлетийн жишээ бүрийг эхлүүлэх, дуудах, устгах үүрэгтэй. Вэб сервер нь сервлеттэй энгийн интерфейсээр харилцдаг: javax.servlet.Servlet.

    javax.servlet.Servlet интерфейс нь гурван үндсэн аргыг агуулдаг:

    • үүн дотор()
    • үйлчилгээ()
    • устгах()

    болон туслах хоёр арга:

    • getServletConfig()
    • getServletInfo()

    Интерфейсүүдийн ижил төстэй байдал сервлет"болон Java апплет нь ойлгомжтой. Энэ нь яг ийм байдлаар хийгдсэн! Java сервлет нь вэб хөтчүүдийн хувьд аплетууд нь вэб серверүүдэд байдаг. Аплет нь вэб хөтөч дээр ажиллаж, тусгай интерфейсээр дамжуулан өөрийн хүсэлтийн дагуу үйлдлүүдийг гүйцэтгэдэг. Сервлет нь Вэб сервер дээр ажиллахад ижил зүйл.

    Сервлет эхлүүлэх, init() арга

    Сервлетийг анх ачаалах үед init() аргыг дуудна. Энэ нь серверт файл нээх эсвэл серверүүдтэйгээ холболт үүсгэх зэрэг тохиргооны ажлыг хийх боломжийг серверт олгоно. Хэрэв сервлет сервер дээр байнга суулгасан бол сервер ажиллаж эхлэхэд ачаалагдана. Үгүй бол сервер нь үйлчлүүлэгчээс тухайн сервлетээр хангасан үйлчилгээг гүйцэтгэх анхны хүсэлтийг хүлээн авах үед серверийг идэвхжүүлдэг.

    Энэ арга нь баталгаатай үүн дотор()нь аргын дуудлага гэх мэт сервлет руу залгах ямар нэгэн дуудлагаас өмнө дуусна үйлчилгээ(). тэрийг тэмдэглэ үүн дотор()зөвхөн нэг удаа дуудагдах болно; Сервлетийг буулгаж, дараа нь сервер дахин ачаалах хүртэл энэ нь дуудагдахгүй.

    Арга үүн дотор()нэг аргумент авдаг - объектын лавлагаа ServletConfig, энэ нь сервлетийг эхлүүлэх аргументуудыг агуулдаг. Энэ объект нь аргатай getServletContext()объектыг буцаах ServletContext, сервлетийн орчны талаарх мэдээллийг агуулсан.

    Сервлетийн цөм, үйлчилгээ() арга

    Арга үйлчилгээ()нь сервлетийн зүрх юм. Үйлчлүүлэгчийн хүсэлт бүр нэг аргын дуудлагад хүргэдэг үйлчилгээ(). Энэ арга нь хүсэлтийг уншиж, ServletRequest болон ServletResponse гэсэн хоёр аргументыг ашиглан хариу мессеж үүсгэдэг:

    Тиймээс үйлчлүүлэгчээс сервлет рүү мэдээлэл дамжуулах хоёр арга бий. Эхнийх нь хүсэлтийн параметрүүд дэх утгыг дамжуулах явдал юм. Параметрийн утгыг URL-д оруулж болно. Үйлчлүүлэгчээс сервлет рүү мэдээлэл дамжуулах хоёр дахь арга бол InputStream (эсвэл Reader) юм.

    Энэ арга хэрхэн ажилладаг үйлчилгээ()үндсэндээ энгийн - энэ нь серверээс түүнд дамжуулагдсан үйлчлүүлэгчийн хүсэлт бүрт хариуг үүсгэдэг. Гэсэн хэдий ч, нэгэн зэрэг хэд хэдэн зэрэгцээ хүсэлт боловсруулагдаж болно гэдгийг санах хэрэгтэй. Хэрэв арга үйлчилгээ()файл, өгөгдлийн сан гэх мэт гадны ямар ч нөөцийг шаарддаг бол нөөцөд хандах хандалт нь урсгалтай байх ёстой.

    Сервлетийг буулгаж байна, destroy() арга

    Арга устгах()бүх нөөцийг суллахаар дуудагдсан (жишээлбэл, файлуудыг нээхболон өгөгдлийн сангийн холболтууд) сервлетийг буулгахаас өмнө. Хэрэв дуусгах үйлдлийг хийх шаардлагагүй бол энэ арга нь хоосон байж болно. Аргыг дуудахын өмнө устгах()сервер нь засвар үйлчилгээний бүх үйлдлийг дуусгах эсвэл тодорхой хугацаа дуусахыг хүлээнэ. Энэ нь арга гэсэн үг устгах()урт хугацааны зарим аргыг гүйцэтгэх явцад дуудаж болно үйлчилгээ().

    Энэ аргыг албан ёсны болгох нь чухал юм устгах()бүх дуудлага хүртэл шаардлагатай нөөцийг хаахаас зайлсхийхийн тулд үйлчилгээ()дуусгахгүй.

    Сервлетийн тохиргоо, getServletConfig() арга

    Арга getServletConfig()интерфэйсийг хэрэгжүүлдэг объектын лавлагааг буцаана ServletConfig. Энэ объект нь сервлетийн тохиргооны талаарх мэдээлэлд хандах боломжийг олгодог, өөрөөр хэлбэл. сервлет эхлүүлэх параметрүүд болон сервлет контекст объект руу хандах ServletContext, энэ нь сервлет болон түүний орчинд хандах боломжийг олгодог.

    Сервлетийн мэдээлэл, getServletInfo() арга

    Арга getServletInfo()Сервлетийн зохиогч болон хувилбар зэрэг сервлетийн талаарх мэдээллийг агуулсан мөрийг буцаахын тулд сервлетийг үүсгэсэн программист тодорхойлсон.

    ServletRequest интерфейс

    ServletRequest нь серверт HTTP хүсэлтийн параметрүүдийн талаарх үйлчлүүлэгчийн мэдээллийг өгдөг, i.e. параметрийн нэр, утга, шинж чанар, оролтын урсгал зэрэг өгөгдлийг өгдөг. Энэ мэдээлэл нь арга руу шилждэг үйлчилгээ().

    Дараачийн сервлетийн жишээпараметрээс хэрхэн мэдээлэл авахыг харуулж байна хүсэлтарга үйлчилгээ():

    BufferedReader уншигч; Мөр параметр1; Мөр параметр2; нийтийн хүчингүй үйлчилгээ(ServletRequest хүсэлт, ServletResponse хариулт) (уншигч = request.getReader(); param1 = request.getParameter("Эхний"); param2 = request.getParameter("Хоёр дахь"); )

    Хүсэлтийн талаарх нэмэлт мэдээллийг сервлетт аргуудаар дамжуулан авах боломжтой бөгөөд тэдгээрийн үндсэн аргуудыг дараах хүснэгтэд үзүүлэв.

    getAttribute() Энэ хүсэлтийн заасан атрибутын утгыг буцаана.
    getContentLength() Мэдэж байгаа бол хэмжээсийг хүсэх.
    getContentType() Хүсэлтийн үндсэн хэсгийн MIME төрлийг буцаана.
    getInputStream() Хүсэлтийн үндсэн хэсгээс хоёртын өгөгдлийг унших InputStream-ийг буцаана.
    GetParameterNames() Бүх параметрийн нэр бүхий мөрийн массивыг буцаана.
    getParameterValues() Заасан параметрийн утгын массивыг буцаана.
    getProtocol() Хүсэлтийн протокол болон хувилбарыг маягтын мөр болгон буцаана /..
    getReader() Хүсэлтийн үндсэн хэсгээс текстийг татахын тулд BufferedReader-ийг буцаана.
    getRealPath() Заасан виртуал замын жинхэнэ замыг буцаана.
    getRemoteAddr() Энэ хүсэлтийг илгээсэн үйлчлүүлэгчийн IP хаяг.
    getRemoteHost() Хост нэр үйлчлүүлэгч машинхэн энэ хүсэлтийг илгээсэн.
    getScheme() Энэ хүсэлтийн URL-д ашигласан схемийг буцаана (жишээ нь, https, http, ftp гэх мэт).
    getServerName() Энэ хүсэлтийг хүлээн авсан серверийн хостын нэр.
    getServerPort() Энэ хүсэлтийг хүлээн авахад ашигласан портын дугаарыг буцаана.

    ServletResponse интерфейс

    Интерфэйс ServletResponseүйлчлүүлэгч рүү өгөгдөл дамжуулах хэрэгсэл юм. Энэ асуудлыг шийдэхийн тулд энэ хэрэгслийн бүх аргыг тусгайлан ашигладаг:

    Нийтийн java.lang.String getCharacterEncoding() public void setLocale(java.util.Locale loc) нийтийн java.util.Locale getLocale()

    Эхний арга нь мэдээллийг харуулах MIME кодчилолын төрлийг (жишээ нь, UTF8) буцаана. Хоёрдахь хоёр арга нь тэмдэгттэй ажилладаг. Эдгээр нь баримт бичигт ашигласан хэлийг (жишээлбэл, орос хэл) заадаг.

    Public ServletOutputStream getOutputStream() нь java.io.IOException-г шиддэг.

    getOutputStream арга нь сервлетийн гаралтын урсгалыг буцаана. Энэ урсгалыг жишээ нь хоёртын файл гаргахад ашигладаг. Текст өгөгдлийг java.io.Writer ашиглан гаргаж болно:

    Нийтийн java.io.PrintWriter getWriter() нь java.io.IOException-ийг шиддэг.

    getWriter() арга нь getCharacterEncoding() болон getLocale() аргуудад заасан тэмдэгтийн багц руу мөрүүдийг автоматаар хөрвүүлдэг.

    Нийтийн хүчингүй багцContentLength(int len)

    setContentLength арга нь "Content-Length" HTTP толгойн талбарын утгыг тохируулдаг.

    Нийтийн хүчингүй багцContentType(Мөрийн төрөл)

    setContentType аргыг баримт бичгийн MIME агуулгын төрлийг илгээхэд ашигладаг. HTTP толгойн талбар "Агуулгын төрөл".

    Гаралтын өгөгдлийн урсгал нь буферт байна. Энэ нь буфер дүүрсний дараа л нэг хэсэг өгөгдлийг үйлчлүүлэгчид олгоно гэсэн үг.

    Public void setBufferSize(int size) public int getBufferSize() public void flushBuffer() нь java.io.IOException public void resetBuffer() шиддэг.

    Дээрх 4 арга нь илгээх буферийн хэмжээг тохируулах, хэмжээг нь авах, буферийн агуулгыг бөглөхийг хүлээлгүйгээр үйлчлүүлэгч рүү илгээхийг эхлүүлэх, мөн энэ буферийг өгөгдлөөс цэвэрлэх боломжийг олгодог.

    Нийтийн логикийн үүрэг хүлээсэн()

    isCommitted аргыг ашигласнаар та үйлчлүүлэгч рүү өгөгдөл илгээж эхэлсэн эсэхийг харуулсан тугийг авах боломжтой. Хэрэв HTTP хариултын толгойг аль хэдийн илгээсэн бол туг эерэг байх болно.

    Нийтийн хүчингүйг дахин тохируулах()

    Хэрэв HTTP толгойг хараахан илгээгээгүй бол дахин тохируулах арга нь HTTP толгой хэсгийг анхдагч утга руу нь "дахин тохируулна".

    Сервлет дэх JFreeChart диаграмууд

    JFreeChart график номын санг сервлетт ашиглаж диаграмм үүсгэж, вэбсайтын хуудсан дээр зураг хэлбэрээр харуулах боломжтой. Сервлет дээр JFreeChart ашиглах тайлбар болон жишээнүүдийн дэлгэрэнгүйг үзүүлэв.

    Chart.js график сан бүхий сервлет

    Сервлет дэх JNI

    Зарим тохиолдолд WEB програмд ​​JNI ашиглах шаардлагатай байж болно. Сервлет дээр JNI ашиглах жишээг үзүүлэв.

    Сервлет дэх JMS мессежүүд

    Сервлетийг харилцахад ашиглаж болно JMSпрограмуудын хоорондох мессежүүд. JBoss контейнерт JMS мессеж илгээх, уншихад сервлет ашиглах жишээг үзүүлэв.

    Сервлет нь вэб програмын сервер талд ажилладаг Java програмууд юм. Апплетууд вэб хөтчийн функцийг динамикаар өргөжүүлдэгтэй адил сервлет нь вэб серверийн үйл ажиллагааг динамикаар өргөтгөдөг. Хэдийгээр сервлет нь ямар ч хүсэлтэд үйлчлэх боломжтой ч вэб серверүүдийг өргөтгөхөд ихэвчлэн ашиглагддаг. Ийм програмуудын хувьд Java Servlet технологи нь HTTP тусгай сервлет ангиллыг тодорхойлдог. javax.servlet болон javax.servlet.http багцууд нь сервлет үүсгэх интерфэйс болон ангиудыг хангадаг.

    • Вэб төслийн бүтэц ямар байдаг вэ?

    • Сервлет контейнер гэж юу вэ? Сервлетийн амьдралын мөчлөг.

    Сервлет контейнер нь сервлетүүдийн амьдралын мөчлөгийг удирддаг програм юм.
    Сервлетийн амьдралын мөчлөг: үүнийг сервлет контейнерээр удирддаг, анх удаа сервлет руу нэвтрэх үед санах ойд ачаалагдаж, init() аргыг дууддаг. Програмын үйл ажиллагааны туршид үйлчлүүлэгчийн хүсэлтийг боловсруулахын тулд service() арга руу залгах болно. Аппликейшн дуусахад destroy() аргыг дуудаж, сервлетийг санах ойноос буулгана.

    • Сервлет контейнерийн даалгавар, функц юу вэ?

    Сервлет контейнер нь бүрэн бие даасан вэб серверийн үүрэг гүйцэтгэх, Apache гэх мэт өөр вэб серверт хуудас үйлчилгээ үзүүлэх эсвэл Java EE програмын серверт нэгтгэгдэх боломжтой. Сервлет болон үйлчлүүлэгчдийн хооронд өгөгдөл солилцох боломжийг олгодог, үүсгэх гэх мэт функцуудыг гүйцэтгэдэг програм хангамжийн орчинажиллаж байгаа сервлетийн хувьд үйлчлүүлэгчдийг таньж, зөвшөөрч, тус бүрдээ сесс зохион байгуулна.

    • sendRedirect() болон forward() хоёрын ялгаа юу вэ?

    Харьцангуй замыг ашиглан JSP-г дуудахын тулд үнэмлэхүй замыг ашиглан JSP-д хандахын тулд forward() аргыг ашигладаг. Эдгээр аргуудын ялгаа нь forward() аргын тусламжтайгаар аль хэдийн байгаа хүсэлтийн хүсэлтийн объектыг дамжуулж, sendRedirect() аргыг дуудах үед шинэ хүсэлт үүснэ. Сүүлчийн тохиолдолд мэдээллийг бусад объектуудтай хамт дамжуулах ёстой. Үүнээс гадна forward() арга нь илүү хурдан ажилладаг.

    • Сервлет шүүлтүүрийн талаар та юу мэдэх вэ?

    Шүүлтүүрийн интерфэйсийг хэрэгжүүлснээр хүсэлтийг таслан зогсоож, үйлчлүүлэгчийн хүсэлтийн толгой хэсэг болон агуулгыг өөрчлөх боломжтой объектыг үүсгэх боломжийг олгодог. Шүүлтүүр нь хүсэлт эсвэл хариулт үүсгэдэггүй, зөвхөн тэдгээрийг өөрчилдөг. Шүүлтүүр ажилладаг урьдчилсан эмчилгээхүсэлтийг сервлетт хүрэхээс өмнө, дараа нь (шаардлагатай бол) сервлетээс ирсэн хариуг боловсруулна. Шүүлтүүр нь харилцаж болно янз бүрийн төрөлнөөц, ялангуяа сервлет болон JSP хуудсууд. Сервлет шүүлтүүрүүд нь:

    • сервлетийг эхлүүлэхээс өмнө сервлетийн эхлэлийг таслан зогсоох.
    • сервлетийг эхлүүлэхээс өмнө хүсэлтийн агуулгыг тодорхойлох.
    • Ирж буй хүсэлтийг багцалсан хүсэлтийн толгой хэсэг болон өгөгдлийг өөрчлөх.
    • хүлээн авсан хариултыг багцалсан хариултын толгой болон өгөгдлийг өөрчлөх.
    • сервлетэд хандсаны дараа сервлет эхлүүлэхийг таслан зогсоох.

    Сервлет шүүлтүүрийг нэг сервлет эсвэл бүлэг сервлет дээр ажиллахаар тохируулж болно. Шүүлтүүр үүсгэх үндэс нь javax.servlet.Filter интерфейс бөгөөд гурван аргыг хэрэгжүүлдэг:

    • void init(FilterConfig config) ServletException-г шиддэг;
    • хүчингүй устгах();
    • void doFilter(ServletRequest хүсэлт, ServletResponse хариулт, FilterChain гинж) IOException, ServletException шиддэг;

    init() аргыг шүүлтүүр ажиллаж эхлэхээс өмнө дуудаж, шүүлтүүрийн тохиргооны объектыг тохируулна. doFilter арга нь шүүлтүүрийн бодит ажлыг гүйцэтгэдэг. Тиймээс сервер шүүлтүүрийг ажиллуулахын тулд init()-г нэг удаа дууддаг ба дараа нь шүүлтүүрт шууд хүсэлт илгээгдэх тусам doFilter()-г дууддаг. Шүүлтүүр ажлаа дуусгасны дараа destroy() аргыг дуудна.

    • Бидэнд яагаад сервлет дээр сонсогч хэрэгтэй байна вэ?

    Контекст болон сессийн сонсогчид нь контекст эсвэл сессийг хэзээ эхлүүлсэн эсвэл тэдгээрийг хэзээ устгах, контекст эсвэл сессэд атрибут нэмсэн эсвэл устгасан зэргийг хянах боломжтой ангиуд юм. Сервлет 2.4 нь хүсэлтийг хэрхэн үүсгэж, устгаж, атрибутуудыг сервлетэд хэрхэн нэмж, устгаж байгааг хянах боломжийг олгосноор хүсэлтийг сонсогчийн загварыг өргөтгөдөг. Servlet 2.4 нь дараах ангиллыг нэмсэн:

    • ServletRequestListener
    • ServletRequestEvent
    • ServletRequestAttributeListener
    • ServletRequestAttributeEvent

    • Аппликешн дэх өөр сервлетээс гаргасан үл хамаарах зүйлсийг хэрхэн зохицуулах вэ?

    Хөтөч нь зөвхөн HTML хэлийг ойлгодог тул програм нь онцгой тохиолдол гаргах үед сервлетийн контейнер нь үл хамаарах зүйлийг зохицуулж, үүсгэх болно. HTML хариулт. Энэ нь 404, 403 гэх мэт алдааны кодуудад тохиолддог зүйлтэй төстэй юм. Servlet API нь үл хамаарах зүйлүүд болон алдаануудыг зохицуулах эх сервлетүүдэд дэмжлэг үзүүлдэг бөгөөд үүнийг бид байршуулалтын тодорхойлогч дээр зааж өгч болно. Ийм сервлетүүдийн гол үүрэг бол алдаа эсвэл үл хамаарах зүйлийг зохицуулж, хэрэглэгч рүү тодорхой HTML хариулт илгээх явдал юм. Жишээлбэл, та холбоосыг өгч болно нүүр хуудас, түүнчлэн алдааны талаарх зарим дэлгэрэнгүй тайлбар.

    • Байршуулах тодорхойлогч гэж юу вэ?

    Байршуулах тодорхойлогч нь сервлет контейнерт байршуулах олдворын тохиргооны файл юм. Тодорхойлолтод Java платформ Enterprise Edition байршуулалтын тодорхойлогч нь бүрэлдэхүүн хэсэг, модуль эсвэл програмыг (вэб эсвэл байгууллагын програм гэх мэт) хэрхэн байрлуулахыг тайлбарладаг.

    Энэхүү тохиргооны файл нь тодорхой тохиргоо, аюулгүй байдлын сонголт бүхий модуль эсвэл програмыг байршуулах сонголтыг тодорхойлж, тохиргооны тодорхой шаардлагуудыг тодорхойлдог. Байршуулах тодорхойлогч файлуудын синтакс нь XML ашигладаг.

    • Аппликейшн эхлүүлснээр сервлет эхлүүлэхийг хэрхэн хэрэгжүүлэх вэ?

    Сервлетийн контейнер нь ихэвчлэн эхний үйлчлүүлэгчийн хүсэлтээр сервлетийг ачаалдаг боловч заримдаа програм эхлэх үед сервлетийг ачаалах шаардлагатай болдог (жишээлбэл, хэрэв сервлет том бөгөөд ачаалахад удаан хугацаа шаардагдана). Үүнийг хийхийн тулд та тодорхойлогч дахь ачаалах элементийг (эсвэл loadOnStartup тэмдэглэгээ) ашиглах ёстой бөгөөд энэ нь эхлүүлэх үед сервлетийг ачаалах эсэхийг зааж өгөх болно.

    Утга нь int байх ёстой. Хэрэв утга нь сөрөг байвал үйлчлүүлэгчийн хүсэлтээр сервлет ачаалагдах ба 0 ба түүнээс дээш бол програмын эхэнд ачаалагдах болно. Энэ тоо бага байх тусам сервлет нь татаж авах дараалалд байх болно.

    • ServletConfig объект гэж юу вэ?

    Javax.servlet.ServletConfig интерфэйс нь тохиргооны мэдээллийг серверт дамжуулахад ашиглагддаг. Сервлет бүр өөрийн гэсэн ServletConfig объекттой бөгөөд үүнийг сервлетийн контейнер үүсгэх үүрэгтэй. Тохируулгын параметрүүдийг тохируулахын тулд web.xml (эсвэл WebInitParam тэмдэглэгээ) доторх init параметрүүдийг ашиглана уу. getServletConfig() аргыг тухайн сервлетийн ServletConfig объектыг олж авахад ашигладаг.

    • ServletContext объект гэж юу вэ?

    javax.servlet.ServletContext интерфэйс нь сервлетийн сервертэй харилцахдаа ашигладаг, жишээлбэл, файлын MIME төрлийг авах, хүсэлт илгээх, бүртгэлийн файлд бичих зэрэг аргуудын багцыг тодорхойлдог. ServletContext объект нь өвөрмөц бөгөөд вэб програмын бүх сервлетэд ашиглах боломжтой. Бид вэб програмын эхлүүлсэн параметрүүдэд нэг буюу хэд хэдэн сервлетт хандах шаардлагатай үед ServletContext объектыг ашиглаж болно. Үүний тулд элементийг ашигладаг web.xml дээр. ServletContext объектыг ServletConfig интерфейс дээрх getServletContext() аргыг ашиглан авч болно.

    Сервлетийн контейнерууд нь сервлетийн бүлэгт өвөрмөц контекст объектуудыг өгөх боломжтой. Бүлэг бүр өөрийн хост замын URL-уудтай холбоотой байх болно.

    ServletContext нь Servlet 3-ын тодорхойлолтод өргөтгөсөн бөгөөд хангадаг програм хангамжийн нэмэлтпрограм дахь сонсогчид болон шүүлтүүрүүд. Энэ интерфэйс нь getMimeType(), getResourceAsStream() гэх мэт олон ашигтай аргуудтай.

    • ServletContext болон ServletConfig хоёрын ялгаа нь юу вэ?

    Зарим ялгааг доор харуулав.

    • ServletConfig нь сервлет тус бүрийн өвөрмөц объект бөгөөд ServletContext нь бүх програмын хувьд өвөрмөц юм.
    • ServletConfig нь сервлетийг эхлүүлэх параметрүүдийг хангахад хэрэглэгддэг ба ServletContext нь бүх сервлетүүдэд програм эхлүүлэх параметрүүдийг хангахад ашиглагддаг.
    • Бид ServletConfig объектод атрибутуудыг тохируулах чадваргүй, харин бусад сервлетүүдэд ашиглах боломжтой шинж чанаруудыг ServletContext объектод тохируулах боломжтой.

    • ServletResponse интерфейс.

    ServletResponse интерфейс нь үйлчлүүлэгч рүү өгөгдөл дамжуулах хэрэгсэл юм. Энэ хэрэгсэлд байгаа бүх аргууд нь яг энэ зорилгод нийцдэг.

    • ServletRequest интерфейс.

    ServletRequest интерфейс нь HTTP хүсэлтийн параметрүүдийг хүлээн авах хэрэгсэл юм. Энэ интерфэйс нь ServletContext-тэй нэр болон зорилгын хувьд ижил төстэй аргуудтай.

    • Хүсэлтийн диспетчер гэж юу вэ?

    RequestDispatcher интерфэйс нь хүсэлтийг өөр эх сурвалж руу дамжуулахад ашиглагддаг (энэ нь HTML, JSP эсвэл ижил програмын өөр сервлет байж болно). Бид үүнийг хариуд өөр эх сурвалжаас контент нэмэхэд ашиглаж болно. Энэ интерфэйс нь ижил контекст дэх сервлет хоорондын дотоод харилцаанд ашиглагддаг. Интерфейс нь хоёр аргыг хэрэгжүүлдэг:

    • void forward(ServletRequest var1, ServletResponse var2) - сервер дээрх өөр эх сурвалж руу (сервлет, JSP эсвэл HTML файл) хүсэлтийг дамжуулдаг.
    • хүчингүй оруулах (ServletRequest var1, ServletResponse var2) - нөөцийн агуулгыг (сервлет, JSP эсвэл) агуулдаг HTML хуудас) хариуд нь.

    Интерфэйс рүү ServletContext getRequestDispatcher(String s) аргыг ашиглан хандаж болно. Зам нь / -р эхлэх ёстой бөгөөд энэ нь одоогийн контекстийн үндсэн замтай харьцуулахад тайлбарлагдана.

    • Сервлет дээр хэрхэн мухардлыг үүсгэж болох вэ?

    Давталтын аргын дуудлагыг хэрэгжүүлснээр, жишээ нь doGet() аргын doPost() аргыг дуудаж, doPost() аргын doGet()-г дуудснаар түгжрэлд орж болно.

    • Сервер дээрх сервлетийн хаягийг хэрхэн авах вэ?

    Сервер дээрх бодит сервлет замыг авахын тулд та энэ бүтцийг ашиглаж болно: getServletContext().getRealPath(request.getServletPath()).

    • Сервлетээс серверийн мэдээллийг хэрхэн авах вэ?

    GetServerInfo() аргыг ашиглан ServletContext объектыг ашиглан серверийн мэдээллийг авч болно. Тэдгээр. getServletContext().getServerInfo().

    • Үйлчлүүлэгчийн IP хаягийг сервер дээр хэрхэн авах вэ?

    Сервлет дотор үйлчлүүлэгчийн IP-г авахын тулд request.getRemoteAddr()-г ашиглана уу.

    • Сервлет ороох ангийн талаар та юу мэдэх вэ?

    Servlet HTTP API нь HttpServletRequestWrapper ба HttpServletResponseWrapper гэсэн хоёр боодлын ангиллыг хангадаг. Тэд хөгжүүлэгчдэд сервлетийн хүсэлт болон хариултын төрлүүдийг хэрэгжүүлэхэд нь тусалдаг. Бид эдгээр ангиудыг өргөтгөж, зөвхөн өөрийн хариу үйлдэл болон хүсэлтийн объектын төрлийг хэрэгжүүлэхэд шаардлагатай аргуудыг хүчингүй болгож чадна. Эдгээр ангиудыг стандарт сервлет програмчлалд ашигладаггүй.

    Java-ийн хамгийн сайн талуудын нэг нь түүний олон талт шинж чанар юм. Мэдээжийн хэрэг, уламжлалт ширээний компьютерийг бий болгох, тэр ч байтугай гар утасны програмууд- Энэ үнэхээр сайхан. Харин та замаасаа гарч, хөгжлийн газар руу орохыг хүсвэл яах вэ? вэб програмууд Java дээр? Таны хувьд сайн мэдээ бол энэ хэл нь бүрэн эрхт Servlet API-тай хамт ирдэг бөгөөд энэ нь танд найдвартай вэб програмуудыг хялбархан үүсгэх боломжийг олгодог.

    Сервлет ашиглан Java програмуудыг бүтээх

    Тиймээс бид аль хэдийн бий болгосон тохиргооны файлуудпрограмууд. Гэсэн хэдий ч одоогийн байдлаар энэ нь юу ч хийхгүй байна. Бид үйлчлүүлэгчдийг HTML маягт ашиглан бүртгүүлэх боломжтой байхыг хүсч байгаа тул бидний хийх дараагийн зүйл бол бүртгэл амжилттай дууссаны дараа дээрх маягт болон үйлчлүүлэгчийн дэлгэрэнгүй мэдээллийг харуулах JSP файлуудыг үүсгэх явдал юм. Үүнийг бид одоо хийх болно.

    Бид гадаад үзэмж дээр ажиллаж байна

    Програмын харагдах байдлыг хоёр JSP файлаар тодорхойлно - MVC контекстэд эдгээрийг харагдац гэж нэрлэдэг. Эхнийх нь бүртгэлийн маягтыг харуулах үүрэгтэй болзошгүй алдаанууд, оруулсан өгөгдлийг шалгасны дараа дуудсан. Хоёр дахь нь бүртгэлийн үйл явц амжилттай дууссаны дараа хэрэглэгчийн оруулсан дэлгэрэнгүй мэдээллийг харуулах ердийн мэндчилгээний хуудас байх болно.

    Энд анхны JSP файл байна:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Бүртгэл

    Бүртгэл

    $(зөрчил).