Cet article analyse l'interaction entre Ajax et le servlet sous forme d'exemples, et il y a des commentaires plus détaillés dans le code pour aider tout le monde à lire et à comprendre. La méthode spécifique de mise en œuvre est la suivante :
1.Partie JavaScript
var req; /*Envoyer les paramètres à ajaxServlet via une transmission asynchrone de XMLHTTP et renvoyer des documents XML qualifiés*/ var url; function getResult() { var f=document.getElementById("form_pub"); ; //Obtenir une référence au texte dans select if (window.XMLHttpRequest) { req = new XMLHttpRequest(); url = "ajaxServlet?action="+key+"&bm=UTF-8"; }else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); "+key+"&bm=gbk"; } if(req) { req.open("GET",url, true); req.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); //Si l'en-tête n'est pas défini ici, Firefox enverra des données de manière incorrecte et les paramètres reçus par le servlet le seront. être tronqué. Dans IE Medium, normal req.onreadystatechange = complete; charset=UTF-8"); } } /*Analyser le document XML renvoyé*/ function complete(){ if (req.readyState == 4) { if (req.status == 200) { var items=document.getElementById ("appartenir"); //Ce qui suit est le document XML renvoyé par l'analyse var xmlDoc = req.responseXML; Node=xmlDoc.getElementsByTagName("type_name"); //var str=new Array(); var str=null; //Effacer les éléments de travail.innerHTML=""; 0;i<Node.length;i++) { str=Node[i]; //alert(str.childNodes[0].nodeValue); objectOption=document.createElement("option"); items.options.add(objectOption); //firfox ne prend pas en charge innerText et doit être remplacé par textContent if (window.ActiveXObject) {objectOption.innerText=str.childNodes[0] .nodeValue; } else {objectOption.textContent=str.childNodes[0].nodeValue;} } } } }
2.Côté Servlet :
package ajax ; importer java.io.IOException ; importer java.io.PrintWriter ; importer javax.servlet.ServletException ; importer javax.servlet.http.HttpServlet ; importer javax.servlet.http.HttpServletRequest ; importer javax.servlet.http.HttpServletResponse ;importer Data_GetConn.GetConn;//Ce package est écrit par moi-même. Pour obtenir la référence à mysql, importez java.sql.*;//Ce package doit l'avoir ! ! public class ajaxServlet extends HttpServlet{ //private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";//Il est préférable d'utiliser UTF-8 pour l'encodage ici public void init() throws ServletException{} public void doGet (requête HttpServletRequest, réponse HttpServletResponse) renvoie ServletException, IOException { réponse.setContentType("text/xml; charset=UTF-8"); //Les deux phrases suivantes servent à annuler le cache local réponse.setHeader("Cache-Control", "no-cache"); "Pragma", "pas de cache"); PrintWriter out = réponse.getWriter(); String action = request.getParameter("action"); request.getParameter("bm"); if(("gbk").equals(bm)) { action=new String(action.getBytes("ISO-8859-1"),"gbk");//obtiendra Les données sont réencodées avec gbk! (Merci au professeur Dong Wei) } else { action=new String(action.getBytes("ISO-8859-1"),"gbk"); try { GetConn wq=new GetConn(); ( ); Déclaration stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("sélectionner les éléments de la classe où 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());//Notez la sortie du flux vers jsp ici, la méthode d'interception out.close(); ; con.close(); } catch(Exception ex) { } }}