ajax,jsp,xml二级级联下拉列表

我想做一个简单的ajax,jsp,xml三者结合的二级级联下拉框,就是把数据放到xml文件中
但我不知道如何读取xml中的数据,如何获取list,再按照选中的查找...
我已经做了ajax,jsp从数据库中读取数据。但不知如何修改!还有xml文件放哪儿呢?放到web-inf下吗?还是和jsp放在一起?
请大家帮忙,指点指点
谢谢
index.jsp
[code="java"]<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>



<%
String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接sql数据库的方法
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
String userName = "用户名";
String password = "密码";
Connection conn = null;
Statement st = null;
ResultSet rs = null;
List listb = new ArrayList();
try{
    Class.forName(dbDriver); 
} catch(java.lang.ClassNotFoundException e) {
    e.printStackTrace();
}
try {
    conn = DriverManager.getConnection(url,userName,password); 
    st=conn.createStatement();
    String sqlQuery="sql语句";
    rs=st.executeQuery(sqlQuery);
    while (rs.next())
    {
        listb.add(rs.getString(1));
    }
    rs.close();
    st.close();
    conn.close();
}  catch (Exception e)  {   
    e.printStackTrace();
}

%>

var XMLHttpReq; //创建XMLHttpRequest对象 function createXMLHttpRequest() { if(window.XMLHttpRequest) { //Mozilla 浏览器 XMLHttpReq = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE浏览器 try { XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } } //发送请求函数 function sendRequest(url) { createXMLHttpRequest(); XMLHttpReq.open("GET", url, true); XMLHttpReq.onreadystatechange = processResponse;//指定响应函数 XMLHttpReq.send(null); // 发送请求 } // 处理返回信息函数 function processResponse() { if (XMLHttpReq.readyState == 4) { // 判断对象状态 if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息 updateMenu(); } else { //页面不正常 alert("您所请求的页面有异常。"); } } } //更新菜单函数 function updateMenu() { var res=XMLHttpReq.responseXML.getElementsByTagName("res") /**下面是用innerHTML输出控件内容的一般用法 * var subMenu = ""; * for(var i = 0; i < res.length; i++) { * subMenu = subMenu + " " + res[i].firstChild.data + ""; * } * currentSort.innerHTML = subMenu; **/ var list = document.all.list; list.options.length=0; list.add(new Option("---请选择---","")); for(var i=0;i<res.length;i++){ list.add(new Option(res[i].firstChild.data,res[i].firstChild.data)); } } // 创建级联菜单函数 function showSubMenu(obj) { sendRequest("menu.jsp?sort=" + obj ); /**下面这一句的作用是:每次选择后回到第一个选项**/ // document.all.mli.options[0].selected=true; }




---------请选择----------
<%
for(int i=0;i {
out.println(""+listb.get(i)+"");
}
%>


---请选择---



[/code]

menu.jsp
[code="java"]
HTML code<%@ page contentType="text/html; charset=GB2312" import="java.util.*,java.sql.*" %>
<%
String sort=new String(request.getParameter("sort").getBytes("iso-8859-1"),"GB2312");
System.out.print("sort="+sort);
String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接sql数据库的方法
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
String userName = "用户名";
String password = "密码";
Connection conn = null;
Statement st = null;
ResultSet rs = null;
List lists = new ArrayList();

try{
    Class.forName(dbDriver); 
} catch(java.lang.ClassNotFoundException e) {
    e.printStackTrace();
}

try {
    conn = DriverManager.getConnection(url,userName,password); 
    st=conn.createStatement();
    rs=st.executeQuery("sql语句");
    while (rs.next())
    {
        lists.add(rs.getString(1));
    }
    rs.close();
    st.close();
    conn.close();
}  catch (Exception e)  {   
    e.printStackTrace();
}
response.setContentType("text/xml; charset=gb2312");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<?xml   version=\"1.0\"   encoding=\"gb2312\"?>");
out.println("<response>");
for(int i=0;i<lists.size();i++)
{
    out.println("<res>" + lists.get(i).toString() + "</res>");
}
out.println("</response>");

%>
[/code]

[quote]
//先创建一个XML对象
var xmlDoc = null;//new ActiveXObject("Microsoft.XMLDOM");
try{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
}catch(e){
xmlDoc = document.implementation.createDocument("","",null);

}
//把你传回的数据使用方法解析
function parseMessage(s){
xmlDoc.loadXML(s);//倒入XML
var nodelist=xmlDoc.selectNodes("//M");//选取XML节点M开头
for(var ni=0;ni<nodelist.length;ni++)
{
msgtype=node.getAttribute("tp");//获取上面取的某个XML节点里的 tp字段的值
}
}
这里只是写了个大概,具体可以参考JS读取XML手册,也可以使用document.getElementsByTagName("");
[/quote]

[align=right][/align][img][/img][url][/url][url][/url][flash=200,200][/flash][flash=200,200][/flash][flash=200,200][/flash][url][/url][img][/img][img][/img][code="java"][/code][quote][/quote][i][/i][b][/b][list=1]
[*]
[/list][img][/img][img][/img][url][/url][flash=200,200][/flash][flash=200,200][/flash][i][/i][i][/i][b][/b][b][/b][i][/i][i][/i][u][/u][quote][/quote][quote][/quote][code="java"][/code][code="java"][/code][size=x-small][/size][color=red][/color][list=1]
[*]
[/list][list]
[*]
[/list][code="java"][/code][img][/img][url][/url][flash=200,200][/flash][url][/url][url][/url][img][/img][img][/img][list=1]
[*]
[/list][list]
[*]
[/list][code="java"][/code][code="java"][/code][u][/u]

你这样用responseXML不是可以的吗?为什么还要搞一个独立的xml文件呢