JavaRush /จาวาบล็อก /Random-TH /เจเอสพีคืออะไร? มาสำรวจความเป็นไปได้ในทางปฏิบัติกันดีกว่า...
Анзор Кармов
ระดับ
Санкт-Петербург

เจเอสพีคืออะไร? มาสำรวจความเป็นไปได้ในทางปฏิบัติกันดีกว่า

เผยแพร่ในกลุ่ม
JSP หรือ Java Server Pages เป็นเทคโนโลยี Java ที่ช่วยให้คุณสามารถสร้างเว็บเพจไดนามิกสำหรับแอปพลิเคชัน Java ในบทความนี้ เราจะพูดถึงรายละเอียดเพิ่มเติมเกี่ยวกับ JSP คืออะไร อภิปรายการความสามารถบางอย่างของเทคโนโลยีนี้ ดูโครงสร้างของเพจ JSP และพยายามพิจารณาเชิงปฏิบัติว่า Java Server Pages เหล่านี้คืออะไร เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 1แต่ก่อนอื่น เรามาพูดถึงประโยชน์และความสำคัญของ JSP กันก่อน JSP อนุญาตให้นักพัฒนา:
  • รับข้อมูลจากหน้าเว็บเป็นโค้ด Java
  • ส่งข้อมูลจากโค้ด Java ไปยังหน้าเว็บ
  • เขียนโค้ด Java โดยตรงภายใน html (แต่คุณไม่ควรละเมิดสิ่งนี้)
ความต้องการความรู้ JSP สามารถประเมินได้ค่อนข้างสูงด้วยเหตุผลหลายประการ:
  • JSP เป็นหนึ่งในเทคโนโลยีเว็บ Java หลัก
  • JSP ถูกนำมาใช้กันอย่างแพร่หลายในบริษัทและโครงการส่วนใหญ่
  • JSP ผสานรวมกับเซิร์ฟเล็ต Java ภายในคอนเทนเนอร์เซิร์ฟเล็ตได้อย่างราบรื่น

คำจำกัดความของ JSP

ต่อไปนี้เป็นคำจำกัดความจาก Wikipedia: JSP (JavaServer Pages)เป็นเทคโนโลยีที่ช่วยให้นักพัฒนาเว็บสามารถสร้างเนื้อหาที่มีส่วนประกอบทั้งแบบคงที่และไดนามิก เพจ JSP มีข้อความสองประเภท: ข้อมูลต้นฉบับคงที่ ซึ่งสามารถอยู่ในรูปแบบข้อความรูปแบบใดรูปแบบหนึ่ง HTML, SVG, WML หรือ XML และองค์ประกอบ JSP ซึ่งสร้างเนื้อหาแบบไดนามิก นอกจากนี้ สามารถใช้ไลบรารีแท็ก JSP ได้ เช่นเดียวกับ Expression Language (EL) เพื่อฝังโค้ด Java ลงในเนื้อหาสแตติกของเพจ JSP โค้ดเพจ JSP ได้รับการแปลเป็นโค้ดเซิร์ฟเล็ต Java โดยใช้คอมไพเลอร์เพจ Jasper JSP จากนั้นคอมไพล์เป็นโค้ดไบต์ Java Virtual Machine (JVM) คอนเทนเนอร์ Servlet ที่สามารถเรียกใช้งานเพจ JSP นั้นเขียนด้วยภาษา Java ที่ไม่ขึ้นกับแพลตฟอร์ม เทคโนโลยี JSP เป็นเทคโนโลยีที่ไม่ขึ้นกับแพลตฟอร์ม แบบพกพา และขยายได้ง่ายสำหรับการพัฒนาเว็บแอปพลิเคชัน

โครงสร้างหน้า JSP

โดยทั่วไป JSP หมายถึงหน้าเว็บไดนามิกซึ่งส่วนไดนามิกถูกสร้างขึ้นโดยใช้ Java และส่วนคงที่ถูกสร้างขึ้นโดยใช้ภาษามาร์กอัป ซึ่งส่วนใหญ่มักจะเป็น HTML หน้าดังกล่าวเป็นเอกสารข้อความที่มีนามสกุล .jsp ซึ่งเขียนด้วยภาษามาร์กอัปภาษาใดภาษาหนึ่ง (เช่น HTML, SVG, WML และ XML) สลับกับองค์ประกอบ JSP (หรือแท็ก JSP) แท็กเหล่านี้มีการเรียกรหัสเซิร์ฟเวอร์ (ข้อมูล) และยังทำการคำนวณบางอย่างด้วย ไฟล์เหล่านี้ได้รับการประมวลผลบนเซิร์ฟเวอร์ ซึ่งส่งผลให้แท็ก JSP ทั้งหมดถูกแปลงเป็นแท็ก html และเอาต์พุตจะเป็นหน้า html ปกติ แผนภาพด้านล่างแสดงแผนภาพโครงสร้างของเพจ JSP และการโต้ตอบกับเซิร์ฟเวอร์ เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 2ตัวอย่างของเพจ JSP แบบง่าย:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
ในตัวอย่างนี้ นิพจน์ JSP ที่เขียนด้วยภาษาพิเศษExpression Language (EL) จะถูก "ฝัง" ไว้ภายใน โค้ด html เป็นกลไกที่สำคัญสำหรับการโต้ตอบระหว่างเลเยอร์การนำเสนอ (เว็บเพจ) และเลเยอร์ตรรกะทางธุรกิจของแอปพลิเคชัน (โค้ด Java) ดังที่คุณเห็นจากตัวอย่าง นิพจน์ JSP อยู่ในวงเล็บปีกกา โดยมีเครื่องหมายดอลลาร์นำหน้า${...}- ทุกอย่างที่อยู่ภายในเครื่องหมายปีกกาจะได้รับการประเมินบนเซิร์ฟเวอร์ และผลลัพธ์ของนิพจน์นี้จะได้รับในรูปแบบ html ในตำแหน่งที่นิพจน์ JSP ถูกกำหนดไว้ตั้งแต่แรก หลังจากประมวลผลแท็กทั้งหมดแล้ว หน้าเว็บจะมีลักษณะดังนี้:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

การติดตั้งและรันคอนเทนเนอร์เซิร์ฟเล็ต

เนื่องจากโค้ด JSP ถูกแปลเป็นโค้ด Java servlet เราจำเป็นต้องมีคอนเทนเนอร์เซิร์ฟเล็ตบางประเภทที่ไหนสักแห่งเพื่อที่เราจะได้พูดคุยเกี่ยวกับวิธีการทำงานของ JSP มิฉะนั้น หากไม่มีคอนเทนเนอร์ JSP จะไม่ทำงาน แต่ก่อนอื่น เรามาดูคำจำกัดความของคอนเทนเนอร์เซิร์ฟเล็ตกันก่อน เซิร์ฟเล็ตคอนเทนเนอร์คือโปรแกรมที่เป็นเซิร์ฟเวอร์ที่ให้การสนับสนุนระบบสำหรับเซิร์ฟเล็ตและรับรองวงจรชีวิตตามกฎที่กำหนดไว้ในข้อกำหนด สามารถทำงานเป็นเว็บเซิร์ฟเวอร์อิสระเต็มรูปแบบ เป็นผู้ให้บริการเพจสำหรับเว็บเซิร์ฟเวอร์อื่น หรือรวมเข้ากับแอปพลิเคชันเซิร์ฟเวอร์ Java EE หนึ่งในเซิร์ฟเล็ตคอนเทนเนอร์ที่ได้รับความนิยมมากที่สุดคือ Apache Tomcat เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 3เป็นที่น่าสังเกตว่า Tomcat ไม่ใช่แอปพลิเคชันเซิร์ฟเวอร์ Java EE ที่มีคุณสมบัติครบถ้วน อย่างไรก็ตาม สำหรับความต้องการที่สำคัญของเซิร์ฟเล็ตและเพจ JSP เซิร์ฟเวอร์ Tomcat ก็เพียงพอแล้ว มาเริ่มการติดตั้งกัน คุณสามารถดาวน์โหลด Tomcat ได้จากหน้าอย่างเป็นทางการ สำหรับ Windows OS คุณสามารถติดตั้ง Tomcat ได้ดังนี้:
  1. ดาวน์โหลดตัวติดตั้งบริการ Windows 32 บิต/64 บิต

  2. มารันไฟล์กันเถอะ

  3. จากนั้นทำตามขั้นตอนการติดตั้งตามปกติ:

    1. อย่าลืมทำเครื่องหมายที่ช่องตัวอย่างในหน้าต่างตัวติดตั้งที่เกี่ยวข้อง:

      เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 4
    2. และระบุเส้นทางไปยัง JRE ที่ติดตั้งไว้ล่วงหน้า:

      เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 5
  4. หลังการติดตั้ง ให้เปิด Tomcat และเปิดเบราว์เซอร์ ไปที่http://localhost:8080 /

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

แอปพลิเคชั่นสาธิต วัตถุที่ซ่อนอยู่

มาดูคุณสมบัติการทำงานของ JSP กันบ้าง หนึ่งในนั้นคือการเข้าถึงสิ่งที่เรียกว่าวัตถุที่ซ่อนอยู่ ( วัตถุโดยนัย ) สิ่งเหล่านี้คือออบเจ็กต์ที่สามารถเข้าถึงได้โดยใช้ Expression Language (EL) ตัวอย่างของออบเจ็กต์ดังกล่าว ได้แก่ ส่วนหัว HTTP หรือพารามิเตอร์ URL มาเปิดเผย (หรือรีเฟรชหน่วยความจำของเรา) ว่าพารามิเตอร์ URL คืออะไร ตัวอย่างด้านล่างแสดง URL พร้อมพารามิเตอร์ พารามิเตอร์เป็นตัวหนา: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom พารามิเตอร์จะขึ้นต้นด้วยเครื่องหมายคำถาม (?) เสมอ ตามด้วยชื่อของพารามิเตอร์ ตามด้วยเครื่องหมายเท่ากับ - ค่าของพารามิเตอร์จะถูกกำหนด อาจมีพารามิเตอร์หลายตัวหรือหนึ่งตัวก็ได้ หากมีมากกว่าหนึ่ง คู่ชื่อ-ค่าแต่ละคู่จะถูกคั่นด้วยอักขระเครื่องหมายและ (&) ในตัวอย่างข้างต้น มีการกำหนดพารามิเตอร์หลายตัวและค่าของมัน:
ชื่อพารามิเตอร์ ค่าพารามิเตอร์
พารามิเตอร์1 ค่า1
พารามิเตอร์2 ค่า2
1
ชื่อ ทอม
มาดูกันว่าคุณสามารถเข้าถึงอ็อบเจ็กต์ที่ซ่อนอยู่ใน JSP ได้อย่างไร รวมถึงพารามิเตอร์ URL หากต้องการทำสิ่งนี้ ให้เปิด Tomcat และเปิดเบราว์เซอร์บนหน้า http://localhost:8080/ จากนั้นไปที่หน้าตัวอย่าง: เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 7จากนั้นไปที่ลิงค์ ตัวอย่าง JSP: เจเอสพีคืออะไร?  ทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 8ในหน้าตัวอย่าง ตามลิงค์ วัตถุโดยนัย -> ดำเนินการ: เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 9บนนี้ คุณสามารถดูตัวอย่างการใช้วัตถุที่ซ่อนอยู่ได้ ด้านล่างนี้คือภาพหน้าจอของหน้าเว็บพร้อมคำอธิบายโดยละเอียด: เจเอสพีคืออะไร?  ทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 10ลองเปลี่ยนค่าของพารามิเตอร์fooโดยใช้ฟิลด์ที่เกี่ยวข้องบนหน้าเว็บ จากนั้นสังเกตว่าค่าของพารามิเตอร์นี้ก็เปลี่ยนไปในแถบที่อยู่ด้วย หน้าที่นำเสนอไม่มีฟังก์ชันการทำงานมากนัก แต่เป็นข้อมูลอ้างอิงที่ดีที่คุณสามารถอ้างอิงได้ในอนาคตเมื่อคุณต้องการเข้าถึงวัตถุที่ซ่อนอยู่ หน้านี้ประกอบด้วยรายการวัตถุที่ซ่อนอยู่ซึ่งสามารถเข้าถึงได้ และด้านล่างในตาราง มีการสาธิตวิธีการเข้าถึงออบเจ็กต์เฉพาะ

ฟังก์ชัน JSP

ตอนนี้เรากลับไปที่หน้าก่อนหน้าแล้วดูซอร์สโค้ดของหน้า "วัตถุที่ซ่อนอยู่": เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 11นี่คือ:
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])} </td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])} </td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])} </td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>
หากคุณคุ้นเคยกับ HTML ซอร์สโค้ดของหน้าควรจะชัดเจนสำหรับคุณ ให้ความสนใจกับบรรทัดเหล่านี้:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
ที่นี่เราเห็นแท็ก html <tr>และ<td>. แท็กจะตามด้วย แท็ ก<td>JSP ซึ่งอยู่ในวงเล็บปีกกา ${ }อย่างไรก็ตาม โปรดสังเกตวิธีการส่งออกค่าของพารามิเตอร์ URL foo:
${fn:escapeXml(param["foo"])}
ค่าจะถูกส่งออกผ่านการใช้ฟังก์ชันfn:escapeXml()JSP ฟังก์ชัน JSP สรุปฟังก์ชันการทำงานบางอย่างที่สามารถนำมาใช้ซ้ำได้ ในกรณีนี้ เป็นการ Escape XML เทคโนโลยี JSP มีฟังก์ชันให้เลือกมากมาย รวมถึงความสามารถในการสร้างฟังก์ชันของคุณเองด้วย หากต้องการใช้ฟังก์ชันใน JSP คุณต้องนำเข้าไลบรารีที่เหมาะสมซึ่งมีการกำหนดฟังก์ชันลงในไฟล์ JSP

แท็กไลบรารี

ลองดูซอร์สโค้ดอีกบรรทัดหนึ่ง (บรรทัดที่สอง) ด้านบน:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
นี่คือวิธีการนำเข้าไลบรารีแท็ก ไวยากรณ์ใช้งานง่าย เรากำหนดหลายสิ่ง:
  • taglib(ไลบรารีแท็ก - ไลบรารีแท็ก);
  • urlที่ตั้งของห้องสมุดแห่งนี้
  • คำนำหน้า (ในกรณีนี้fn) ซึ่งจะสามารถเรียกใช้ฟังก์ชันที่กำหนดไว้ในไลบรารีนี้ได้
ในตัวอย่างข้างต้น เราดูที่การนำเข้าฟังก์ชัน โดยเฉพาะในตัวอย่างของเรา เราได้นำเข้าไลบรารี JSTL (JSP Standard Tag Library) JSTL เป็นไลบรารีแท็กมาตรฐานที่ประกอบด้วยชุดของไลบรารีต่างๆ ที่มาพร้อมกับเซิร์ฟเล็ตและการใช้งาน JSP ทุกครั้ง รวมถึง Tomcat ไลบรารีแท็กยอดนิยมอีกรายการหนึ่งคือแกนหลัก ซึ่งสามารถนำเข้าได้ดังนี้:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
เช่นเดียวกับfnสัญกรณ์cเป็นทางเลือกและเป็นที่ยอมรับโดยทั่วไป การกำหนดนี้สามารถพบได้เกือบทุกที่ที่ใช้ห้องสมุดเหล่านี้ นี่คือตัวอย่างฟังก์ชันจากไลบรารีหลัก:
<c:out value = "${'<div>'}"/>
ฟังก์ชันนี้จะส่งออกแท็<div>ก ฟังก์ชันนี้ทำการ Escape XML แล้ว ฟังก์ชันนี้มีความสำคัญจากมุมมองด้านความปลอดภัย เนื่องจากการส่งออกค่าของตัวแปรโดยตรงผ่าน${variable}เราจะเปิดประตูสู่การแทรกสคริปต์

การแก้ไข JSP

ตอนนี้ ด้วยความรู้ใหม่ เรามาลองเปลี่ยนแปลงแอปพลิเคชันสาธิตภายใน Tomcat กันดีกว่า ในการดำเนินการนี้ เราจะค้นหาซอร์สโค้ดของหน้านี้ภายในโฟลเดอร์ที่ติดตั้งคอนเทนเนอร์เซิร์ฟเล็ตนี้ ไฟล์นี้สามารถพบได้ตามที่อยู่ต่อไปนี้: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el จากนั้นเปิดไฟล์ implicit-objects.jsp ในโปรแกรมแก้ไขข้อความใด ๆ เพิ่มการนำเข้าของไลบรารีหลัก แล้วใช้มัน เรามาแสดงข้อความกันดีกว่า: เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 12ตอนนี้เรามารีเฟรชหน้าออบเจ็กต์ที่ถูกซ่อนและดูการเปลี่ยนแปลงที่เกิดขึ้น: เจเอสพีคืออะไร?  การทำความเข้าใจความเป็นไปได้ในทางปฏิบัติ - 13

ผลลัพธ์

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

อะไรต่อไป?

เพื่อรักษาความปลอดภัยของวัสดุคุณสามารถ:
  1. ทำซ้ำทุกอย่างที่อธิบายไว้ในบทความนี้
  2. พิจารณาแอปพลิเคชันสาธิตอื่นๆ ที่มาพร้อมกับเซิร์ฟเวอร์ Tomcat
  3. เขียนแอปพลิเคชันของคุณเองและปรับใช้กับคอนเทนเนอร์เซิร์ฟเล็ต เพื่อเป็นแนวทาง คุณสามารถใช้บทความการสร้างโครงการเว็บอย่างง่ายใน IntelliJ Idea Enterprise ทีละขั้นตอนพร้อมรูปภาพ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION