Struts 2 - ผลลัพธ์และประเภทผลลัพธ์

ดังที่ได้กล่าวไว้ก่อนหน้านี้ <results> แท็กมีบทบาทเป็นไฟล์ viewในเฟรมเวิร์ก Struts2 MVC การดำเนินการมีหน้าที่รับผิดชอบในการดำเนินการตามตรรกะทางธุรกิจ ขั้นตอนต่อไปหลังจากเรียกใช้ตรรกะทางธุรกิจคือการแสดงมุมมองโดยใช้ไฟล์<results> แท็ก

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

  • เข้าสู่ระบบสำเร็จ
  • เข้าสู่ระบบไม่สำเร็จ - ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง
  • บัญชีถูกล็อค

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

แต่ Struts2 ไม่ได้ผูกมัดคุณกับการใช้ JSP เป็นเทคโนโลยีมุมมอง โดยรวมแล้ววัตถุประสงค์ทั้งหมดของกระบวนทัศน์ MVC คือการแยกชั้นและกำหนดค่าได้สูง ตัวอย่างเช่นสำหรับไคลเอ็นต์ Web2.0 คุณอาจต้องการส่งคืน XML หรือ JSON เป็นเอาต์พุต ในกรณีนี้คุณสามารถสร้างประเภทผลลัพธ์ใหม่สำหรับ XML หรือ JSON และบรรลุสิ่งนี้

Struts มาพร้อมกับจำนวนที่กำหนดไว้ล่วงหน้า result types และอะไรก็ตามที่เราเห็นแล้วนั่นคือประเภทผลลัพธ์เริ่มต้น dispatcherซึ่งใช้เพื่อส่งไปยังเพจ JSP Struts อนุญาตให้คุณใช้ภาษามาร์กอัปอื่น ๆ สำหรับเทคโนโลยีมุมมองเพื่อนำเสนอผลลัพธ์และตัวเลือกยอดนิยม ได้แก่Velocity, Freemaker, XSLT และ Tiles.

ประเภทผลลัพธ์ของผู้มอบหมายงาน

dispatcherชนิดผลลัพธ์เป็นประเภทดีฟอลต์และจะใช้หากไม่มีการระบุประเภทผลลัพธ์อื่น ใช้เพื่อส่งต่อไปยัง servlet, JSP, HTML page และอื่น ๆ บนเซิร์ฟเวอร์ มันใช้เมธอดRequestDispatcher.forward ()

เราเห็นเวอร์ชัน "ชวเลข" ในตัวอย่างก่อนหน้านี้ซึ่งเราจัดเตรียมเส้นทาง JSP เป็นเนื้อหาของแท็กผลลัพธ์

<result name = "success">
   /HelloWorld.jsp
</result>

เรายังสามารถระบุไฟล์ JSP โดยใช้แท็ก <param name = "location"> ภายในองค์ประกอบ <result ... > ได้ดังนี้ -

<result name = "success" type = "dispatcher">
   <param name = "location">
      /HelloWorld.jsp
   </param >
</result>

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

ประเภทผลลัพธ์ FreeMaker

ในตัวอย่างนี้เราจะมาดูวิธีการใช้งาน FreeMakerเป็นเทคโนโลยีมุมมอง Freemaker เป็นเครื่องมือสร้างเทมเพลตยอดนิยมที่ใช้ในการสร้างเอาต์พุตโดยใช้เทมเพลตที่กำหนดไว้ล่วงหน้า ให้เราสร้างไฟล์เทมเพลต Freemaker ชื่อhello.fm โดยมีเนื้อหาดังต่อไปนี้ -

Hello World ${name}

ไฟล์ด้านบนเป็นเทมเพลตที่ nameเป็นพารามิเตอร์ที่จะถูกส่งผ่านจากภายนอกโดยใช้การกระทำที่กำหนดไว้ คุณจะเก็บไฟล์นี้ไว้ใน CLASSPATH ของคุณ

ต่อไปให้เราแก้ไขไฟล์ struts.xml เพื่อระบุผลลัพธ์ดังนี้ -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success" type = "freemarker">
            <param name = "location">/hello.fm</param>
         </result>
      </action>
      
   </package>

</struts>

ให้เราเก็บไฟล์ HelloWorldAction.java, HelloWorldAction.jsp และ index.jsp ตามที่เราสร้างไว้ในบทตัวอย่าง

ตอนนี้คลิกขวาที่ชื่อโครงการแล้วคลิก Export > WAR File เพื่อสร้างไฟล์ War

จากนั้นปรับใช้ WAR นี้ในไดเร็กทอรี webapps ของ Tomcat สุดท้ายเริ่มเซิร์ฟเวอร์ Tomcat และพยายามเข้าถึง URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. ซึ่งจะแสดงหน้าจอต่อไปนี้

ป้อนค่า "Struts2" และส่งเพจ คุณควรจะเห็นหน้าถัดไป

อย่างที่คุณเห็นนี่เหมือนกับมุมมอง JSP ทุกประการยกเว้นว่าเราไม่ได้เชื่อมโยงกับการใช้ JSP เป็นเทคโนโลยีมุมมอง เราได้ใช้ Freemaker ในตัวอย่างนี้

ประเภทผลลัพธ์การเปลี่ยนเส้นทาง

redirectชนิดผลลัพธ์เรียกใช้เมธอดresponse.sendRedirect ()มาตรฐานทำให้เบราว์เซอร์สร้างคำขอใหม่ไปยังตำแหน่งที่กำหนด

เราสามารถระบุตำแหน่งในเนื้อความขององค์ประกอบ <result ... > หรือเป็นองค์ประกอบ <param name = "location"> การเปลี่ยนเส้นทางยังรองรับไฟล์parseพารามิเตอร์. นี่คือตัวอย่างที่กำหนดค่าโดยใช้ XML -

<action name = "hello" 
   class = "com.tutorialspoint.struts2.HelloWorldAction"
   method = "execute">
   <result name = "success" type = "redirect">
      <param name = "location">
         /NewWorld.jsp
      </param >
   </result>
</action>

ดังนั้นเพียงแค่แก้ไขไฟล์ struts.xml ของคุณเพื่อกำหนดประเภทการเปลี่ยนเส้นทางตามที่กล่าวไว้ข้างต้นและสร้างไฟล์ NewWorld.jpg ใหม่ซึ่งคุณจะถูกเปลี่ยนเส้นทางเมื่อใดก็ตามที่การดำเนินการของ hello จะส่งคืนความสำเร็จ คุณสามารถตรวจสอบตัวอย่างการดำเนินการเปลี่ยนเส้นทาง Struts 2เพื่อความเข้าใจที่ดีขึ้น