Struts 2 - ไฟล์คอนฟิกูเรชัน

บทนี้จะนำคุณไปสู่การกำหนดค่าพื้นฐานซึ่งจำเป็นสำหรับไฟล์ Struts 2ใบสมัคร ที่นี่เราจะเห็นสิ่งที่สามารถกำหนดค่าได้ด้วยความช่วยเหลือของไฟล์กำหนดค่าที่สำคัญบางอย่างเช่นweb.xml, struts.xml, strutsconfig.xml และ struts.properties

พูดตามตรงคุณสามารถเริ่มทำงานได้โดยใช้ web.xml และ struts.xmlไฟล์การกำหนดค่า (ดังที่คุณได้เห็นไปแล้วในบทก่อนหน้าของเราซึ่งตัวอย่างของเราทำงานโดยใช้สองไฟล์นี้) อย่างไรก็ตามเพื่อความรู้ของคุณเราจะอธิบายเกี่ยวกับไฟล์อื่น ๆ ด้วย

ไฟล์ web.xml

ไฟล์คอนฟิกูเรชัน web.xml เป็นไฟล์คอนฟิกูเรชัน J2EE ที่กำหนดวิธีการประมวลผลอิลิเมนต์ของคำร้องขอ HTTP โดยคอนเทนเนอร์ servlet ไม่ใช่ไฟล์คอนฟิกูเรชัน Struts2 อย่างเคร่งครัด แต่เป็นไฟล์ที่ต้องกำหนดค่าเพื่อให้ Struts2 ทำงานได้

ตามที่กล่าวไว้ก่อนหน้านี้ไฟล์นี้เป็นจุดเริ่มต้นสำหรับเว็บแอปพลิเคชันใด ๆ จุดเริ่มต้นของแอ็พพลิเคชัน Struts2 จะเป็นตัวกรองที่กำหนดไว้ในตัวบอกการปรับใช้ (web.xml) ดังนั้นเราจะกำหนดรายการของคลาสFilterDispatcherใน web.xml ไฟล์ web.xml ต้องถูกสร้างขึ้นภายใต้โฟลเดอร์WebContent/WEB-INF.

นี่คือไฟล์คอนฟิกูเรชันแรกที่คุณจะต้องกำหนดค่าหากคุณเริ่มต้นโดยไม่ได้รับความช่วยเหลือจากเทมเพลตหรือเครื่องมือที่สร้างขึ้น (เช่น Eclipse หรือ Maven2)

ต่อไปนี้เป็นเนื้อหาของไฟล์ web.xml ที่เราใช้ในตัวอย่างสุดท้ายของเรา

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">
   
   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

</web-app>

โปรดทราบว่าเราจับคู่ตัวกรอง Struts 2 กับ /*และไม่ทำ /*.actionซึ่งหมายความว่า URL ทั้งหมดจะถูกแยกวิเคราะห์โดยตัวกรอง struts เราจะกล่าวถึงเรื่องนี้เมื่อเราจะอ่านบทคำอธิบายประกอบ

ไฟล์ Struts.xml

struts.xmlไฟล์มีข้อมูลการกำหนดค่าที่คุณจะแก้ไขเมื่อมีการพัฒนาการกระทำ ไฟล์นี้สามารถใช้เพื่อลบล้างการตั้งค่าเริ่มต้นสำหรับแอปพลิเคชันตัวอย่างเช่นstruts.devMode = falseและการตั้งค่าอื่น ๆ ซึ่งกำหนดไว้ในไฟล์คุณสมบัติ ไฟล์นี้สามารถสร้างได้ภายใต้โฟลเดอร์WEB-INF/classes.

ให้เราดูไฟล์ struts.xml ที่เราสร้างขึ้นในตัวอย่าง Hello World ที่อธิบายไว้ในบทที่แล้ว

<?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">/HelloWorld.jsp</result>
      </action>
      
      <-- more actions can be listed here -->

   </package>
   <-- more packages can be listed here -->

</struts>

สิ่งแรกที่ควรทราบคือ DOCTYPE. ไฟล์คอนฟิกูเรชัน struts ทั้งหมดต้องมีประเภทหลักที่ถูกต้องดังที่แสดงในตัวอย่างเล็ก ๆ น้อย ๆ ของเรา <struts> เป็นองค์ประกอบแท็กรูทซึ่งเราประกาศแพ็กเกจที่แตกต่างกันโดยใช้แท็ก <package> ที่นี่ <package> อนุญาตให้แยกและแยกส่วนของการกำหนดค่า สิ่งนี้มีประโยชน์มากเมื่อคุณมีโปรเจ็กต์ขนาดใหญ่และโปรเจ็กต์ถูกแบ่งออกเป็นโมดูลต่างๆ

ตัวอย่างเช่นหากโปรเจ็กต์ของคุณมีสามโดเมน ได้แก่ business_application, customer_application และ staff_application คุณสามารถสร้างแพ็กเกจสามแพ็กเกจและจัดเก็บการดำเนินการที่เกี่ยวข้องในแพ็กเกจที่เหมาะสม

แท็กแพ็คเกจมีคุณสมบัติดังต่อไปนี้ -

ซีเนียร์ No คุณสมบัติและคำอธิบาย
1

name (required)

ตัวระบุเฉพาะสำหรับแพ็กเกจ

2

extends

แพ็คเกจนี้ขยายจากแพ็คเกจใด โดยค่าเริ่มต้นเราใช้ struts-default เป็นแพ็กเกจพื้นฐาน

3

abstract

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

4

namespace

เนมสเปซเฉพาะสำหรับการดำเนินการ

constant ควรใช้แท็กพร้อมกับแอตทริบิวต์ชื่อและค่าเพื่อแทนที่คุณสมบัติใด ๆ ต่อไปนี้ที่กำหนดไว้ใน default.propertiesเช่นเราเพิ่งตั้งค่า struts.devModeทรัพย์สิน. การตั้งค่าstruts.devMode คุณสมบัติช่วยให้เราเห็นข้อความการดีบักเพิ่มเติมในไฟล์บันทึก

เรากำหนด action แท็กสอดคล้องกับทุก URL ที่เราต้องการเข้าถึงและเรากำหนดคลาสด้วยเมธอด execute () ซึ่งจะเข้าถึงเมื่อใดก็ตามที่เราจะเข้าถึง URL ที่เกี่ยวข้อง

ผลลัพธ์จะเป็นตัวกำหนดสิ่งที่ส่งกลับไปยังเบราว์เซอร์หลังจากดำเนินการแล้ว สตริงที่ส่งกลับจากการกระทำควรเป็นชื่อของผลลัพธ์ ผลลัพธ์จะได้รับการกำหนดค่าต่อการกระทำตามด้านบนหรือเป็นผลลัพธ์ "ทั่วโลก" ซึ่งพร้อมใช้งานสำหรับทุกการกระทำในแพ็กเกจ ผลลัพธ์มีทางเลือกname และ typeคุณลักษณะ. ค่าชื่อเริ่มต้นคือ "สำเร็จ"

ไฟล์ Struts.xml สามารถขยายขนาดใหญ่ได้เมื่อเวลาผ่านไปดังนั้นการทำลายมันด้วยแพ็คเกจจึงเป็นวิธีหนึ่งในการแยกส่วน แต่ Strutsเสนอวิธีอื่นในการแยกไฟล์ struts.xml คุณสามารถแยกไฟล์ออกเป็นไฟล์ 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>
   <include file="my-struts1.xml"/>
   <include file="my-struts2.xml"/>
</struts>

ไฟล์กำหนดค่าอื่น ๆ ที่เราไม่ได้กล่าวถึงคือ struts-default.xml ไฟล์นี้มีการตั้งค่าการกำหนดค่ามาตรฐานสำหรับ Struts และคุณไม่จำเป็นต้องแตะการตั้งค่าเหล่านี้สำหรับโครงการของคุณ 99.99% ด้วยเหตุนี้เราจะไม่ลงรายละเอียดเกี่ยวกับไฟล์นี้มากเกินไป หากคุณสนใจลองดูที่ไฟล์default.properties ไฟล์ที่มีอยู่ในไฟล์ struts2-core-2.2.3.jar

ไฟล์ Struts-config.xml

ไฟล์คอนฟิกูเรชัน struts-config.xml คือลิงก์ระหว่างคอมโพเนนต์ View และ Model ใน Web Client แต่คุณจะไม่ต้องแตะการตั้งค่าเหล่านี้สำหรับ 99.99% ของโปรเจ็กต์ของคุณ

ไฟล์กำหนดค่าโดยทั่วไปมีองค์ประกอบหลักดังต่อไปนี้ -

ซีเนียร์ No ผู้สกัดกั้นและคำอธิบาย
1

struts-config

นี่คือโหนดรูทของไฟล์คอนฟิกูเรชัน

2

form-beans

นี่คือที่ที่คุณแมปคลาสย่อย ActionForm ของคุณกับชื่อ คุณใช้ชื่อนี้เป็นนามแฝงสำหรับ ActionForm ของคุณตลอดส่วนที่เหลือของไฟล์ strutsconfig.xml และแม้แต่ในเพจ JSP ของคุณ

3

global forwards

ส่วนนี้จะแมปเพจบนเว็บแอพของคุณกับชื่อ คุณสามารถใช้ชื่อนี้เพื่ออ้างถึงเพจจริง ซึ่งจะหลีกเลี่ยงการเข้ารหัส URL บนหน้าเว็บของคุณ

4

action-mappings

นี่คือที่ที่คุณประกาศตัวจัดการฟอร์มและยังเรียกอีกอย่างว่าการแมปการดำเนินการ

5

controller

ส่วนนี้กำหนดค่า Struts ภายในและแทบไม่ได้ใช้ในสถานการณ์จริง

6

plug-in

ส่วนนี้จะบอก Struts ว่าจะค้นหาไฟล์คุณสมบัติของคุณได้ที่ไหนซึ่งมีข้อความแจ้งและข้อความแสดงข้อผิดพลาด

ต่อไปนี้เป็นไฟล์ struts-config.xml ตัวอย่าง -

<?xml version = "1.0" Encoding = "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
   "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

   <!-- ========== Form Bean Definitions ============ -->
   <form-beans>
      <form-bean name = "login" type = "test.struts.LoginForm" />
   </form-beans>

   <!-- ========== Global Forward Definitions ========= -->
   <global-forwards>
   </global-forwards>

   <!-- ========== Action Mapping Definitions ======== -->
   <action-mappings>
      <action
         path = "/login"
         type = "test.struts.LoginAction" >

         <forward name = "valid" path = "/jsp/MainMenu.jsp" />
         <forward name = "invalid" path = "/jsp/LoginView.jsp" />
      </action>
   </action-mappings>

   <!-- ========== Controller Definitions ======== -->
   <controller contentType = "text/html;charset = UTF-8"
      debug = "3" maxFileSize = "1.618M" locale = "true" nocache = "true"/>

</struts-config>

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ struts-config.xml โปรดตรวจสอบเอกสาร struts ของคุณ

ไฟล์ Struts.properties

ไฟล์คอนฟิกูเรชันนี้มีกลไกในการเปลี่ยนลักษณะการทำงานเริ่มต้นของเฟรมเวิร์ก จริงๆแล้วคุณสมบัติทั้งหมดที่มีอยู่ในไฟล์struts.properties ไฟล์การกำหนดค่ายังสามารถกำหนดค่าในไฟล์ web.xml ใช้ init-paramเช่นเดียวกับการใช้แท็กค่าคงที่ในไฟล์ struts.xmlไฟล์กำหนดค่า แต่ถ้าคุณต้องการแยกสิ่งต่าง ๆ ออกจากกันและมีความเฉพาะเจาะจงมากขึ้นคุณสามารถสร้างไฟล์นี้ในโฟลเดอร์WEB-INF/classes.

ค่าที่กำหนดไว้ในไฟล์นี้จะแทนที่ค่าเริ่มต้นที่กำหนดค่าไว้ในไฟล์ default.propertiesซึ่งมีอยู่ในการแจกแจงแบบ struts2-core-xyzjar มีคุณสมบัติสองสามอย่างที่คุณอาจพิจารณาเปลี่ยนโดยใช้struts.properties ไฟล์ -

### When set to true, Struts will act much more friendly for developers
struts.devMode = true

### Enables reloading of internationalization files
struts.i18n.reload = true

### Enables reloading of XML configuration files
struts.configuration.xml.reload = true

### Sets the port that the server is run on
struts.url.http.port = 8080

บรรทัดใดก็ได้ที่ขึ้นต้นด้วย hash (#) จะถือว่าเป็นความคิดเห็นและจะถูกละเว้นโดย Struts 2.