ก่อนอื่นใช้อินเทอร์เฟซการส่งผู้ใช้เป็นตัวอย่าง (กล่องข้อความ, กล่องรหัสผ่าน, การเลือก, แบบฟอร์มแบบเลื่อนลง ฯลฯ ) เอฟเฟกต์มีดังนี้
<! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> charset = utf-8 "> <title> การลงทะเบียนผู้ใช้ </title> </head> <body> <!-การลงทะเบียนผู้ใช้-> <form action ="/requesttest/request5 "method =" get "> <table> <! Box-> <tr> <td> รหัสผ่าน </td> <td> <อินพุต type = "รหัสผ่าน" ชื่อ = "รหัสผ่าน"/> </td> </tr> <!-วิทยุปุ่มตัวเลือก-> <tr> <td> เพศ </td> <td> หญิง </td> </tr> <!-กล่องกาเครื่องหมาย-> <tr> <td> โฮสต์ </td> <td> <อินพุต type = "ช่องทำเครื่องหมาย" name = "Hobby" value = "Sport"/> Sports <อินพุต type = "copbox" name = "Hobby" value = "Music"/> music < กล่อง-> <tr> <td> เมือง </td> <เลือกชื่อ = "เมือง"> <ตัวเลือกค่า = "ปักกิ่ง"> ปักกิ่ง </ตัวเลือก> <ตัวเลือกค่า = "เซี่ยงไฮ้"> เซี่ยงไฮ้ </ตัวเลือก> โปรไฟล์ </td> <td> <textarea rows = "5" cols = "60" name = "แนะนำ"> </textarea> </td> </tr> <tr> <td colspan = "2"> <อินพุตประเภท = "ส่ง" value = "ลงทะเบียน"/> </td> </tr>
หมายเหตุ: คำจำกัดความและการใช้งานของแท็ก HTML <Form> คือ:
<!-แอตทริบิวต์การกระทำที่จำเป็นระบุตำแหน่งที่จะส่งข้อมูลแบบฟอร์มเมื่อส่งแบบฟอร์ม -> <form action = "value">
ค่าแอตทริบิวต์เป็น URL ซึ่งระบุว่าจะส่งข้อมูลแบบฟอร์มได้ที่ไหน ค่าที่เป็นไปได้:
URL สัมบูรณ์ - ชี้ไปที่ไซต์อื่น ๆ (เช่น src =” www.example.com/example.htm”)
URL สัมพัทธ์ - ชี้ไปที่ไฟล์ภายในไซต์ (เช่น src =” example.htm”)
ตัวอย่างเช่นแบบฟอร์มต่อไปนี้มีสองฟิลด์อินพุตและปุ่มส่ง เมื่อส่งแบบฟอร์มข้อมูลแบบฟอร์มจะถูกส่งไปยังหน้าชื่อ "form_action.asp":
<form action = "form_action.asp" method = "get"> <p> ชื่อแรก: <input type = "text" name = "fname" /> </p> <p> ชื่อนามสกุล: <input type = "text" name = "lname" /> </p>
วิธีการได้รับดังนั้นข้อมูลจะถูกดึงในวิธีการ detget ของ servlet
Public Class RequestServlet5 ขยาย HTTPSERVLET {โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, httpservletResponse การตอบสนอง) โยน servletexception, ioexception {// แก้รหัสโพสต์ request.getParameter ("ชื่อผู้ใช้"); System.out.println (ชื่อผู้ใช้); // รับ value // แก้ปัญหา Get Get Gater (ตัวอย่างเช่นป้อนภาษาจีน) --- ใช้การเข้ารหัสด้วยตนเอง // ชื่อผู้ใช้ = urlencoder.encode (ชื่อผู้ใช้, "iso-8859-1"); // การเข้ารหัสด้วย iso // username = urldecoder.decode // การถอดรหัสด้วยชื่อผู้ใช้ UTF-8 = สตริงใหม่ (ชื่อผู้ใช้ GetBytes ("ISO-8859-1"), "UTF-8"); System.out.println (ชื่อผู้ใช้); // การตรวจสอบที่ไม่ใช่ NULL ถ้า (ชื่อผู้ใช้! = null && ชื่อผู้ใช้ (). ความยาว ()> 0) {System.out.println ("ชื่อผู้ใช้ตามกฎหมาย");} // ใช้ getParameter เพื่อรับช่องทำเครื่องหมาย (ช่องทำเครื่องหมาย) โดยค่าเริ่มต้นสามารถรับข้อมูลแรกได้เท่านั้น String Hobby = request.getParameter ("Hobby"); // กล่องตรวจสอบแบบหลายช่องทาง. request.getParametervalues ("Hobby"); System.out.println (array.toString (งานอดิเรก)); System.out.println ("---------------------------------------------------------------------------------------------------------- - request.getParameterNames (); array.toString (request.getParameterValues (ชื่อ)));} system.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------- - parametermap.keyset (); สำหรับ (คีย์สตริง: คีย์) {// คีย์คือพารามิเตอร์ namesystem.out.println (คีย์ + ":" + อาร์เรย์. toString (parametermap.get (คีย์));}} โมฆะสาธารณะ การตอบสนอง);}}เหตุผลสำหรับพารามิเตอร์ที่อ่านไม่ออก
การเข้ารหัส URL เป็นรูปแบบที่ใช้โดยเบราว์เซอร์ในการป้อนข้อมูลแบบฟอร์ม เบราว์เซอร์ได้รับชื่อและค่าทั้งหมดจากแบบฟอร์มเข้ารหัสในพารามิเตอร์ชื่อ/ค่า (ลบอักขระเหล่านั้นที่ไม่สามารถถ่ายโอนได้จัดอันดับข้อมูล ฯลฯ ) เป็นส่วนหนึ่งของ URL หรือส่งไปยังเซิร์ฟเวอร์แยกต่างหาก
วิธีการร้องขอที่แตกต่างกันสอดคล้องกับโซลูชันที่แตกต่างกัน:
โพสต์- คำขอ Setcharacterencoding ("ชุดเข้ารหัสไคลเอนต์");
รับรหัสที่อ่านไม่ออกด้วยตนเอง
ชื่อผู้ใช้ = urlencoder.encode (ชื่อผู้ใช้, "iso-8859-1"); // เข้ารหัสชื่อผู้ใช้ = urldecoder.decode (ชื่อผู้ใช้, "UTF-8"); // ถอดรหัสด้วย UTF-8
ลดความซับซ้อนของวิธีการเขียนข้างต้น: ชื่อผู้ใช้ = สตริงใหม่ (ชื่อผู้ใช้ GetBytes ("ISO-8859-1"), "UTF-8");
รับชุดอักขระการถอดรหัสเริ่มต้นที่เล่นไม่ได้
ใน tomcat/conf/server.xml
เพิ่มคุณสมบัติ uriencoding = "utf-8" ในตัวเชื่อมต่อ
สรุป: ในระหว่างการพัฒนาพยายามอย่าแก้ไขชุดการถอดรหัสเริ่มต้นของ TOMCAT โปรดลองใช้โพสต์ให้มากที่สุดเพื่อส่งคำขอ หากคุณต้องใช้ Get ให้เข้ารหัสด้วยตนเอง