ActionContext
ActionContext เป็นบริบทของการกระทำโดยที่ struts2 บันทึกวัตถุบางอย่างที่จำเป็นในระหว่างการดำเนินการเช่นเซสชันพารามิเตอร์สถานที่ ฯลฯ ฯลฯ Struts2 จะสร้าง actionContext ที่สอดคล้องกันตามแต่ละเธรดที่ดำเนินการตามคำขอ HTTP นั่นคือเธรดที่มีลักษณะเฉพาะ ดังนั้นผู้ใช้สามารถใช้วิธีการคงที่ actionContext.getContext () เพื่อรับ ActionContext ของเธรดปัจจุบัน ด้วยเหตุนี้ผู้ใช้ไม่ต้องกังวลเกี่ยวกับการทำเธรดแอ็คชั่นที่ปลอดภัย
ไม่ว่าในกรณีใด ActionContext จะใช้ในการจัดเก็บข้อมูล Struts2 เองจะใส่ข้อมูลจำนวนมากในนั้นและผู้ใช้ยังสามารถใส่ข้อมูลที่ต้องการได้ โครงสร้างข้อมูลของ ActionContext นั้นเป็นโครงสร้างการแมปนั่นคือแผนที่ซึ่งใช้คีย์ในการทำแผนที่ เพื่อให้ผู้ใช้สามารถใช้มันเช่นการใช้แผนที่หรือใช้วิธี Action.getContextMap () โดยตรงเพื่อทำงานบนแผนที่
ข้อมูลที่วางไว้ใน struts2 นั้นรวมถึง ActionInvocation, แอปพลิเคชัน (เช่น ServletContext), ConversionErrors, สถานที่, ชื่อการดำเนินการ, พารามิเตอร์การร้องขอ, เซสชัน HTTP และสแต็กค่า ฯลฯ สำหรับรายการที่สมบูรณ์โปรดดู javadoc (ภาคผนวกของบทความนี้กล่าวถึงสิ่งที่มีอยู่)
เนื่องจากลักษณะที่สามารถรับได้โดยวิธีการแบบเธรดอย่างเดียวและแบบคงที่ของ ActionContext จึงสามารถรับได้โดยตรงในคลาสที่ไม่ใช่การกระทำโดยไม่ต้องรอการกระทำที่จะส่งหรือฉีด ควรสังเกตว่ามันถูกต้องเฉพาะในเธรดที่สร้างขึ้นเนื่องจากการร้องขอ (เนื่องจาก ActionContext ที่เกี่ยวข้องถูกสร้างขึ้นเมื่อร้องขอ) แต่ไม่ถูกต้องในเธรดที่เริ่มต้นโดยเซิร์ฟเวอร์ (เช่นวิธีการเริ่มต้นของ Fliter) เนื่องจากความสะดวกสบายในการเข้าถึงในคลาสที่ไม่ใช่แอ็คชั่น ActionContext จึงสามารถใช้เพื่อส่งผ่านข้อมูลไปยัง JSP ในคลาสที่ไม่ใช่การกระทำ (เนื่องจาก JSP สามารถเข้าถึงได้อย่างง่ายดาย)
การเชื่อมต่อและความแตกต่างระหว่าง Valuestack และ ActionContext:
ความคล้ายคลึงกัน: พวกเขาทั้งหมดใช้ภายในขอบเขตของคำขอ HTTP นั่นคืออายุการใช้งานของพวกเขาคือคำขอเดียว
ความแตกต่าง: สแต็กค่าเป็นโครงสร้างของสแต็กและ ActionContext เป็นโครงสร้างของแผนที่ (แผนที่)
ติดต่อ: แผนที่ที่ได้รับจากวิธีการ Valuestack.getContext () เป็นจริงแผนที่ของ ActionContext เมื่อดูที่ซอร์สโค้ดของ struts2 เราสามารถดูได้ (บรรทัด 79 ของ org.apache.struts2.dispatcher.ng.pareoperations ใน struts2.3.1.2, วิธี createActionContext) เมื่อสร้าง ActionContext จะใช้ Valuestack.getContext () เป็นพารามิเตอร์ของตัวสร้างของ ActionContext ดังนั้น Valuestack และ ActionContext สามารถรับได้เป็นหลักจากกันและกัน
หมายเหตุ: ในเอกสารบางฉบับคำว่า "บริบทของสแต็ก" จะปรากฏขึ้นซึ่งเป็นค่าที่บันทึกไว้ใน ActionContext ดังนั้นเมื่ออ่านเอกสารเหล่านี้คุณต้องเห็นอย่างชัดเจนว่าโครงสร้างสแต็ก (เช่นสแต็กค่า) ถูกวางไว้ในหรือโครงสร้างการแมป (บริบทของสแต็กค่านั่นคือ ActionContext)
วิธีรับ ActionContext:
ในการสกัดกั้นที่กำหนดเอง: ใช้ actionInvocation.getInvocationContext () หรือใช้ actionContext.getContext ()
ในคลาสการดำเนินการ: ปล่อยให้ interceptor ฉีดหรือใช้ actionContext.getContext ()
ในคลาสที่ไม่ใช่การกระทำ: ให้พารามิเตอร์ผ่านคลาสแอ็คชั่นพารามิเตอร์ฉีดโดยใช้กลไกการฉีดหรือใช้ actionContext.getContext () หมายเหตุ: ActionContext.getContext () สามารถเรียกได้โดยรหัสที่เรียกใช้ในเธรดการร้องขอมิฉะนั้นจะส่งคืนค่า NULL
ใน JSP: โดยทั่วไปไม่จำเป็นต้องได้รับ ActionContext เอง
วิธีบันทึกค่าลงใน ActionContext:
ในคลาส Java เช่น interceptor, คลาสการกระทำ, คลาสที่ไม่ใช่การกระทำ, ฯลฯ : ใช้ ActionContext.put (คีย์วัตถุ, ค่าวัตถุ)
ใน jsp: แท็ก <s: set value = "... "/> จะจัดเก็บค่าใน ActionContext โดยค่าเริ่มต้น (แน่นอนแท็ก <s: set> ยังสามารถจัดเก็บค่าในสถานที่อื่น) นอกจากนี้แท็กจำนวนมากมีแอตทริบิวต์ VAR (ใช้แอตทริบิวต์ ID มาก่อน แต่ตอนนี้แอตทริบิวต์ ID เลิกใช้แล้ว) แอตทริบิวต์นี้สามารถจัดเก็บค่าลงใน ActionContext คีย์คือค่าของแอตทริบิวต์ VAR และค่าคือค่าของแอตทริบิวต์ค่าของแท็ก (เอกสารบางฉบับเขียนเกี่ยวกับการจัดเก็บค่าลงในบริบทของ Valuestack ซึ่งจริง ๆ แล้วเหมือนกัน)
วิธีอ่านค่าจาก ActionContext:
ในคลาส Java เช่น interceptor, คลาสแอ็คชั่น, คลาสที่ไม่ใช่แอ็คชั่น, ฯลฯ : ใช้เมธอด actionContext.get (คีย์วัตถุ)
ใน JSP: ใช้นิพจน์ OGNL ที่ขึ้นต้นด้วย #ตัวอย่างเช่นวิธีการ ActionContext.get ("ชื่อ") จะถูกเรียก หมายเหตุ: หากแอตทริบิวต์ของแท็กบางอย่างไม่ได้แยกวิเคราะห์เป็นนิพจน์ OGNL โดยค่าเริ่มต้นคุณต้องใช้ %{} เพื่อใส่นิพจน์และนิพจน์ที่คล้ายกับ " %{#name}" จะปรากฏขึ้น (ดูเพิ่มเติมสำหรับ "#" ที่นี่)
ในระยะสั้นการใช้ ActionContext ใน JSP เป็นเพราะมันเป็นโครงสร้างการแมปและในทางกลับกันก็สามารถอ่านการกำหนดค่าบางอย่างของการกระทำ เมื่อคุณต้องการให้ค่าทั่วไปสำหรับการกระทำหลายอย่างคุณสามารถมีการดำเนินการแต่ละครั้งให้วิธีการ getxxx () แต่วิธีที่ดีกว่าคือการจัดเก็บค่าทั่วไปเหล่านี้ใน ActionContext ในเทมเพลต Interceptor หรือ JSP (เนื่องจากเทมเพลต Interceptor หรือ JSP มักใช้สำหรับการกระทำหลายอย่าง)
ตัวอย่างบางส่วน:
รหัส Java
// คลาสนี้จะแสดงให้เห็นถึงการดำเนินการบน ActionContext ใน Interceptor PublicClass MyInterceptor ขยาย AbstractInterceptor {Public String Intercept (ActionInvocation Invocation) โยนข้อยกเว้น {// รับ ActionContext ActionContext ActionContext = Invocation.getInvocationContext (); // บันทึกบุคคลที่มีค่า = บุคคลใหม่ (); ActionContext.put ("บุคคล", บุคคล); // รับค่าวัตถุค่า = actionContext.get ("บุคคล"); // รับ httpservletRequest httpservletRequest Request = (httpservletRequest) actionContext.get (strutsstatics.http_request); // รับแผนที่ของคำขอนั่นคือค่าที่ดำเนินการโดย httpservletRequest.getAttribute (... ) และ httpservletrequest.setAttribute (... ) แผนที่ requestmap = (MAP) ActionContext.get ("คำขอ"); // รหัสอื่น ๆ // ...... return invocation.invoke (); - รหัส Java
// คลาสนี้จะแสดงให้เห็นถึงการดำเนินการของ ActionContext ในการดำเนินการสาธารณะ MyAction ขยายการกระทำ asctupport {@Override public String execute () โยนข้อยกเว้น {// รับค่า stack actionContext actionContext = actionContext.getContext (); // บันทึกบุคคลที่มีค่า = บุคคลใหม่ (); // นี่คือคลาสที่กำหนดไว้ในตัวอย่างก่อนหน้า actionContext.put ("บุคคล" บุคคล); // รับ Object Object ค่า = ActionContext.get ("บุคคล"); // รหัสอื่น ๆ // ...... คืนความสำเร็จ; - รหัส HTML
<! doctype html> <html> <head> <metahttp-equiv = "content-type" content = "text/html; charset = utf-8"> <title> หน้า jsp </title> </head> <body> <! ActionContext ถูกเก็บไว้ใน ActionContext คุณสามารถใช้ "#person" เพื่อรับมันดังนี้-> <s: propertyValue = "#person"/> <!-รับแอตทริบิวต์ชื่อของบุคคลดังต่อไปนี้-> <s: propertyValue = "#person.name"/> <! <s: propertyValue = "#request"/> <!-รับค่าที่เก็บโดย struts2 ใน actionContext เช่นแผนที่ของเซสชันดังต่อไปนี้-> <s: propertyValue = "#เซสชัน"/> <! แสดงให้เห็นถึงการบันทึกค่าใน actionContext ใน jsp-> <!-บันทึกสตริง "myName" คีย์คือ "myKey" ดังนี้-> <s: setValue = "%{'myName'}" var = "myKey"/> <! <s: beanname = "com.example.person" var = "myObject"/> <!-หลังจากนั้นคุณสามารถใช้ "#" เพื่ออ่านได้ดังนี้-> <s: propertyValue = "#mykey"/> <s: propertyValue = "#myObject 3. คลาส httpservletrequest หรือแผนที่คำขอ
Struts2 จัดทำสองการดำเนินการตามคำขอ: หนึ่งคือคลาส HTTPSERVLETREQUEST ที่จัดทำโดยเว็บเซิร์ฟเวอร์ซึ่งเหมือนกับการดำเนินการตามคำขอในโครงการ Java Web แบบดั้งเดิม อีกอันคือ "แผนที่คำขอ" ซึ่งเป็นคลาสการแมปที่ห่อหุ้มคุณลักษณะของ httpservletrequest การใช้งานแผนที่นั้นเทียบเท่ากับการใช้งานแอตทริบิวต์ของ HttpservletRequest เหตุผลที่มีแผนที่ให้คือสะดวกในการใช้งานและอื่น ๆ คือมันสามารถใช้ OGNL เพื่ออ่านคำขอในแท็ก JSP ไม่ว่าในกรณีใดคำขอทั้งสองนี้สามารถทำงานร่วมกันได้ สำหรับแนวคิดเช่นวงจรชีวิตของการร้องขอมันไม่แตกต่างจากโครงการ Java Web อื่น ๆ และบทความนี้จะไม่ได้รับการอธิบายในรายละเอียด
ใช้คลาส httpservletrequest หรือแผนที่คำขอ
แม้ว่าทั้งสองจะทำงานร่วมกันได้ แต่ในแง่ของการอ่านแอตทริบิวต์การร้องขอการใช้แผนที่คำขอนั้นสะดวกกว่ามากและไม่เปิดเผยอินเทอร์เฟซที่ไม่จำเป็น แน่นอน HttpservletRequest มีวิธีการบางอย่างที่แผนที่คำขอไม่มี แน่นอนว่าอดีตควรใช้เมื่อใช้วิธีการเหล่านี้
การใช้แผนที่หรือ ActionContext ของคำขอ:
ทั้งสองเป็นแผนที่และวงจรชีวิตทั้งสองเป็นคำขอ
ในโครงการ Java Web แบบดั้งเดิมค่ามักจะถูกส่งผ่านไปยัง JSP ผ่านแอตทริบิวต์ของคำขอ: SetAttribute () First SetAttribute () ใน servlet จากนั้น getAttribute () ใน JSP แน่นอนในโครงการ Struts2 คุณยังสามารถใช้วิธีนี้ได้ แต่การละทิ้งฟังก์ชั่นการจัดส่งที่จัดทำโดย Struts2 ไม่คุ้มกับความพยายาม แม้ว่าผู้เขียนไม่พบเอกสารอย่างเป็นทางการที่บอกว่าคุณต้องแทนที่แผนที่ของคำขอด้วย ActionContext และไม่พบว่ามีแผนที่ในโปรแกรมที่สามารถรับ ActionContext ได้ แต่ไม่สามารถขอรับได้ภายใต้กรอบ Struts2 ดังนั้นผู้เขียนแนะนำ: ลองใช้ ActionContext แทนแผนที่ของคำขอเพื่อส่งผ่านค่า
บางครั้งแผนที่ของคำขอมีค่าที่กำหนดโดยเฟรมเวิร์กอื่น ๆ เช่นกรอบฤดูใบไม้ผลิ เมื่อได้รับค่าเหล่านี้คุณต้องใช้แผนที่คำขอเนื่องจากไม่มีใน ActionContext
ผ่าน ActionContext คุณสามารถรับคลาส httpservletrequest: "httpservletrequest request = (httpservletrequest) actionContext.get (strutsstatics.http_request);"
นอกจากนี้คุณยังสามารถรับแผนที่ของคำขอผ่าน ActionContext: "MAP RequestMap = (MAP) ActionContext.get (" คำขอ ");" ดังนั้นในแท็ก JSP คุณสามารถรับข้อมูลของแผนที่ของคำขอโดยใช้นิพจน์ "#Request"
วิธีรับ httpservletrequest:
หากมี ActionContext อยู่แล้วให้ใช้ "actionContext.get (strutsstatics.http_request)" เพื่อรับ httpservletrequest
ในการสกัดกั้นที่กำหนดเองก่อนได้รับ ActionContext ก่อนจากนั้นรับผ่าน ActionContext
ในการดำเนินการก่อนอื่นรับ ActionContext จากนั้นรับผ่าน ActionContext หรือปล่อยให้การดำเนินการใช้งานอินเทอร์เฟซ servletrequestaware และใช้ interceptor servletconfiginterceptor เพื่อให้ interceptor จะฉีด httpservletrequest
ใน JSP โดยทั่วไปคุณไม่จำเป็นต้องได้รับ HttpservletRequest
วิธีรับแผนที่คำขอ:
หากมี ActionContext อยู่แล้วให้ใช้ "ActionContext.get (" คำขอ ")" เพื่อรับ
ในการสกัดกั้นที่กำหนดเองก่อนได้รับ ActionContext ก่อนจากนั้นรับผ่าน ActionContext
ในการดำเนินการก่อนอื่นรับ ActionContext จากนั้นรับผ่าน ActionContext หรือปล่อยให้การดำเนินการใช้งานอินเทอร์เฟซ requestaware และใช้ interceptor servletconfiginterceptor เพื่อให้ interceptor จะส่งคำขอแผนที่
ใน JSP ให้ใช้ "#Request" เพื่อรับแผนที่ของคำขอและใช้ "#request.key" หรือ "#Request ['key']" เพื่ออ่านค่าในแผนที่
ในระยะสั้นการร้องขอยังคงสอดคล้องกับกฎทั่วไปของเว็บไซต์ Java อย่างไรก็ตามผู้เขียนแนะนำว่าผู้ใช้ควรพยายามหลีกเลี่ยงการใช้คำขอเพื่อส่งผ่านค่า
ตัวอย่างบางส่วน:
// คลาสนี้จะแสดงให้เห็นถึงการดำเนินการของแผนที่ของ httpservletrequest และการร้องขอใน interceptor publicclass myinterceptor ขยาย abstractInterceptor {การสกัดกั้นสตริงสาธารณะ (actionInvocation Invocation) โยนข้อยกเว้น {// รับ actionContext ActionContext ActionContext // รับ httpservletRequest httpservletrequest httpservletrequest = (httpservletrequest) actionContext.get (strutsstatics.http_request); // รับแผนที่ map requestmap = (แผนที่) actionContext.get ("คำขอ"); // สร้างคลาสเป็นบุคคลที่เป็นตัวอย่าง = บุคคลใหม่ (); // คำสั่งสองบรรทัดต่อไปนี้มีฟังก์ชั่นเดียวกัน httpservletrequest.setAttribute ("บุคคล", บุคคล); requestmap.put ("บุคคล", บุคคล); // รหัสอื่น ๆ // ...... return invocation.invoke (); - // คลาสนี้จะแสดงให้เห็นถึงการดำเนินการของแผนที่ของ httpservletrequest และการร้องขอในการดำเนินการ (วิธีการคงที่ได้รับ actionContext) publicclass myAction ขยายการกระทำ {@Override public String Execute () โยนข้อยกเว้น {// ได้รับ ActionContext ActionContext ActionContext. // รับ httpservletrequest httpservletrequest httpservletrequest = (httpservletrequest) actionContext.get (strutsstatics.http_request); // รับแผนที่ map requestmap = (แผนที่) actionContext.get ("คำขอ"); // สร้างคลาสเป็นบุคคลที่เป็นตัวอย่าง = บุคคลใหม่ (); // คำสั่งสองบรรทัดต่อไปนี้มีฟังก์ชั่นเดียวกัน httpservletrequest.setAttribute ("บุคคล", บุคคล); requestmap.put ("บุคคล", บุคคล); // รหัสอื่น ๆ // ...... คืนความสำเร็จ; - // คลาสนี้จะแสดงให้เห็นถึงการใช้ servletRequestaware ในการดำเนินการเพื่อให้ได้ httpservletRequest (หมายเหตุ: คุณต้องใช้ servletConfiginterceptor interceptor) PublicClass MyAction ขยายการดำเนินการ // วิธีนี้เป็นวิธีการของอินเตอร์เฟส servletrequestaware publicvoid setServletRequest (คำขอ httpservletrequest) {this.request = คำขอ; } @Override String Public Execute () โยนข้อยกเว้น {// httpservletRequest พร้อมในฟิลด์ของคลาสนี้และสามารถใช้โดยตรง // ...... คืนความสำเร็จ; - // คลาสนี้จะแสดงให้เห็นถึงการใช้ servletRequestaware ในการดำเนินการเพื่อรับแผนที่ของคำขอ (หมายเหตุ: คุณต้องการใช้ servletConfiginterceptor interceptor) PublicClass MyAction ขยายการดำเนินการ askingAware {MAP <String, Object> คำขอ; // วิธีนี้เป็นวิธีการของอินเตอร์เฟส requestaware publicvoid setRequest (แผนที่ <สตริง, วัตถุ> คำขอ) {this.request = คำขอ; } @Override String Public Execute () โยนข้อยกเว้น {// แผนที่ของคำขอพร้อมในฟิลด์ของคลาสและสามารถใช้โดยตรง // ...... ความสำเร็จในการส่งคืน; -<! doctype html> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> หน้า jsp </title> </head> <body> <! ค่าที่เก็บไว้โดยอัตโนมัติใน ActionContext โดย struts2 (คีย์คือคำขอ) ดังนั้นให้ใช้ "#" เพื่อเข้าถึง ActionContext และอ่านคำขอจากมัน-> <s: ค่าคุณสมบัติ = "#คำขอ"/> <!-สองบรรทัดต่อไปนี้คือค่าของคีย์ "ชื่อ" </html>
3. พารามิเตอร์นั่นคือพารามิเตอร์ของการร้องขอหรือคำขอโพสต์
พารามิเตอร์คือพารามิเตอร์ที่ส่งผ่านโดยเบราว์เซอร์ไปยังเซิร์ฟเวอร์เมื่อร้องขอรับหรือโพสต์ ในโครงการ Java Web แบบดั้งเดิมใช้วิธีการเช่น httpservletRequest.getParameter () เพื่อรับพารามิเตอร์และคุณสามารถใช้ httpservletrequest.getParameterMap () โดยตรงเพื่อรับแผนที่ด้วยพารามิเตอร์ที่ห่อหุ้ม ใน struts2, struts2 โดยตรงจัดเก็บแผนที่ด้านบนใน ActionContext ด้วยคีย์ "พารามิเตอร์" นอกจากนี้ ActionContext ยังมีวิธีการโดยตรง actionContext.getParameters () เพื่อรับแผนที่นี้ ดังนั้นวิธีการใช้พารามิเตอร์ในแต่ละองค์ประกอบของ struts2 จึงคล้ายกับวิธีการใช้งานแผนที่ของคำขอและย่อหน้านี้จะไม่ถูกอธิบายในรายละเอียด
4. แผนที่ของคลาส HttpServletsession และเซสชัน
เซสชั่นในโครงการ Java Web แบบดั้งเดิมนั้นคุ้นเคยและเราใช้เพื่อบันทึกสถานะเซสชันของผู้ใช้ struts2 ห่อหุ้ม httpservletsession ลงในแผนที่นั่นคือ "แผนที่เซสชัน" ซึ่งคล้ายกับการประมวลผลของคำขอ อย่างไรก็ตามเพื่อประหยัดทรัพยากรระบบเราจะไม่สร้างเซสชันเมื่อเราไม่ต้องการเซสชัน อาจเป็นเพราะสิ่งนี้ที่ httpservletsession จะไม่ถูกใส่ลงใน actionContext ใน struts2 หากโปรแกรมของคุณต้องการใช้ httpservletsession คุณควรได้รับ httpservletrequest ก่อนจากนั้นใช้ getSession () หรือ getSession (บูลีน B) เพื่อรับและตัดสินใจว่าคุณต้องการสร้างเซสชันหรือไม่ สำหรับแผนที่เซสชัน Struts2 ยังคงวางไว้ใน ActionContext (คีย์คือ "เซสชัน") แต่ไม่ต้องกังวลกลไกของแผนที่นี้จะทำให้เซสชันเฉพาะเมื่อสร้างค่าใหม่ ในระยะสั้นการดำเนินการของ Httpservletsession ใน struts2 จะต้องได้รับผ่าน HttpservletRequest ก่อนและการดำเนินการของแผนที่เซสชันนั้นเหมือนกับการดำเนินการของแผนที่คำขอซึ่งจะไม่ถูกอธิบายในรายละเอียดในวรรคนี้
5. แผนที่ของ ServletContext และแอปพลิเคชัน
ในโครงการ Java Web แบบดั้งเดิม ServletContext ใช้ในการจัดเก็บตัวแปรทั่วโลกและเครื่องเสมือน Java แต่ละเครื่องมีเพียงหนึ่ง servletContext ต่อโครงการเว็บ servletContext นี้ถูกสร้างขึ้นโดยเว็บเซิร์ฟเวอร์เพื่อให้แน่ใจว่าเป็นเอกลักษณ์ ServletContext มีวิธีการบางอย่างที่สามารถใช้งานแอตทริบิวต์และการดำเนินการเหล่านี้คล้ายกับการใช้งานแผนที่ ดังนั้น struts2 จึงห่อหุ้มอีกครั้ง: มันห่อหุ้มแอตทริบิวต์ของ ServletContext ลงในแผนที่นั่นคือ "แอปพลิเคชันแผนที่" และวางไว้ใน ActionContext (คีย์คือแอปพลิเคชัน) ดังนั้นหากการดำเนินการของแผนที่แอปพลิเคชันเป็นแผนที่ของคำขอย่อหน้านี้จะไม่ถูกอธิบายในรายละเอียด
สำหรับการดำเนินการบน ServletContext มันคล้ายกับการดำเนินการบน httpservletRequest: struts2 วาง servletContext ลงใน ActionContext และ ServletConfigInterceptor ให้อินเทอร์เฟซ ServletContextAware สำหรับ ServletContext ดังนั้นย่อหน้านี้จะไม่ถูกอธิบายในรายละเอียด
หมายเหตุ: การใช้ "#Application" ในนิพจน์ OGNL สามารถรับแผนที่ของแอปพลิเคชันไม่ใช่ ServletContext อย่างไรก็ตามในรหัส Java ที่ฝังอยู่ใน JSP (เช่น "< % application.getAttribute (" "); %>") แอปพลิเคชันเป็น ServletContext ไม่ใช่แผนที่