1. เข้าถึงหรือเพิ่มแอตทริบิวต์คำขอ/เซสชัน/แอปพลิเคชัน
ขอบเขตสตริงสาธารณะ () พ่นข้อยกเว้น {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Application scope");//ใส่แอพลงใน ServletContext
ctx.getSession().put("ses", "session range");//ใส่ ses เข้าไปใน session
ctx.put("req", "request range");//ส่ง req ไปเป็นการร้องขอ
กลับ "ขอบเขต";
-
เจเอสพี:
<ร่างกาย>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</ร่างกาย>
2. รับวัตถุ HttpServletRequest / HttpSession / ServletContext / HttpServletResponse
วิธีที่หนึ่ง รับโดยตรงผ่านคลาส ServletActionContext:
สตริงสาธารณะ rsa() พ่นข้อยกเว้น {
คำขอ HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
ขอ.getSession()
การตอบสนอง HttpServletResponse = ServletActionContext.getResponse();
กลับ "ขอบเขต";
-
วิธีที่สอง ใช้อินเทอร์เฟซที่ระบุและแทรกเมื่อเฟรมเวิร์ก struts รันอยู่:
HelloWorldAction คลาสสาธารณะใช้ ServletRequestAware, ServletResponseAware, ServletContextAware {
คำขอ HttpServletRequest ส่วนตัว
servletContext ส่วนตัว servletContext;
การตอบสนอง HttpServletResponse ส่วนตัว
โมฆะสาธารณะ setServletRequest (คำขอ HttpServletRequest) {
this.request=req;
-
โมฆะสาธารณะ setServletResponse (ความละเอียด HttpServletResponse) {
this.response=res;
-
โมฆะสาธารณะ setServletContext (เซอร์ ServletContext) {
this.servletContext=ser;
-
-
3. อัพโหลดไฟล์
ขั้นตอนที่หนึ่ง: เพิ่ม commons-fileupload-1.2.1.jar และ commons-io-1.3.2.jar ภายใต้ WEB-INF/lib ทั้งสองไฟล์สามารถดาวน์โหลดได้จากhttp://commons.apache.org/
ขั้นตอนที่ 2: ตั้งค่า enctype ของตารางฟอร์มเป็น: "multipart/form-data" ดังนี้:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="โพสต์">
<input type="file" name="uploadImage">
</แบบฟอร์ม>
ขั้นตอนที่ 3: เพิ่มแอตทริบิวต์ต่อไปนี้ในคลาส Action ส่วนสีแดงของแอตทริบิวต์สอดคล้องกับชื่อของฟิลด์ไฟล์ในรูปแบบ:
HelloWorldAction คลาสสาธารณะ{
private File uploadImage;//รับไฟล์ที่อัพโหลด
สตริงส่วนตัว uploadImageContentType;//รับประเภทไฟล์
สตริงส่วนตัว uploadImageFileName;//รับชื่อไฟล์
//เมธอด getter/setter ของคุณสมบัติจะถูกละไว้ที่นี่
การอัปโหลดสตริงสาธารณะ () พ่นข้อยกเว้น {
สตริง realpath = ServletActionContext.getServletContext().getRealPath("/images");
ไฟล์ไฟล์ = ไฟล์ใหม่ (realpath);
ถ้า(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, ไฟล์ใหม่ (ไฟล์, uploadImageFileName));
กลับ "ความสำเร็จ";
-
-
4. อัพโหลดหลายไฟล์
ขั้นตอนที่หนึ่ง: เพิ่ม commons-fileupload-1.2.1.jar และ commons-io-1.3.2.jar ภายใต้ WEB-INF/lib ทั้งสองไฟล์สามารถดาวน์โหลดได้จากhttp://commons.apache.org/
ขั้นตอนที่ 2: ตั้งค่า enctype ของตารางฟอร์มเป็น: "multipart/form-data" ดังนี้:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="โพสต์">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</แบบฟอร์ม>
ขั้นตอนที่ 3: เพิ่มแอตทริบิวต์ต่อไปนี้ในคลาส Action ส่วนสีแดงของแอตทริบิวต์สอดคล้องกับชื่อของฟิลด์ไฟล์ในรูปแบบ:
HelloWorldAction คลาสสาธารณะ{
ไฟล์ส่วนตัว[] uploadImages;//รับไฟล์ที่อัพโหลด
private String[] uploadImagesContentType;//รับประเภทของไฟล์
private String[] uploadImagesFileName;//รับชื่อไฟล์
//เมธอด getter/setter ของคุณสมบัติจะถูกละไว้ที่นี่
การอัปโหลดสตริงสาธารณะ () พ่นข้อยกเว้น {
สตริง realpath = ServletActionContext.getServletContext().getRealPath("/images");
ไฟล์ไฟล์ = ไฟล์ใหม่ (realpath);
ถ้า(!file.exists()) file.mkdirs();
สำหรับ (int i = 0 ; i <uploadImages.length; i ++) { ไฟล์ uploadImage = uploadImages [i];
FileUtils.copyFile(uploadImage, ไฟล์ใหม่ (ไฟล์, uploadImagesFileName[i]));
-
กลับ "ความสำเร็จ";
-
5. ตัวดักแบบกำหนดเอง
ในการปรับแต่ง interceptor คุณต้องใช้อินเทอร์เฟซ com.opensymphony.xwork2.interceptor.Interceptor:
PermissionInterceptor คลาสสาธารณะใช้ Interceptor {
serialVersionUID ยาวสุดท้ายคงที่ส่วนตัว = -5178310397732210602L;
โมฆะสาธารณะทำลาย () {
-
โมฆะสาธารณะ init() {
-
การสกัดกั้นสตริงสาธารณะ (การเรียกใช้ ActionInvocation) พ่นข้อยกเว้น {
System.out.println("ป้อนตัวสกัดกั้น");
ถ้า (มีผู้ใช้อยู่ในเซสชัน){
ผลลัพธ์สตริง = การเรียกใช้. เรียกใช้ ();
}อื่น{
กลับ "เข้าสู่ระบบ";
-
//System.out.println("ค่าที่ส่งคืน:"+ ผลลัพธ์);
//ส่งคืนผลลัพธ์;
-
-
<ชื่อแพ็คเกจ = "csdn" เนมสเปซ = "/ ทดสอบ" ขยาย = "struts-default">
<ตัวดักจับ>
<ชื่อตัวสกัดกั้น = "สิทธิ์" />
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name=" สิทธิ์ " />
</interceptor-กอง>
</ตัวดัก>
<action name="helloworld_*" method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</การกระทำ>
</แพ็คเกจ>
เนื่องจากฟังก์ชันใน struts2 เช่น การอัปโหลดไฟล์ การตรวจสอบข้อมูล และการห่อหุ้มพารามิเตอร์คำขอให้เป็นการดำเนินการทั้งหมดถูกนำไปใช้โดย interceptor ใน defaultStack เริ่มต้นของระบบ Interceptor ที่เรากำหนดจำเป็นต้องอ้างอิง defaultStack เริ่มต้นของระบบ เพื่อให้แอปพลิเคชันสามารถใช้ struts2 จำนวนมากได้ คุณสมบัติที่มีให้โดยกรอบงาน
หากคุณต้องการให้การดำเนินการทั้งหมดภายใต้แพ็คเกจใช้ interceptor แบบกำหนดเอง คุณสามารถกำหนด interceptor ให้เป็น interceptor เริ่มต้นได้ผ่านทาง <default-interceptor-ref name="permissionStack"/> หมายเหตุ: สามารถระบุ interceptor เริ่มต้นได้เพียงตัวเดียวต่อแพ็คเกจ นอกจากนี้ เมื่อเราระบุ interceptor สำหรับการดำเนินการในแพ็คเกจอย่างชัดเจนแล้ว interceptor เริ่มต้นจะไม่ทำงาน
6. การตรวจสอบอินพุต
ใน struts2 เราสามารถตรวจสอบวิธีดำเนินการทั้งหมดหรือตรวจสอบวิธีดำเนินการที่ระบุได้
Struts2 มีวิธีการใช้งานสองวิธีสำหรับการตรวจสอบอินพุต:
1. ดำเนินการโดยการเขียนโค้ดด้วยตนเอง
2. ใช้งานตามการกำหนดค่า XML
7. เขียนโค้ดด้วยตนเองเพื่อตรวจสอบอินพุตของวิธีการทั้งหมดในการดำเนินการ
ด้วยการแทนที่เมธอด validate() เมธอด validate() จะตรวจสอบวิธีการทั้งหมดในการดำเนินการที่มีลายเซ็นเดียวกันกับวิธีการดำเนินการ เมื่อการตรวจสอบข้อมูลบางอย่างล้มเหลว เราควรเรียกใช้เมธอด addFieldError() เพื่อเพิ่มข้อมูลความล้มเหลวในการตรวจสอบให้กับ fieldErrors ของระบบ (เพื่อที่จะใช้เมธอด addFieldError() การดำเนินการสามารถสืบทอด ActionSupport ได้ หาก fieldErrors ของระบบมีข้อมูลความล้มเหลว struts2 จะร้องขอจะถูกส่งต่อไปยังผลลัพธ์ที่มีชื่ออินพุต ข้อมูลความล้มเหลวสามารถแสดงผ่าน <s:fielderror/> ในมุมมองอินพุต
validate() ตัวอย่างการใช้งาน:
โมฆะสาธารณะตรวจสอบ () {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("ชื่อผู้ใช้", "หมายเลขโทรศัพท์มือถือไม่สามารถเว้นว่างได้");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "รูปแบบของหมายเลขโทรศัพท์มือถือไม่ถูกต้อง"); }
-
-
หลังจากการตรวจสอบล้มเหลว คำขอจะถูกส่งต่อไปยังมุมมองอินพุต:
<result name="input">/WEB-INF/page/addUser.jsp</result>
ใช้ <s:fielderror/> ในหน้า addUser.jsp เพื่อแสดงข้อมูลความล้มเหลว
ใช้งานผ่านเมธอด validateXxx() โดย validateXxx() จะตรวจสอบเฉพาะเมธอดชื่อ xxx ในการดำเนินการเท่านั้น ตัวอักษรตัวแรกของ xxx ควรเป็นตัวพิมพ์ใหญ่ เมื่อการตรวจสอบข้อมูลบางอย่างล้มเหลว เราควรเรียกใช้เมธอด addFieldError() เพื่อเพิ่มข้อมูลความล้มเหลวในการตรวจสอบให้กับ fieldErrors ของระบบ (เพื่อที่จะใช้เมธอด addFieldError() การดำเนินการสามารถสืบทอด ActionSupport ได้ หาก fieldErrors ของระบบมีข้อมูลความล้มเหลว struts2 จะร้องขอจะถูกส่งต่อไปยังผลลัพธ์ที่มีชื่ออินพุต ข้อมูลความล้มเหลวสามารถแสดงผ่าน <s:fielderror/> ในมุมมองอินพุต
ตัวอย่างการใช้ validateXxx() วิธีการ:
สตริงสาธารณะเพิ่ม () พ่นข้อยกเว้น { return "success";}
โมฆะสาธารณะ validateAdd(){
if(username==null && "".equals(username.trim())) this.addFieldError("ชื่อผู้ใช้", "ชื่อผู้ใช้ไม่สามารถเว้นว่างได้");
-
หลังจากการตรวจสอบล้มเหลว คำขอจะถูกส่งต่อไปยังมุมมองอินพุต:
<result name="input">/WEB-INF/page/addUser.jsp</result>
ใช้ <s:fielderror/> ในหน้า addUser.jsp เพื่อแสดงข้อมูลความล้มเหลว
8. กระบวนการตรวจสอบอินพุต
1. ตัวแปลงประเภทจะทำการแปลงประเภทตามพารามิเตอร์คำขอ และกำหนดค่าที่แปลงแล้วให้กับแอตทริบิวต์ในการดำเนินการ
2. หากมีข้อยกเว้นเกิดขึ้นระหว่างการแปลงชนิด ระบบจะบันทึกข้อมูลข้อยกเว้นลงใน ActionContext และผู้สกัดกั้น ConversionError จะเพิ่มข้อมูลข้อยกเว้นให้กับ fieldErrors ไม่ว่าจะมีข้อยกเว้นเกิดขึ้นระหว่างการแปลงประเภทหรือไม่ก็ตาม ขั้นตอนที่ 3 จะถูกป้อนเข้าไป
3. ขั้นแรกระบบจะเรียกเมธอด validateXxx() ในการดำเนินการผ่านเทคโนโลยีการสะท้อน โดยที่ xxx คือชื่อเมธอด
4. จากนั้นเรียกใช้เมธอด validate() ในการดำเนินการ
5. หลังจาก 4 ขั้นตอนข้างต้น หากมีข้อมูลข้อผิดพลาดใน fieldErrors ในระบบ (นั่นคือ ขนาดของคอลเลกชันที่จัดเก็บข้อมูลข้อผิดพลาดมากกว่า 0) ระบบจะส่งต่อคำขอโดยอัตโนมัติไปยังมุมมองที่ชื่ออินพุต หากไม่มีข้อมูลข้อผิดพลาดในฟิลด์ข้อผิดพลาดในระบบ ระบบจะดำเนินการตามวิธีการประมวลผลในการดำเนินการ
9. ใช้การตรวจสอบอินพุตสำหรับวิธีดำเนินการทั้งหมดตามวิธีการกำหนดค่า XML
เมื่อใช้วิธีการกำหนดค่าแบบ XML เพื่อใช้การตรวจสอบอินพุต การดำเนินการยังต้องสืบทอด ActionSupport และจัดเตรียมไฟล์การตรวจสอบด้วย xml โดยที่ ActionClassName เป็นชื่อคลาสธรรมดาของการดำเนินการ และ -validation เป็นวิธีการเขียนแบบตายตัว หากคลาส Action คือ cn.csdn.UserAction ชื่อของไฟล์ควรเป็น: UserAction-validation.xml ต่อไปนี้เป็นเทมเพลตสำหรับไฟล์การยืนยัน:
<?xml version="1.0" encoding="UTF-8"?>
<!เครื่องมือตรวจสอบ DOCTYPE PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<ผู้ตรวจสอบความถูกต้อง>
<ชื่อฟิลด์="ชื่อผู้ใช้">
<field-validator type="requiredstring">
<ชื่อพารามิเตอร์ = "ตัดแต่ง"> จริง </ พารามิเตอร์>
<message>ชื่อผู้ใช้ต้องไม่เว้นว่าง!</message>
</ตัวตรวจสอบฟิลด์>
</ฟิลด์>
</ผู้ตรวจสอบ>
<field> ระบุแอตทริบิวต์ที่จะตรวจสอบในการดำเนินการ และ <field-validator> ระบุเครื่องมือตรวจสอบความถูกต้อง สตริงที่ระบุข้างต้นจัดทำโดยระบบ เครื่องมือตรวจสอบความถูกต้องสามารถพบได้ใน default.xml ใต้ com.opensymphony.xwork2.validator.validators ใน xwork-2.x.jar
<message> คือข้อความแจ้งหลังจากการตรวจสอบล้มเหลว หากจำเป็นต้องมีการปรับให้เป็นสากล คุณสามารถระบุแอตทริบิวต์คีย์สำหรับข้อความได้ และค่าของคีย์จะเป็นคีย์ในไฟล์ทรัพยากร
ในไฟล์การตรวจสอบนี้ แอตทริบิวต์ชื่อผู้ใช้ของประเภทสตริงในการดำเนินการได้รับการตรวจสอบแล้ว ก่อนอื่นต้องเรียกเมธอด trim() เพื่อลบช่องว่าง จากนั้นตรวจสอบว่าชื่อผู้ใช้ว่างเปล่าหรือไม่
เมื่อเขียนไฟล์การตรวจสอบ ข้อความวิธีใช้จะไม่ปรากฏขึ้น เมื่อเขียนไฟล์การตรวจสอบ ActionClassName-validation.xml หากข้อความวิธีใช้ไม่ปรากฏขึ้น คุณสามารถแก้ไขปัญหาได้ดังต่อไปนี้:
windowwos->preferences->myeclipse->ไฟล์และตัวแก้ไข->xml->xmlcatalog
คลิก "เพิ่ม" เลือก "ระบบไฟล์" ในตำแหน่งในหน้าต่างที่ปรากฏขึ้น จากนั้นเลือก xwork-validator-1.0.3.dtd ในไดเร็กทอรี src/java ของไดเร็กทอรีคลายการบีบอัด xwork-2.1.2 และกลับไปที่ หน้าต่างการตั้งค่า อย่าเพิ่งรีบปิดหน้าต่าง คุณควรเปลี่ยน Key Type ในหน้าต่างเป็น URI คีย์เปลี่ยนเป็น http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd