package tree;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* 实现无限级分类目录树的Servlet
* 完成数据库的连接
* 完成分类的查询,增加,删除等操作
* 编写日期:2007-10-05
* @author 何裕浩 *
*/
public class MySort extends HttpServlet{
public int Id;
public String name;
public int parentId;
private Connection conn;
private Statement stmt;
public ResultSet rs;
int level=0;
PrintWriter out;
/*覆盖doPost方法*/
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String dsn=request.getParameter("dsn");
String user=request.getParameter("user");
String password="";
String sql=request.getParameter("sql");
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
out=response.getWriter();
OpenConn(dsn,user,password); //建立连接
show(sql,0);
closeConn();
}
//加载驱动程序,建立数据库的连接
public void OpenConn(String dsn,String user,String password){
try{
dsn = "jdbc:mysql:" + dsn;
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dsn,user,password);
}catch(Exception e){
System.err.println("aq.executeQuery:"+e.getMessage());
}
}
//查询
public ResultSet executeQuery(String sql){
try{
stmt=null;
rs=null;
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}catch(SQLException e){
System.err.println("aq.executeQuery:"+e.getMessage());
}
return rs;
}
//更新
public void executeUpdate(String sql){
try{
stmt=null;
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}catch(SQLException e){
System.err.println("aq.executeUpdate:"+e.getMessage());
}
}
//用递归算法,获得某一个分类的等级,0为顶级分类
public int getLevel(String sql,int Id){
try{
String sql2=sql+" where Id="+Id;
ResultSet result=executeQuery(sql2);
while(result.next()){
parentId=result.getInt("parentId");
}
}catch(SQLException e){
System.err.println("aq.executeUpdate:"+e.getMessage());
}
while(parentId!=0){
level++; //level为全局变量,其他函数使用完后都应清零
getLevel(sql,parentId); ////递归
}
return level;
}
//检测当前分类是否为最底层的分类
public boolean isLast(String sql,int Id){
boolean last=false;
try{
String sql2=sql+" where parentId="+Id;
ResultSet result=executeQuery(sql2);
rs.next();
if(rs.getRow()==0)
last=true;
else
last=false;
}catch(SQLException e){
System.err.println("aq.executeUpdate:"+e.getMessage());
}
return last;
}
//用递归算法,显示分类之间的父子关系
public void show(String sql,int parentId){
int printCount=0;
String li="";
try{
String sql2=sql+" where parentId="+parentId;
ResultSet result=executeQuery(sql2);
while(result.next()){
Id=result.getInt("Id");
name=result.getString("name");
printCount=getLevel(sql,Id);
out.print("<html>\n<body>");
for(int i=0;i<printCount;i++)
out.print(" ");
if(level==0)
li="<img src=\"web/images/close.gif\"/>";
else if(isLast(sql,Id))
li="<img src=\"web/images/lastnodeline.gif\"/>";
else
li="<img src=\"web/images/midopenedfolder.gif\"/>";
out.println(li+"<a href=\"show.jsp?Id="+Id+"\" target=\"main\">"+name+"</a><br>");
out.print("\n</body>\n</html>");
level=0; //level为全局变量,其他函数使用完后都应清零
show(sql,Id); //递归
}
}catch(SQLException e){
System.err.println("aq.executeUpdate:"+e.getMessage());
}
}
//关闭连接
public void closeConn(){
try{
conn.close();
}catch(SQLException e){
System.err.println("aq.closeConn:"+e.getMessage());
}
}
/*覆盖doGet方法*/
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doPost(request,response);
}
}
Java 开发JSP无限级分类目录树-sorttree项目源码


在Java开发中,构建无限级分类目录树是常见的需求,特别是在网站内容管理、电商商品分类、文件管理系统等场景。这个"sorttree"项目提供了一种实现这一功能的解决方案。下面我们将详细探讨Java与JSP结合实现无限级分类目录树的关键知识点。 我们需要了解Java中的数据结构——树。在计算机科学中,树是一种非线性数据结构,由节点(或称为顶点)以及连接这些节点的边构成。在无限级分类目录树中,每个节点可以有任意数量的子节点,这使得它可以表示任意深度的层次结构。 1. 数据模型设计: 通常,我们可以创建一个`Category`类来表示分类,包含ID、名称、父ID等属性。为了表示无限级,我们可以添加一个子节点列表,用于存储所有子分类。 ```java public class Category { private Long id; private String name; private Long parentId; private List<Category> children; // 构造函数、getters & setters... } ``` 2. 数据库设计: 在数据库中,我们通常使用自引用外键来实现无限级分类,即每个分类的`parentId`指向另一个`Category`的`id`。这种设计允许我们通过递归查询获取整个分类树。 3. 查询数据: 使用Java的JDBC或ORM框架(如Hibernate、MyBatis)从数据库中获取分类数据。对于无限级分类,可以使用递归SQL查询或者层次查询(如MySQL的`WITH RECURSIVE`)。 4. 构建树结构: 从数据库获取到的数据通常是一组扁平化的列表,需要将其转换为树形结构。可以使用递归方法或者广度优先搜索算法来构建树。 5. JSP渲染: 在JSP页面上展示树结构,可以使用HTML的`<ul>`和`<li>`标签配合JavaScript库(如jQuery、Bootstrap Treeview)来呈现。也可以使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)标签库来动态生成HTML结构。 6. 动态加载: 为了提高性能,可以采用懒加载策略,只加载当前需要显示的节点,当用户展开一个节点时,再异步加载其子节点。这可以通过AJAX请求实现。 7. 遍历与操作: 对于无限级分类目录树,遍历和操作(如添加、删除、移动节点)可能需要递归算法,确保操作正确地影响整个树。 8. 状态保持: 如果应用需要记住用户的展开状态,可以使用cookies、session或者前端的local storage来保存用户的选择。 "Java 开发JSP无限级分类目录树_sorttree项目源码"是一个涵盖了数据库设计、Java后端处理、JSP前端展示的综合实例,它展示了如何在Java Web环境中处理和展示无限级分类目录。通过学习和理解该项目,开发者可以提升自己在数据结构、数据库查询、前后端交互等方面的能力。




































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整


- 粉丝: 1106
- 资源: 4368
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Python的数据处理与可视化项目.zip
- (源码)基于Python的远程智能家居声控系统.zip
- (源码)基于MakeCode平台的跳跃平台游戏开发框架.zip
- 【毕业设计+开题答辩】-基于Java的QQ屏幕截图工具的设计与实现-【源代码+截图+数据库+论文+视频讲解】
- nvidia gpu压力测试工具
- 三菱PLC Q系列12轴伺服控制与多协议通讯在精密制造中的应用
- 西门子S7-200 PLC定长切纸机控制系统解析及应用实例
- STM32F107与DP83848以太网芯片驱动程序详解及实战代码
- 基于Matlab的H∞鲁棒控制技术及其仿真实践
- 西门子PLC 1200与G120变频器Modbus RTU通讯及PID控制在压力燃油系统中的应用
- 西门子PLC大型伺服控制系统:20轴程序通讯、气缸与机械手控制及Modbus通讯解析
- ASP.NET Core + Bootstrap:企业级快速后台开发框架,支持多数据库与模块化设计
- MATLAB实现车辆路径问题(VRP)多种优化算法的代码解析
- 机械手运动控制系统:基于F1与F4的双重控制方案实践与应用
- 工程测量领域基于Python的附合导线与四等水准平差自动化程序实现
- 西门子S7-200 Smart与台达伺服电机运动控制系统在包装机的应用及调试


