ไม่เหมือนกับอิลิเมนต์คำสั่ง JSP อิลิเมนต์การดำเนินการ JSP จะทำงานในระหว่างขั้นตอนการประมวลผลคำร้องขอ อิลิเมนต์การดำเนินการ JSP ถูกเขียนด้วยไวยากรณ์ XML
ใช้การดำเนินการ JSP เพื่อแทรกไฟล์แบบไดนามิก นำคอมโพเนนต์ JavaBean มาใช้ใหม่ เปลี่ยนเส้นทางผู้ใช้ไปยังเพจอื่น และสร้างโค้ด HTML สำหรับปลั๊กอิน Java
มีเพียงไวยากรณ์เดียวสำหรับองค์ประกอบการกระทำ และเป็นไปตามมาตรฐาน XML:
<jsp:action_name คุณลักษณะ = "ค่า" />
องค์ประกอบการดำเนินการเป็นฟังก์ชันที่กำหนดไว้ล่วงหน้าโดยทั่วไป ข้อกำหนด JSP กำหนดชุดของการดำเนินการมาตรฐาน ซึ่งใช้ JSP เป็นคำนำหน้า องค์ประกอบการดำเนินการมาตรฐานที่มีอยู่มีดังนี้:
ไวยากรณ์ | อธิบาย |
---|---|
jsp:รวม | นำเข้าไฟล์เมื่อมีการร้องขอเพจ |
jsp:useBean | ค้นหาหรือสร้างอินสแตนซ์ JavaBean |
jsp:setProperty | ตั้งค่าคุณสมบัติ JavaBean |
jsp:getProperty | ส่งออกคุณสมบัติของ JavaBean |
jsp:ไปข้างหน้า | ส่งคำขอไปยังหน้าใหม่ |
jsp:ปลั๊กอิน | สร้างแท็ก OBJECT หรือ EMBED สำหรับปลั๊กอิน Java ขึ้นอยู่กับประเภทของเบราว์เซอร์ |
jsp:องค์ประกอบ | กำหนดองค์ประกอบ XML แบบไดนามิก |
jsp:แอตทริบิวต์ | ตั้งค่าแอตทริบิวต์องค์ประกอบ XML ที่กำหนดแบบไดนามิก |
เจเอสพี:ร่างกาย | ตั้งค่าเนื้อหาขององค์ประกอบ XML ที่กำหนดแบบไดนามิก |
jsp:ข้อความ | การใช้เทมเพลตที่เขียนข้อความในหน้า JSP และเอกสาร |
องค์ประกอบการกระทำทั้งหมดมีสองแอตทริบิวต์: คุณลักษณะ id และแอตทริบิวต์ขอบเขต
แอตทริบิวต์รหัส:
แอ็ตทริบิวต์ id คือตัวระบุเฉพาะขององค์ประกอบการดำเนินการ และสามารถอ้างอิงได้ในหน้า JSP ค่ารหัสที่สร้างโดยองค์ประกอบการกระทำสามารถเรียกผ่าน PageContext
คุณลักษณะขอบเขต:
คุณลักษณะนี้ใช้เพื่อระบุวงจรชีวิตขององค์ประกอบการดำเนินการ คุณลักษณะ id เกี่ยวข้องโดยตรงกับแอตทริบิวต์ขอบเขต และแอตทริบิวต์ขอบเขตจะกำหนดอายุการใช้งานของวัตถุ id ที่เกี่ยวข้อง คุณลักษณะขอบเขตมีค่าที่เป็นไปได้สี่ค่า: (a) หน้า (b) คำขอ (c) เซสชัน และ (d) แอปพลิเคชัน
องค์ประกอบการดำเนินการ <jsp:include> ใช้เพื่อรวมไฟล์แบบคงที่และไดนามิก การดำเนินการนี้จะแทรกไฟล์ที่ระบุลงในเพจที่กำลังสร้าง รูปแบบไวยากรณ์เป็นดังนี้:
<jsp:include page="relative URL" flush="true" />
คำสั่งรวมได้รับการแนะนำมาก่อน โดยจะแนะนำไฟล์เมื่อไฟล์ JSP ถูกแปลงเป็น Servlet การดำเนินการ jsp:include ที่นี่จะแตกต่างออกไป
ต่อไปนี้เป็นรายการคุณสมบัติที่เกี่ยวข้องกับการดำเนินการรวม
คุณสมบัติ | อธิบาย |
---|---|
หน้าหนังสือ | ที่อยู่ URL ที่เกี่ยวข้องที่มีอยู่ในเพจ |
ล้าง | คุณสมบัติบูลีนที่กำหนดว่าควรล้างแคชก่อนที่จะรวมทรัพยากรหรือไม่ |
ด้านล่างนี้เรากำหนดสองไฟล์ date.jsp และ main.jsp รหัสจะเป็นดังนี้:
รหัสไฟล์ date.jsp:
<p> วันที่ของวันนี้: <%= (new java.util.Date()).toLocaleString()%></p>
รหัสไฟล์ main.jsp:
<html><head><title>ตัวอย่างการดำเนินการรวม</title></head><body><center><h2>ตัวอย่างการดำเนินการรวม</h2><jsp:include page="date.jsp" ล้าง ="true" /></center></body></html>
ตอนนี้วางสองไฟล์ข้างต้นไว้ในไดเร็กทอรีรากของเซิร์ฟเวอร์และเข้าถึงไฟล์ main.jsp ผลลัพธ์ที่แสดงมีดังนี้:
การดำเนินการรวม ตัวอย่างวันนี้: 12-Sep-2013 14:54:22 น.
แอ็คชัน jsp:useBean ใช้เพื่อโหลด JavaBean ที่จะใช้ในหน้า JSP
คุณลักษณะนี้มีประโยชน์มากเนื่องจากช่วยให้เราสามารถใช้ประโยชน์จากการนำคอมโพเนนต์ Java มาใช้ซ้ำได้ ในขณะเดียวกันก็หลีกเลี่ยงการสูญเสียความสะดวกสบายที่ทำให้ JSP แตกต่างจาก Servlets
ไวยากรณ์ที่ง่ายที่สุดสำหรับการดำเนินการ jsp:useBean คือ:
<jsp:useBean id="ชื่อ" />
หลังจากโหลดคลาสแล้ว เราสามารถแก้ไขและดึงคุณสมบัติของ bean ผ่านการดำเนินการ jsp:setProperty และ jsp:getProperty
ต่อไปนี้เป็นรายการคุณสมบัติที่เกี่ยวข้องกับการดำเนินการ useBean
คุณสมบัติ | อธิบาย |
---|---|
ระดับ | ระบุชื่อแพ็คเกจที่สมบูรณ์ของ bean |
พิมพ์ | ระบุประเภทที่จะอ้างอิงถึงตัวแปรวัตถุ |
beanName | ระบุชื่อของ Bean ผ่านวิธีการ Instantiate() ของ java.beans.Beans |
ก่อนที่จะให้ตัวอย่างที่เฉพาะเจาะจง ให้เราดูองค์ประกอบการดำเนินการ jsp:setProperty และ jsp:getProperty ก่อน:
jsp:setProperty ใช้เพื่อตั้งค่าคุณสมบัติของอ็อบเจ็กต์ Bean ที่สร้างอินสแตนซ์ มีสองวิธีในการใช้งาน ขั้นแรก คุณสามารถใช้ jsp:setProperty ภายนอก (ด้านหลัง) องค์ประกอบ jsp:useBean ได้ดังนี้:
<jsp:useBean id="myName" ... />...<jsp:setProperty name="myName" property="someProperty" .../>
ในขณะนี้ ไม่ว่า jsp:useBean ค้นหา Bean ที่มีอยู่หรือสร้างอินสแตนซ์ Bean ใหม่ jsp:setProperty จะถูกดำเนินการ การใช้งานที่สองคือการใส่ jsp:setProperty ไว้ในองค์ประกอบ jsp:useBean ดังที่แสดงด้านล่าง:
<jsp:useBean id="myName" ... >... <jsp:setProperty name="myName" property="someProperty" .../></jsp:useBean>
ในขณะนี้ jsp:setProperty จะถูกดำเนินการเมื่อสร้างอินสแตนซ์ Bean ใหม่เท่านั้น หากใช้อินสแตนซ์ที่มีอยู่ jsp:setProperty จะไม่ถูกดำเนินการ
คุณสมบัติ | อธิบาย |
---|---|
ชื่อ | จำเป็นต้องมีแอตทริบิวต์ชื่อ โดยระบุว่าคุณสมบัติ Bean ใดที่จะตั้งค่า |
คุณสมบัติ | จำเป็นต้องมีแอตทริบิวต์คุณสมบัติ มันระบุคุณสมบัติที่จะตั้งค่า มีการใช้งานพิเศษ: หากค่าของคุณสมบัติเป็น "*" หมายความว่าพารามิเตอร์คำขอทั้งหมดที่มีชื่อตรงกับชื่อคุณสมบัติ Bean จะถูกส่งผ่านไปยังเมธอดชุดคุณสมบัติที่เกี่ยวข้อง |
ค่า | แอตทริบิวต์ค่าเป็นทางเลือก คุณสมบัตินี้ใช้เพื่อระบุค่าของคุณสมบัติ Bean ข้อมูลสตริงจะถูกแปลงเป็นตัวเลข บูลีน บูลีน ไบต์ ไบต์ ถ่าน และอักขระโดยอัตโนมัติผ่านวิธีมาตรฐาน valueOf ในคลาสเป้าหมาย ตัวอย่างเช่น ค่าแอตทริบิวต์ประเภทบูลีนและบูลีน (เช่น "true") จะถูกแปลงโดย Boolean.valueOf และค่าแอตทริบิวต์ประเภท int และ Integer (เช่น "42") จะถูกแปลงโดย Integer.valueOf ไม่สามารถใช้ค่าและพารามิเตอร์พร้อมกันได้ แต่สามารถใช้ได้อย่างใดอย่างหนึ่ง |
พารามิเตอร์ | พารามิเตอร์เป็นทางเลือก โดยระบุพารามิเตอร์คำขอที่จะใช้เป็นค่าของคุณสมบัติ Bean หากคำขอปัจจุบันไม่มีพารามิเตอร์ จะไม่มีอะไรเกิดขึ้น และระบบจะไม่ส่งค่า Null ไปยังเมธอดที่กำหนดของคุณสมบัติ Bean ดังนั้น คุณสามารถปล่อยให้ bean จัดเตรียมค่าคุณสมบัติดีฟอลต์เองได้ และแก้ไขเฉพาะค่าคุณสมบัติดีฟอลต์เมื่อพารามิเตอร์คำขอระบุค่าใหม่อย่างชัดเจนเท่านั้น |
แอ็คชัน jsp:getProperty แยกค่าของคุณสมบัติ Bean ที่ระบุ แปลงเป็นสตริง จากนั้นจึงส่งออกค่าดังกล่าว รูปแบบไวยากรณ์เป็นดังนี้:
<jsp:useBean id="myName" ... />...<jsp:getProperty name="myName" property="someProperty" .../>
ตารางต่อไปนี้เป็นคุณสมบัติที่เกี่ยวข้องกับ getProperty:
คุณสมบัติ | อธิบาย |
---|---|
ชื่อ | ชื่อของคุณสมบัติ Bean ที่จะดึงข้อมูล ต้องกำหนดถั่ว |
คุณสมบัติ | บ่งชี้ว่าค่าของคุณสมบัติ Bean จะถูกแยกออกมา |
ในตัวอย่างต่อไปนี้ เราใช้ Beans:
/* ไฟล์: TestBean.java */package action; public class TestBean { private String message = "No message specified"; public String getMessage() { return(message); } public void setMessage(String message) { this.message = ข้อความ; }}
รวบรวมตัวอย่างข้างต้นและสร้างไฟล์ TestBean.class คัดลอกไฟล์ไปยังไดเร็กทอรีที่เซิร์ฟเวอร์จัดเก็บคลาส Java อย่างเป็นทางการ แทนที่จะเป็นไดเร็กทอรีที่สงวนไว้สำหรับคลาสที่สามารถโหลดได้โดยอัตโนมัติหลังการแก้ไข (เช่น: C:apache-tomcat -7.0.2 webappsWEB-INFclassesaction ไดเร็กทอรี ตัวแปร CLASSPATH ต้องมีพาธนี้) ตัวอย่างเช่น สำหรับ Java Web Server bean และคลาสทั้งหมดที่ใช้โดย bean ควรอยู่ในไดเร็กทอรีคลาส หรือห่อหุ้มไว้ในไฟล์ jar และวางไว้ในไดเร็กทอรี lib แต่ไม่ควรวางไว้ใต้เซิร์ฟเล็ต ต่อไปนี้เป็นตัวอย่างง่ายๆ ฟังก์ชันของมันคือการโหลด Bean จากนั้นตั้งค่า/อ่านคุณสมบัติข้อความ
ตอนนี้ให้เราเรียก bean ในไฟล์ main.jsp:
<html><head><title>การใช้ JavaBeans ใน JSP</title></head><body><center><h2>การใช้ JavaBeans ใน JSP</h2> <jsp:useBean id="test" /> < jsp:setProperty name="test" property="message" value="Hello JSP..." /> <p>ได้รับข้อความ....</p> <jsp:getProperty name="test" property="message " /> </center></body></html>
ดำเนินการไฟล์ข้างต้นและผลลัพธ์จะเป็นดังนี้:
การใช้ JavaBeans ในข้อความ JSPGot....สวัสดี JSP...
การดำเนินการ jsp:forward ส่งต่อคำขอไปยังหน้าอื่น แท็ก jsp:forward มีแอตทริบิวต์เพียงหน้าเดียวเท่านั้น รูปแบบไวยากรณ์เป็นดังนี้:
<jsp:forward page="URL ที่เกี่ยวข้อง" />
ต่อไปนี้เป็นแอตทริบิวต์ที่เกี่ยวข้องกับการส่งต่อ:
คุณสมบัติ | อธิบาย |
---|---|
หน้าหนังสือ | แอตทริบิวต์หน้ามี URL ที่เกี่ยวข้อง ค่าของเพจสามารถกำหนดได้โดยตรงหรือคำนวณแบบไดนามิกในระหว่างการร้องขอ ซึ่งอาจเป็นเพจ JSP หรือ Java Servlet |
เราใช้สองไฟล์ในตัวอย่างต่อไปนี้: date.jsp และ main.jsp
โค้ดไฟล์ date.jsp เป็นดังนี้:
<p> วันที่ของวันนี้: <%= (new java.util.Date()).toLocaleString()%></p>
รหัสไฟล์ main.jsp:
<html><head><title>ตัวอย่างการดำเนินการส่งต่อ</title></head><body><center><h2>ตัวอย่างการดำเนินการส่งต่อ</h2><jsp:forward page="date.jsp" / ></ศูนย์></ร่างกาย>
ตอนนี้วางสองไฟล์ข้างต้นไว้ในไดเร็กทอรีรากของเซิร์ฟเวอร์และเข้าถึงไฟล์ main.jsp ผลลัพธ์ที่แสดงมีดังนี้:
วันที่วันนี้: 12-Sep-2010 14:54:22 น
แอ็คชัน jsp:plugin ใช้เพื่อแทรกอิลิเมนต์ OBJECT หรือ EMBED ที่จำเป็นในการรัน Java Applet ผ่านปลั๊กอิน Java ขึ้นอยู่กับประเภทของเบราว์เซอร์
หากไม่มีปลั๊กอินที่จำเป็น ปลั๊กอินจะดาวน์โหลดปลั๊กอิน จากนั้นจึงเรียกใช้งานคอมโพเนนต์ Java ส่วนประกอบ Java อาจเป็นแอปเพล็ตหรือ JavaBean
การทำงานของปลั๊กอินมีหลายแอตทริบิวต์ที่สอดคล้องกับองค์ประกอบ HTML ที่ใช้ในการจัดรูปแบบส่วนประกอบ Java องค์ประกอบพารามิเตอร์สามารถใช้เพื่อส่งพารามิเตอร์ไปยัง Applet หรือ Bean
ต่อไปนี้เป็นตัวอย่างทั่วไปของการใช้องค์ประกอบการดำเนินการของปลั๊กอิน:
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class" > <jsp:param name="fontcolor" value="red" /> <jsp:param name="พื้นหลัง" value=" black" /> <jsp:fallback> ไม่สามารถเริ่มต้นปลั๊กอิน Java </jsp:fallback> </jsp:plugin>
หากคุณสนใจ คุณสามารถลองใช้แอปเพล็ตเพื่อทดสอบองค์ประกอบการดำเนินการ jsp:plugin องค์ประกอบ <fallback> จะเป็นองค์ประกอบใหม่ เมื่อส่วนประกอบล้มเหลว ข้อความแสดงข้อผิดพลาดจะถูกส่งไปยังผู้ใช้
<jsp:element>, <jsp:attribute>, <jsp:body> องค์ประกอบการดำเนินการกำหนดองค์ประกอบ XML แบบไดนามิก ไดนามิกมีความสำคัญมาก ซึ่งหมายความว่าองค์ประกอบ XML จะถูกสร้างขึ้นแบบไดนามิก ณ เวลาคอมไพล์ แทนที่จะเป็นแบบคงที่
ตัวอย่างต่อไปนี้กำหนดองค์ประกอบ XML แบบไดนามิก:
<%@page language="java" contentType="text/html"%><html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun. com/JSP/Page"><head><title>สร้างองค์ประกอบ XML</title></head><body><jsp:element name="xmlElement"><jsp:attribute name="xmlElementAttr"> ค่าสำหรับ คุณลักษณะ</jsp:attribute><jsp:body> เนื้อความสำหรับองค์ประกอบ XML</jsp:body></jsp:element></body></html>
รหัส HTML ที่สร้างขึ้นระหว่างการดำเนินการมีดังนี้:
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>สร้างองค์ประกอบ XML</ title></head><body><xmlElement xmlElementAttr="ค่าสำหรับแอตทริบิวต์"> เนื้อความสำหรับองค์ประกอบ XML</xmlElement></body></html>
องค์ประกอบการดำเนินการ <jsp:text> อนุญาตให้ใช้เทมเพลตสำหรับการเขียนข้อความในหน้า JSP และเอกสาร รูปแบบไวยากรณ์เป็นดังนี้:
<jsp:text>ข้อมูลเทมเพลต</jsp:text>
เทมเพลตข้อความด้านบนไม่สามารถมีองค์ประกอบอื่นๆ ได้ แต่จะมีได้เฉพาะข้อความและนิพจน์ EL เท่านั้น (หมายเหตุ: นิพจน์ EL จะถูกนำมาใช้ในบทต่อๆ ไป) โปรดทราบว่าในไฟล์ XML คุณไม่สามารถใช้นิพจน์ เช่น ${whatever > 0} ได้ เนื่องจากสัญลักษณ์ > นั้นผิดกฎหมาย คุณสามารถใช้นิพจน์ ${whatever gt 0} หรือค่าที่ฝังอยู่ในส่วน CDATA
<jsp:text><![CDATA[<br>]]></jsp:text>
หากคุณต้องการประกาศ DOCTYPE ใน XHTML คุณต้องใช้องค์ประกอบการกระทำ <jsp:text> ตัวอย่างมีดังนี้:
<jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">]]></jsp:text>< head><title>jsp:text action</title></head><body><books><book><jsp:text> ยินดีต้อนรับสู่ JSP การเขียนโปรแกรม</jsp:text></book></books></body></html>
คุณสามารถลองตัวอย่างด้านบนเพื่อดูความแตกต่างในผลการดำเนินการโดยใช้ <jsp:text> และการไม่ใช้องค์ประกอบการกระทำนี้