小方的Java博客

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  27 随笔 :: 17 文章 :: 115 评论 :: 0 Trackbacks
不少朋友说ajax in action 第9章的程序跑不起来,本人比较熟悉j2ee,就将其改造成j2ee版演示给大家。使用Tomcat5.5,第9章后面的重构后的也差不多

源码下载

重构源码下载




运行:


1.数据库表就一个:


2.DoubleComboXML.java
package mypack;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DoubleComboXML extends HttpServlet {

    
public DoubleComboXML() {
        
super();
        System.out.println(
"servlet:DoubleComboXML");
    }


    
public void destroy() {
        
super.destroy(); // Just puts "destroy" string in log
        
// Put your code here
    }


    
private void process(HttpServletRequest request,
            HttpServletResponse response) 
throws ServletException, IOException {

        response.setContentType(
"text/xml");
        PrintWriter out 
= response.getWriter();

        String strQuery 
= request.getParameter("q");
        String strForm 
= request.getParameter("f");
        String strElem 
= request.getParameter("e");

        String strSql 
= "select * from Territories where regionid=" + strQuery;
        Connection connection 
= null;
        PreparedStatement pstm 
= null;
        ResultSet rs 
= null;
        
try {
            Class.forName(
"com.microsoft.jdbc.sqlserver.SQLServerDriver");
            connection 
= DriverManager
                    .getConnection(
                            
"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ajax",
                            
"sa""sa");
            pstm 
= connection
                    .prepareStatement(
"select * from Territories where regionid=" + strQuery);
           

            rs = pstm.executeQuery();
        }
 catch (ClassNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (Exception e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }


        StringBuffer strXML 
= new StringBuffer();
        strXML.append(
"<?xml version=\"1.0\" ?>");
        strXML.append(
"<selectChoice>");
        strXML.append(
"<selectElement>");
        strXML.append(
"<formName>" + strForm + "</formName>");
        strXML.append(
"<formElem>" + strElem + "</formElem>");
        strXML.append(
"</selectElement>");

        
try {
            
if (!rs.wasNull()) {

                strXML.append(
"<entry>");
                strXML.append(
"<optionText>Select A Territory</optionText>");
                strXML.append(
"<optionValue>-1</optionValue>");
                strXML.append(
"</entry>");

                
while (rs.next()) {
                    strXML.append(
"<entry>");
                    strXML.append(
"<optionText>" + rs.getString("TerritoryDc"+ "</optionText>");
                    strXML.append(
"<optionValue>" + rs.getInt("TerritoryID"+ "</optionValue>");
                    strXML.append(
"</entry>");
                }

            }

        }
 catch (SQLException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }


        strXML.append(
"</selectChoice>");
        out.write(strXML.toString());
        out.close();
    }


    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        process(request, response);
    }


    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        process(request, response);
    }


    
public void init() throws ServletException {
        
// Put your code here
    }


}


3.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="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>
    
<description>This is the description of my J2EE component</description>
    
<display-name>This is the display name of my J2EE component</display-name>
    
<servlet-name>DoubleComboXML</servlet-name>
    
<servlet-class>mypack.DoubleComboXML</servlet-class>
  
</servlet>

  
<servlet-mapping>
    
<servlet-name>DoubleComboXML</servlet-name>
    
<url-pattern>/DoubleComboXML</url-pattern>
  
</servlet-mapping>

</web-app>

4.MyJsp.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  
<head>
    
<title>Double Combo - Ajax In Action</title>
    
<script type="text/javascript" src="js/net.js"></script>
    
<script type="text/javascript">         
      
function FillTerritory(oElem,oTarget){                           
        
var strValue = oElem.options[                                  
                     oElem.selectedIndex].value;                       
        
var url = 'DoubleComboXML';                               
        
var strParams = 'q=+ strValue +                              
          
"&f=" + oTarget.form.name +                                   
          
"&e=" + oTarget.name;                                        
        
var loader1 = new                                              
        net.ContentLoader(url,FillDropDown,
null,                       
                    
"POST",strParams);                           
      }

      
function FillDropDown(){
        
var xmlDoc = this.req.responseXML.documentElement;              

        
var xSel = xmlDoc.                                             
           getElementsByTagName('selectElement')[
0];                   
        
var strFName = xSel.                                           
           childNodes[
0].firstChild.nodeValue;                         
        
var strEName = xSel.                                           
           childNodes[
1].firstChild.nodeValue;                         
            
        
var objDDL = document.forms[strFName].                         
           elements[strEName];                                         
        objDDL.options.length 
= 0;                                     
            
        
var xRows = xmlDoc.                                            
          getElementsByTagName('entry');                               
        
for(i=0;i<xRows.length;i++){                                   
          
var theText = xRows[i].                                      
              childNodes[
0].firstChild.nodeValue;                      
          
var theValue = xRows[i].                                     
              childNodes[
1].firstChild.nodeValue;                      
          
var option = new Option(theText,                             
                            theValue);                           
          objDDL.options.add(option,                                   
                          objDDL.options.length);                      
        }
                                                              
      }
           
    
</script>
  
</head>
  
<body>
    
<form name="Form1" ID="Form1">
      
<select name="ddlRegion" onchange="FillTerritory(this,document.Form1.ddlTerritory)" ID="Select1">
        
<option value="-1">Pick A Region</option>
        
<option value="1">Eastern</option>
        
<option value="2">Western</option>
        
<option value="3">Northern</option>
        
<option value="4">Southern</option>
      
</select>
      
<select name="ddlTerritory" ID="Select2"></select>
    
</form>
  
</body>
</html>

5.net.js
/*
url-loading object and a request queue built on top of it
*/


/* namespacing object */
var net=new Object();

net.READY_STATE_UNINITIALIZED
=0;
net.READY_STATE_LOADING
=1;
net.READY_STATE_LOADED
=2;
net.READY_STATE_INTERACTIVE
=3;
net.READY_STATE_COMPLETE
=4;


/*--- content loader object for cross-browser requests ---*/
net.ContentLoader
=function(url,onload,onerror,method,params,contentType){
  
this.req=null;
  
this.onload=onload;
  
this.onerror=(onerror) ? onerror : this.defaultError;
  
this.loadXMLDoc(url,method,params,contentType);
}


net.ContentLoader.prototype.loadXMLDoc
=function(url,method,params,contentType){
  
if (!method){
    method
="GET";
  }

  
if (!contentType && method=="POST"){
    contentType
='application/x-www-form-urlencoded';
  }

  
if (window.XMLHttpRequest){
    
this.req=new XMLHttpRequest();
  }
 else if (window.ActiveXObject){
    
this.req=new ActiveXObject("Microsoft.XMLHTTP");
  }

  
if (this.req){
    
try{
      
var loader=this;
      
this.req.onreadystatechange=function(){
        net.ContentLoader.onReadyState.call(loader);
      }

      
this.req.open(method,url,true);
      
if (contentType){
        
this.req.setRequestHeader('Content-Type', contentType);
      }

      
this.req.send(params);
    }
catch (err){
      
this.onerror.call(this);
    }

  }

}



net.ContentLoader.onReadyState
=function(){
  
var req=this.req;
  
var ready=req.readyState;
  
if (ready==net.READY_STATE_COMPLETE){
    
var httpStatus=req.status;
    
if (httpStatus==200 || httpStatus==0){
      
this.onload.call(this);
    }
else{
      
this.onerror.call(this);
    }

  }

}


net.ContentLoader.prototype.defaultError
=function(){
  alert(
"error fetching data!"
    
+"\n\nreadyState:"+this.req.readyState
    
+"\nstatus: "+this.req.status
    
+"\nheaders: "+this.req.getAllResponseHeaders());
}




posted on 2006-07-20 10:08 方佳玮 阅读(1427) 评论(6)  编辑  收藏 所属分类: AJAX

评论

# re: ajax in action 第9章 j2ee版 动态双组合功能 2006-10-01 05:09 坏男孩1
顶  回复  更多评论
  

# re: ajax in action 第9章 j2ee版 动态双组合功能 2006-10-16 20:03 册那
还是跑不起来  回复  更多评论
  

# re: ajax in action 第9章 j2ee版 动态双组合功能 2006-11-09 14:47 tu ci
我也跑不起来  回复  更多评论
  

# re: ajax in action 第9章 j2ee版 动态双组合功能 2006-11-09 18:12 me
跑不起来总有错误原因,我以个人人品担保,我跑起来的,才会发贴  回复  更多评论
  

# re: ajax in action 第9章 j2ee版 动态双组合功能 2006-12-26 09:34 流星
我的提示net未定义,但我已经定义了  回复  更多评论
  

# re: [原创]ajax in action 第9章 j2ee版 动态双组合功能 2007-04-10 00:16 blackbat
net.ContentLoader.onReadyState=function(){
var req=this.req;
var ready=req.readyState;
if (ready==net.READY_STATE_COMPLETE){
var httpStatus=req.status;
if (httpStatus==200 || httpStatus==0){
this.onload.call(this);
}else{
this.onerror.call(this);
}
}

this.onload.call(this);
this.onerror.call(this);
这2句是什么意思啊??  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: