บางคนอาจคิดว่า struts ไม่ใช่เรื่องง่ายที่จะเรียนรู้ ดูเหมือนว่าแนวคิดบางอย่างในนั้นจะทำให้คนที่ไม่เคยสัมผัสสับสน MVC1, MVC2, รูปแบบ... ฉันเขียนบทความนี้เพื่อให้คนที่ไม่เคยสัมผัส สตรัทมีคำแนะนำง่ายๆ แน่นอนว่า จำเป็นต้องมีคำแนะนำในการศึกษาสตรัทอย่างเป็นระบบ
กรณีนี้รวมถึงหน้าแรก การเข้าสู่ระบบของผู้ใช้ และหน้าวิซาร์ดเว็บไซต์ มันง่ายมาก ไม่มีแนวคิดที่ลึกซึ้งเกี่ยวกับ Struts เป็นหลัก
เว็บเซิร์ฟเวอร์ใช้ Tomcat4 ไปที่ http://jakarta.apache.org เพื่อดาวน์โหลด struts1.1 ปล่อยไฟล์ zip ไปที่ c:struts คัดลอก C:strutswebappsstruts-example.war ไปที่ c:tomcat4webapps แล้วเริ่ม Tomcat แพ็คเกจ war ถูกปล่อยลงในโฟลเดอร์ struts-example ลบแพ็คเกจ war และเปลี่ยนชื่อโฟลเดอร์ struts-example ที่จะทดสอบ
1. เปลี่ยน WEB-INFweb.xml เป็น:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE เว็บแอป PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" " http://java.sun.com/j2ee/dtds/web-app_2_2.dtd ">
<เว็บ -แอป>
<!—นี่คือคอนโทรลเลอร์ใน struts คลาส ActionServlet รับผิดชอบการถ่ายโอนคำสั่งของระบบ โดยจะอ่านข้อมูลการกำหนดค่าจาก struts-config.xml และเริ่มต้นเธรดในพื้นหลังของเซิร์ฟเวอร์โดยอัตโนมัติ หากไม่มีข้อกำหนดพิเศษ (เช่น การเพิ่มฟังก์ชันการแก้ไขภาษา) โปรแกรมเมอร์สามารถเพิกเฉยต่อส่วนนี้และใช้งานได้เลย -
<เซิร์ฟเล็ต>
<servlet-name>การกระทำ</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-พารามิเตอร์>
<ชื่อพารามิเตอร์>กำหนดค่า</ชื่อพารามิเตอร์>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-พารามิเตอร์>
<โหลดเมื่อเริ่มต้น>1</โหลดเมื่อเริ่มต้น>
</เซิร์ฟเล็ต>
<!--เซิร์ฟเล็ตของระบบนี้สามารถแมปกับไฟล์ที่มีส่วนต่อท้ายเป็น cool แทนที่จะเป็น .jspdo ทั่วไป ฯลฯ ชื่อส่วนต่อท้ายสามารถเปลี่ยนเป็นชื่อใดก็ได้ แน่นอนว่าชื่อนั้นจะต้องแข็งแรง #○¥% ! -
<การแมปเซิร์ฟเล็ต>
<servlet-name>การกระทำ</servlet-name>
<url-รูปแบบ>*.เย็น</url-รูปแบบ>
</การแมปเซิร์ฟเล็ต>
<!--โฮมเพจเริ่มต้นของระบบนี้คือ index.jsp ซึ่งสามารถมีได้หลายรายการ ระบบจะค้นหาตามลำดับ คล้ายกับ IIS-->
<ยินดีต้อนรับรายการไฟล์>
<ยินดีต้อนรับ-ไฟล์>index.jsp</ยินดีต้อนรับ-ไฟล์>
</ยินดีต้อนรับรายการไฟล์>
</web-app>
2. เปลี่ยน testWEB-INF struts-config.xml เป็น:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//การกำหนดค่า DTD Struts 1.1//EN"
" http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd ">
<struts-config>
<!--FormBean เป็นแนวคิดของ struts โดยพื้นฐานแล้วคือ JavaBean มันถูกใช้เพื่อจัดเก็บค่าของแต่ละฟิลด์ในรูปแบบเพจโดยอัตโนมัติและทดแทนฟิลด์ของฟอร์มในเวลาที่เหมาะสม เพื่อ request.getParameter ("fieldName") เหมือนแบบดั้งเดิม ซึ่งมักใช้โดยการกระทำในการแมปการกระทำ -->
<แบบฟอร์มถั่ว>
<!—เราจะเพิ่มคลาส UserForm ในภายหลังเพื่อเก็บข้อมูลผู้ใช้ -
<form-bean name="userForm" type="test.UserForm"/>
</แบบฟอร์มถั่ว>
<!--เก็บที่อยู่การส่งต่อส่วนกลางที่ทั้งระบบสามารถใช้ได้ คล้ายกับ window.location('index.jsp') ใน JavaScript และยังคล้ายกับปุ่มต่างๆ บนตัวควบคุมทีวี การสลับสี การปรับ ฯลฯ คือโฟลว์การควบคุมของเว็บแอปพลิเคชันที่ใช้ Struts ภายใต้สถานการณ์ปกติ หลังจากประมวลผลการดำเนินการแล้ว การดำเนินการดังกล่าวจะถูกส่งต่อไปยังเพจ JSP เพื่อแสดง นี่เป็นจุดสำคัญของการนำ MVC ไปใช้ใน JSP -
<การส่งต่อระดับโลก>
<!--failed.cool จะถือเป็นคำขอเซิร์ฟเล็ต และการประมวลผลการดำเนินการที่เกี่ยวข้องจะพบได้ในการแมปการดำเนินการ -
<ชื่อส่งต่อ = "ล้มเหลว" เส้นทาง = "/failed.cool"/>
<ชื่อส่งต่อ = "regist" path = "/regist.jsp"/>
</ส่งต่อทั่วโลก>
<!--จำคำขอที่มีส่วนต่อท้าย cool ใน web.xml ได้ไหม พวกเขาได้รับการจัดการที่นี่ ซึ่งเทียบเท่ากับส่วน Model ของสตรัท -
<การแมปการกระทำ>
<!--ในการประมวลผลคำขอของ register.cools FormBean ที่ใช้คือ userForm ซึ่งเป็นคลาส test.UserForm เมื่อมีข้อผิดพลาดเกิดขึ้นระหว่างการประมวลผล index.jsp จะถูกส่งกลับ-->
<action path="/regist" type="test.RegistAction" name="userForm" scope="request" input="/index.jsp" />
<เส้นทางการกระทำ="/ภาพรวม" ไปข้างหน้า="/hello.jsp"/>
<เส้นทางการดำเนินการ = "/ล้มเหลว" ไปข้างหน้า = "/wuwu.jsp" />
</การแมปการกระทำ>
</struts-config>
3. เพิ่ม FormBean ด้วย class path test.UserForm ต่อไปนี้เป็นเนื้อหาของคลาสนี้:
การทดสอบแพ็คเกจ;
นำเข้า org.apache.struts.action.ActionForm;
UserForm ระดับสาธารณะขยาย ActionForm
-
สตริงส่วนตัว name="lpw";//ชื่อผู้ใช้ สตริงส่วนตัว ps="1111";//รหัสผ่าน สาธารณะ UserForm(){}
setName โมฆะสาธารณะ (สตริง s) {ชื่อ = s;}
สตริงสาธารณะ getName() {ชื่อที่ส่งคืน;}
setPs โมฆะสาธารณะ (สตริง s) {ps = s;}
สตริงสาธารณะ getPs() {return ps;}
-
4. เพิ่มคลาสย่อยของ Action เส้นทางคลาสคือการทดสอบ RegistAction ต่อไปนี้เป็นเนื้อหาของคลาสนี้:
การทดสอบแพ็คเกจ;
นำเข้า java.lang.reflect.InvocationTargetException;
นำเข้า java.util.Locale;
นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.http.HttpServletRequest;
นำเข้า javax.servlet.http.HttpSession;
นำเข้า javax.servlet.http.HttpServletResponse;
นำเข้า org.apache.struts.action.Action;
นำเข้า org.apache.struts.action.ActionError;
นำเข้า org.apache.struts.action.ActionErrors;
นำเข้า org.apache.struts.action.ActionForm;
นำเข้า org.apache.struts.action.ActionForward;
นำเข้า org.apache.struts.action.ActionMapping;
นำเข้า org.apache.struts.util.MessageResources;
นำเข้า test.UserForm;
RegistAction คลาสสุดท้ายสาธารณะขยายการดำเนินการ
-
ดำเนินการ ActionForward สาธารณะ (การแมป ActionMapping, แบบฟอร์ม ActionForm, คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse)
พ่นข้อยกเว้น
-
สถานที่เกิดเหตุ สถานที่ = getLocale (คำขอ);
ข้อความ MessageResources = getResources (คำขอ);
เซสชัน HttpSession = request.getSession();
UserForm userform = แบบฟอร์ม (UserForm);
//ที่นี่คุณสามารถเรียกคลาสอื่นๆ เพื่อทำการเขียนฐานข้อมูลหรือการตัดสินเชิงตรรกะอื่นๆ //หากค่าของชื่อพารามิเตอร์ที่ส่งผ่านโดย UserForm เป็นค่าเริ่มต้น lpw มันจะส่งต่อไปยังล้มเหลว
// ชื่อนี้จะถูกค้นหาสำหรับที่อยู่ URL ที่แมปใน <global-forwards> ของ struts-config.xml // (อาจเป็นเส้นทางที่แน่นอนหรือเส้นทางสัมพัทธ์) สำหรับตัวอย่างนี้จะไปที่ failed.cool
//จดจำ? คำขอทั้งหมดที่มีคำต่อท้าย "cool" ไปที่ action-mapping เพื่อค้นหา // การประมวลผลการดำเนินการที่เกี่ยวข้อง
ถ้า ( "lpw".เท่ากับ(userform.getName()) )
กลับ (mapping.findForward("ล้มเหลว"));
อื่น
กลับ (mapping.findForward("ลงทะเบียน"));
-
}
5. หน้าใหม่หรือหน้าแก้ไขต่อไปนี้ทั้งหมดเทียบเท่ากับส่วน View ของ struts เปลี่ยนหน้าแรก index.jsp เป็น:
<%@ page contentType="text/html;charset=GBK" language="java" %>
<%@ การนำเข้าหน้า = "ทดสอบ*" %>
<a href="overview.cool">การนำทางไซต์</a><br>
<รูปแบบการกระทำ = "regist.cool" วิธีการ = "โพสต์">
<!—ชื่อของฟิลด์ในแบบฟอร์มจะต้องเหมือนกับพารามิเตอร์ใน UserForm เพื่อให้สามารถรับข้อมูลได้โดยอัตโนมัติโดยไม่ต้องใช้ request.getParameter("param");-->
ผู้ใช้:<input type="text" name="name"><br>
รหัสผ่าน:<input type="password" name="ps"><br>
<input type=submit value="เพิ่มผู้ใช้">
</form>
6. เพิ่ม hello.jsp สำหรับการนำทางไซต์:
<h1>แผนผังไซต์</h1>ต่อไปนี้คือเนื้อหาที่เติมโดยผู้อ่าน
7. เพิ่ม wuwu.jsp. เมื่อไม่มีผู้ใช้ใหม่เข้าสู่ระบบ พวกเขาจะถูกเปลี่ยนเส้นทางไปยังสิ่งนี้ หน้า:
<%@ หน้า contentType="text/html;charset=GBK" language="java" %>
<jsp:useBean id="beanlpw" class="test.UserForm" scope="เซสชัน"/>
ผู้ใช้ที่มีอยู่: <%=beanlpw.getName()%><br>
รหัสผ่าน: <%=beanlpw.getPs()%><br>
ไม่ได้รับผู้ใช้ใหม่!
8. เพิ่ม register.jsp เมื่อผู้ใช้ใหม่เข้าสู่ระบบ เขาจะถูกเปลี่ยนเส้นทางไปยังหน้านี้:
<%@ page contentType="text/html;charset=GBK" language="java" %>
<jsp:useBean id="beanlpw" class="test.UserForm" scope="เซสชัน"/>
บัญชีผู้ใช้ใหม่: <%=beanlpw.getName()%><br>
รหัสผ่าน: <%=beanlpw.getPs()%>
9. เริ่ม tomcat4 พิมพ์ http://localhost:8080/test/index.jsp ในเบราว์เซอร์ ดำเนินการ คุณสามารถดูผลลัพธ์ และเริ่มเข้าใจ M ของ ส่วน struts, V และ C ทำงานร่วมกัน แน่นอนว่านี่เป็นความตั้งใจดีของผู้เขียน หากผู้อ่านสับสนโปรดชี้ให้เห็นข้อผิดพลาด :)