Este artigo analisa a interação entre Ajax e servlet na forma de exemplos, e há comentários mais detalhados no código para ajudar todos a ler e compreender. O método de implementação específico é o seguinte:
1. Parte JavaScript
var req; /*Envia parâmetros para ajaxServlet através de transmissão assíncrona de XMLHTTP e retorna documentos XML qualificados*/ var url function getResult() { var f=document.getElementById("form_pub"); ; //Obtém uma referência ao texto em select if (window.XMLHttpRequest) { req = new XMLHttpRequest(); "+key+"&bm=gbk"; } if(req) { req.open("GET",url, true); req.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); //Se o cabeçalho não for definido aqui, fará com que o firfox envie dados incorretamente e os parâmetros recebidos pelo servlet serão enviados. ser ilegível. No IE Médio normal req.onreadystatechange = complete; //req.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); } } /*Analise o documento XML retornado*/ function complete(){ if (req.readyState == 4) { if (req.status == 200) { var items=document.getElementById ("pertencer"); //A seguir está o documento XML retornado pela análise var xmlDoc = req.responseXML; Node=xmlDoc.getElementsByTagName("type_name"); //var str=new Array(); //Limpar itens de trabalho.innerHTML=""; 0;i<Node.length;i++) { str=Node[i]; objectOption=document.createElement("option"); items.options.add(objectOption); //firfox não suporta innerText e deve ser substituído por textContent if (window.ActiveXObject) {objectOption.innerText=str.childNodes[0] .nodeValue } senão {objectOption.textContent=str.childNodes[0].nodeValue;} } } } }
2. Lado do servlet:
pacote ajax;importar java.io.IOException;importar java.io.PrintWriter;importar javax.servlet.ServletException;importar javax.servlet.http.HttpServlet;importar javax.servlet.http.HttpServletRequest;importar javax.servlet.http.HttpServletResponse ;importar Data_GetConn.GetConn;//Este pacote foi escrito por mim mesmo Para obter a referência ao mysql, import java.sql.*;//Este pacote deve tê-lo! ! public class ajaxServlet estende HttpServlet{ //private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";//É melhor usar UTF-8 para codificação aqui public void init() lança ServletException{} public void doGet (solicitação HttpServletRequest, resposta HttpServletResponse) lança ServletException, IOException { response.setContentType("text/xml; charset=UTF-8"); //As duas sentenças a seguir são para cancelar o cache local response.setHeader("Cache-Control", "no-cache"); " Pragma", "sem cache"); PrintWriter out = response.getWriter(); request.getParameter("bm"); if(("gbk").equals(bm)) { action=new String(action.getBytes("ISO-8859-1"),"gbk");//obterá Os dados são recodificados com gbk! (Agradecimentos ao professor Dong Wei) } else { action=new String(action.getBytes("ISO-8859-1"),"gbk"); ( ); Instrução stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("selecione itens da classe onde 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());//Observe a saída do stream para jsp aqui, o método de interceptação out.close(); ;con.close(); } catch(Exceção ex) { } }}