目录表jsp代码:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.tecamo.cms.util.RequestUtil"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
<head>  <title>Insert title here</title>  
</head>  <style type="text/css">  
    body {   
       font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;   
        color: #666;   
        font-size: 13px;   
        white-space: nowrap;   
    }   
    img {   
        border: 0px;   
        vertical-align: middle;   
    }     
    #idshowTree input {   
        width: 13px;   
        height: 13px;   
        margin-right: 3px;        
    }   
</style>  <script type="text/javascript">  
    var xmlhttpReq;   
    //用于创建XMLHttpRequest对象   
    function createXmlHttp() {   
        //根据window.XMLHttpRequest对象是否存在使用不同的创建方式   
        if (window.XMLHttpRequest) {   
           xmlhttpReq = new XMLHttpRequest();                             //FireFox、Opera等浏览器支持的创建方式   
        } else {   
           xmlhttpReq = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式   
        }   
    }   
    //动态显示+、-号图片   
    function changeState(oDiv,iDivcode){   
         var object = document.getElementById("level"+iDivcode);   
         if(object.style.display=='none'){   
              object.style.display='block';   
         }else{   
              object.style.display='none';   
         }   
         if(oDiv.src.indexOf("images/minus.gif")>0) {   
            oDiv.src="images/plus.gif";   
         }else if (oDiv.src.indexOf("images/plus.gif")>0) {   
            oDiv.src="images/minus.gif";   
         }else if(oDiv.src.indexOf("images/minusbottom.gif")>0) {   
            oDiv.src="images/plusbottom.gif";   
         }else if(oDiv.src.indexOf("images/plusbottom.gif")>0) {   
            oDiv.src="images/minusbottom.gif";   
         }else if(oDiv.src.indexOf("images/nolines_plus.gif")>0) {   
            oDiv.src="images/nolines_minus.gif";   
         }else if(oDiv.src.indexOf("images/nolines_minus.gif")>0){   
            oDiv.src="images/nolines_plus.gif";   
         }   
    }   
     
  function initpage() {
    
    createXmlHttp(); 
    
    xmlhttpReq.open("GET","../../ButtCatalogServlet",true);   //路径在我的机上运行可以显示,移到服务器就不行了
    
    xmlhttpReq.send(null); 
    
    xmlhttpReq.onreadystatechange=function(){ 
     if(xmlhttpReq.readyState==4) { 
        if(xmlhttpReq.status==200) {   
            var info =xmlhttpReq.responseText;
    
            idshowTree.innerHTML=info;  
        }   
      }   
    }   
  }   
 /*    
  function $(id) {   
    return document.getElementById(id);   
  }   
  */
  function geturl() {
  var id="";
  var box=document.getElementsByName("checkbox");
  var ename=document.getElementsByName("myename");
  for(var i=0;i<box.length;i++)
  {
   if(box[i].checked)
   {
  
   id+=ename[i].value+"="+box[i].value + "&";
   }
  }
  id=id.substring(0,id.length-1);
  var url="buttarchive.jsp?"+id;
  alert(url);
  document.form1.action=url;
  form1.submit();  
  }
</script>  
</head>  
  
<body onload="initpage();"> <% 
   String archiveId = RequestUtil.getString(request,"archiveId","0");
    session.setAttribute("sessionid",archiveId);
  %>
  <form method="post" name="form1" action="">
    <div id="idshowTree" > 
    </div>  
 <input type="submit" value="确定" onclick="geturl();">
 &nbsp;<input type="reset" value="取消">  </form>
</body>  
</html> 
servlet代码:package com.tecamo.cms.buttcolumn;import java.io.IOException;   
import java.io.PrintWriter;   
import java.sql.Connection;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
import java.sql.Statement;      
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse; 
import com.tecamo.cms.util.JdbcUtil;public class ButtCatalogServlet extends HttpServlet {
private PrintWriter out;   
    private String sql="";   
    int divcode = 0;    
    String buttcolumnId="";   
    private static Connection conn = JdbcUtil.getConnection();   
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
  
        this.doPost(request, response);   
    }   
       
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        response.setContentType("text/html;charset=utf-8");   
        out = response.getWriter();   
        try {   
          //  out.println("<img src='images/nolines_plus.gif' onclick='changeState(this,0)'>全部目录"  
          //                  + "<div id=level0 style='display:none' >"); 
            generateTree(-1, 0);//从根目录向下查找,根目录的buttcolumnId为 -1     
            out.flush();   
            out.close();   
        } catch (SQLException e) {   
            throw new RuntimeException(e);   
        }   
    }   
       
    // 产生树结构   
    public void generateTree(int fatherid, int level) throws SQLException {   
        level++;   
        divcode++; 
        // Statement和ResultSet不要声明为全局变量,如果声明全局变量有可能会出现结果集耗尽   
        Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);   
        sql ="select * from CMS_BUTTCOLUMN where FATHERID="+ fatherid
        +"order by BUTTCOLUMNID asc";  
        
        ResultSet rs = st.executeQuery(sql);   
        while (rs.next()) {   
            for (int i = 0; i < level - 1; i++) { // 控制缩进  
                out.print("<img src='images/line.gif' />");   
            }   
               
            int buttcolumnId =rs.getInt("BUTTCOLUMNId");    
            String Name = rs.getString("NAME");
            String ename=rs.getString("ENAME");
            if (existedChild(buttcolumnId)   
                    && rs.isLast()&&fatherid==-1) {// 有下级目录,并且是最后一行   
                 out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font  color='#000000'>"+ Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");   
             } 
            else if (existedChild(buttcolumnId)   
                   && rs.isLast()&&fatherid!=-1) {// 有下级目录,并且是最后一行   
                out.print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");   
            } 
           else if (existedChild(buttcolumnId)   
                   && !rs.isLast()&&fatherid==-1) {   
                out .print("<img src='images/minus.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+ Name+ "("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");   
        }
           else if (!existedChild(buttcolumnId) && rs.isLast()&&fatherid==-1) {// 没有下级目录,且是最后一行   
                out.print("<img src='images/joinbottom.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'><font color='#000000'>"+Name+"("+buttcolumnId+ ")</font><input type='hidden' name='myename' value='"+ename+"'><br />");   
           } 
            else {   
               out.print("<img src='images/join.gif' onclick='changeState(this,"+ divcode+ ")' /><input type='checkbox' name='checkbox' value='"+buttcolumnId+"'>"+ Name+ "("+buttcolumnId+ ")<input type='hidden' name='myename' value='"+ename+"'><br />");   
            }   
            generateTree(buttcolumnId, level); // 递归调用,虽然又调用了函数generateTree,但是在概念上,我们应该把   
            // 它当作另外一个函数,每次当我们调用一个函数的时候--无论是递归调用   
            // 还是非递归调用,该函数都会得到自己独有的一组局部变量和形式变量
              
            }   
               
            JdbcUtil.free(st, rs, null);
        }   
           
     
  
    // 检查是否有下级部门   
    public boolean existedChild(int buttcolumnid) throws SQLException {   
        Statement st = null;   
        ResultSet rs = null;   
        st = conn.createStatement();   
        sql = "select * from CMS_BUTTCOLUMN where FATHERID=" + buttcolumnid+"order by BUTTCOLUMNID asc";   
        
        rs = st.executeQuery(sql);   
        boolean flag = rs.next();   
        JdbcUtil.free(st, rs, null);   
        return flag;   
    }   
     
       
    public void destroy() {   
        //当servlet被销毁时,才关闭数据库的连接   
        JdbcUtil.free(null, null, conn);   
    }
}web.xml    <servlet>  
    <servlet-name>ButtCatalogServlet</servlet-name>  
    <servlet-class>com.tecamo.cms.buttcolumn.ButtCatalogServlet</servlet-class>  
  </servlet>  
  
  <servlet-mapping>  
    <servlet-name>ButtCatalogServlet</servlet-name>  
    <url-pattern>/ButtCatalogServlet</url-pattern>  
  </servlet-mapping> 郁闷了两天了,还没解决,哪位高手帮帮忙。没错误提示,就只有两个botton,目录没显示。

解决方案 »

  1.   

    数据库链接代码:public final class JdbcUtil {   
        private static String url = "jdbc:oracle:thin:@192.168.40.100:1521:orcl";   
        private static String user = "xwcbj";   
        private static String password = "tecamo";   
        private JdbcUtil() {}   
        static {   
            try {   
                Class.forName("oracle.jdbc.driver.OracleDriver");   
            } catch (ClassNotFoundException e) {   
                throw new ExceptionInInitializerError(e);   
            }   
        }   
        //获取数据库连接对象   
        public static Connection getConnection() {   
            try {   
                return DriverManager.getConnection(url, user, password); 
                
            } catch (SQLException e) {   
                throw new RuntimeException(e);   
            }
        }   
      
        /**  
         * 关闭数据库连接  
         * @param st  
         * @param rs  
         * @param conn  
         */  
        public static void free(Statement st, ResultSet rs, Connection conn) {   
            try {   
                if (st != null) st.close();   
                if (rs != null) rs.close();   
                if (conn != null) conn.close();   
            } catch (SQLException e) {   
                throw new RuntimeException(e);   
            }   
        }
      

  2.   

    有没有异常 断点进servlet没 
      

  3.   

    弹出的目录页面没显示有错误,我的程序是通过vpn远程控制台电脑,把程序复制到远程控制电脑,再把程序上传到服务器
      

  4.   

    我在我电脑修改 xmlhttpReq.open("GET","../../ButtCatalogServlet",true)里的url,比如“ButtCatalogServlet”会出现同样情况,目录没有,只有两个botton,控制器里没什么提示。