In diesem Artikel wird die Interaktion zwischen Ajax und Servlet anhand von Beispielen analysiert. Der Code enthält detailliertere Kommentare, um das Lesen und Verstehen für alle zu erleichtern. Die spezifische Implementierungsmethode ist wie folgt:
1.JavaScript-Teil
var req; /*Parameter an ajaxServlet senden und qualifizierte XML-Dokumente zurückgeben*/ var f=document.getElementById("form_pub"); var key=fsoptions[fsselectedIndex]. ; //Erhalten Sie einen Verweis auf den Text in select if (window.XMLHttpRequest) { req = new XMLHttpRequest(); url = "ajaxServlet?action="+key+"&bm=UTF-8"; }else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); url = "ajaxServlet?action= "+key+"&bm=gbk"; } if(req) { req.open("GET",url, true); req.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); //Wenn der Header hier nicht gesetzt ist, führt dies dazu, dass Firfox Daten falsch sendet und die vom Servlet empfangenen Parameter dies tun verstümmelt sein. Im IE Medium req.onreadystatechange = complete; //req.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); } } /*Analysiere das zurückgegebene XML-Dokument*/ function complete(){ if (req.readyState == 4) { if (req.status == 200) { var items=document.getElementById ("belong"); //Das Folgende ist das XML-Dokument, das durch das Parsen zurückgegeben wird. var xmlDoc = req.responseXML; Node=xmlDoc.getElementsByTagName("type_name"); //var str=new Array(); //Arbeitselemente löschen.innerHTML=""; 0;i<Node.length;i++) { str=Node[i]; //alert(str.childNodes[0].nodeValue); objectOption=document.createElement("option"); items.options.add(objectOption); //firfox unterstützt innerText nicht und muss durch textContent ersetzt werden, wenn (window.ActiveXObject) {objectOption.innerText=str.childNodes[0] .nodeValue; } else {objectOption.textContent=str.childNodes[0].nodeValue;} } } } }
2. Servlet-Seite:
package ajax;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse ;Import Data_GetConn.GetConn;//Dieses Paket wurde von mir selbst geschrieben, um den Verweis auf MySQL zu erhalten, import java.sql.*;//Dieses Paket muss es haben! ! öffentliche Klasse ajaxServlet erweitert HttpServlet{ //private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";//Hier ist es am besten, UTF-8 für die Codierung zu verwenden public void init() throws ServletException{} public void doGet (HttpServletRequest-Anfrage, HttpServletResponse-Antwort) löst ServletException, IOException { Response.setContentType("text/xml; charset=UTF-8"); //Die folgenden zwei Sätze dienen zum Abbrechen des lokalen Caches Response.setHeader("Cache-Control", "no-cache"); " Pragma", "no-cache"); PrintWriter out = Response.getWriter(); String action = request.getParameter("action"); request.getParameter("bm"); if(("gbk").equals(bm)) { action=new String(action.getBytes("ISO-8859-1"),"gbk");//will get Die Daten werden mit gbk neu kodiert! (Danke an Lehrer Dong Wei) } else { action=new String(action.getBytes("ISO-8859-1"),"gbk"); try { GetConn wq=new GetConn(); Connection con=wq.getCon ( ); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select items from class where main='"+action+"'"); StringBuffer sb = new StringBuffer(); sb.append("<type>"); while(rs.next()) { sb.append("<type_name>"+rs .getString(1)+"</type_name>"); } //sb.append("<type_name>"+action+"</type_name>"); sb.append("</type>"); out.write(sb.toString());//Beachten Sie die Stream-Ausgabe an JSP hier, die Abfangmethode out.close(); stmt.close() im Skript ; con.close(); } Catch(Exception ex) { } }}