基于Servlet的Ajax实现

当用户在第一个选择框里选择ZHEJIANG时,第二个选择框要出现ZHEJIANG的城市;当用户在第一个选择框里选择JIANGSU时,第二个选择框里要出现JIANGSU的城市。很常见的一个应用。

web.xml:

 <web-appversion="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
 <servlet>
 <servlet-name>SelectCityServlet</servlet-name>
 <servlet-class>com.stephen.servlet.SelectCityServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
 <servlet-name>SelectCityServlet</servlet-name>
 <url-pattern>/servlet/SelectCityServlet</url-pattern>
 </servlet-mapping>
 
 </web-app>


JSP文件:

 <!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
 <title>MyHtml.html</title>
 
 <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="this is mypage">
 
 <!--<link rel="stylesheet" type="text/css"href="./styles.css">-->
 
 </head>
 <script type="text/javascript">
 function getResult(stateVal) {
       var url ="servlet/SelectCityServlet?state="+stateVal;
       if (window.XMLHttpRequest) {
               req = newXMLHttpRequest();
       }else if (window.ActiveXObject) {
               req = newActiveXObject("Microsoft.XMLHTTP");
       }
       if(req){
               req.open("GET",url,true);
               req.onreadystatechange= complete;
               req.send(null);
       }
 }
 function complete(){
       if (req.readyState == 4) {
               if (req.status== 200) {
                       var city =req.responseXML.getElementsByTagName("city");
                       var str=newArray();
                       for(var i=0;i<city.length;i++){
                               str[i]=city[i].firstChild.data;
                       }
                  
                       buildSelect(str,document.getElementById("city"));
               }
       }
 }
 function buildSelect(str,sel) {
       sel.options.length=0;
       for(var i=0;i<str.length;i++) {
               sel.options[sel.options.length]=newOption(str[i],str[i])
       }
 }
 </script>
 <body>
 <select name="state"onChange="getResult(this.value)">
       <optionvalue="">Select</option>>
       <optionvalue="zj">ZEHJIANG</option>>
       <optionvalue="zs">JIANGSU</option>>
 </select>
 <select id="city">
   <option value="">CITY</option>
 </select>
 </body>
 </html>

getResult(stateVal),在这个方法里,首先是取得XmlHttpRequest;然后设置该请求的url:req.open("GET",url,true);接着设置请求返回值的接收方法:req.onreadystatechange = complete;该返回值的接收方法为——complete();最后是发送请求:req.send(null);

返回值接收方法:complete(),这这个方法里,首先判断是否正确返回,如果正确返回,用DOM对返回的XML文件进行解析。

Servlet文件:

 importjava.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;
 

 public class SelectCityServlet extends HttpServlet {
 
 
   public SelectCityServlet() {
           super();
   }
 
   public void destroy() {
           super.destroy();
   }
 
   public void doGet(HttpServletRequest request,HttpServletResponse response)
                   throwsServletException, IOException {
           response.setContentType("text/xml");
           response.setHeader("Cache-Control","no-cache");
           String state =request.getParameter("state");
           StringBuffersb=new StringBuffer("<state>");
           if("zj".equals(state)){
                   sb.append("<city>hangzhou</city><city>huzhou</city>");
           } elseif("zs".equals(state)){
                   sb.append("<city>nanjing</city><city>yangzhou</city><city>suzhou</city>");
           }
           sb.append("</state>");
           PrintWriterout=response.getWriter();
           out.write(sb.toString());
           out.close();
   }
 }


 这个类,首先是从request里取得state参数,然后根据state参数生成相应的XML文件,最后将XML文件输出到PrintWriter对象里。

    比较简单的第一个例子到此为止。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值