
简介这份资源是面向计算机专业学生与Java Web初学者的一份大学毕业论文配套文档主题为基于JSP与SQL Server 2000的网站新闻管理系统设计与实现可作为毕业设计选题参考或课程设计模板。压缩包内共1个doc文件约461KB内容涵盖系统总体设计、数据库设计、详细设计与运行效果展示等完整章节。文档从B/S结构出发梳理了新闻浏览、新闻录入、修改、删除及管理员验证五大功能模块并给出新闻文章表与用户表两张数据表的具体字段设计同时说明Tomcat5.0、Eclipse3.2与MyEclipse5.0的开发环境搭配。读者可据此了解一个新闻管理系统的完整开发流程包括公共模块中common.jsp、connectdb.jsp、check.jsp等文件的职责划分以及登录、发布、修改、删除等界面的实现思路适合需要撰写论文或搭建同类Web项目的同学参考借鉴。目前已有96人学习下载。1. 从一份“网站新闻管理系统”文档说起JSP SQL Server 2000 这套老架构还能不能跑如果你手里正躺着一份名为“网站新闻管理系统.doc”的毕业论文或者导师刚甩给你一个“做个新闻发布后台”的题目那你大概率会撞上这套经典组合JSP 做页面、SQL Server 2000 存数据、Tomcat 当容器、B/S 结构交差。别急着嫌弃它老这套东西在高校毕设里活了快二十年原因是它足够简单、资料足够多、答辩时老师也挑不出大毛病。真正让人头疼的不是技术本身而是环境——SQL Server 2000 在 Win10/Win11 上装不上、Tomcat 版本和 JDK 对不上、JSP 页面中文乱码、新闻列表分页写不对。这篇笔记就按“从零把系统跑起来”的顺序把选型理由、环境搭建、核心功能实现和踩坑记录一次讲透。适合正在做毕设的本科生也适合想快速复现一个 JSP 小项目的初学者。读完你至少能得到一个能登录、能发新闻、能分页展示的最小可用系统。2. 为什么毕设还在用 JSP SQL Server 2000选型逻辑与最小环境清单2.1 这套技术栈到底解决什么问题新闻管理系统的本质需求非常朴素管理员登录后台增删改查新闻前台按栏目和分页展示。用 B/S 结构意味着用户只需要浏览器不用装客户端这对毕设演示极其友好。JSP 的优势在于它把 Java 代码嵌进 HTML写起来直观一个.jsp文件就能同时处理请求和渲染页面不需要前后端分离那一套构建工具。SQL Server 2000 虽然老但它的企业管理器图形化操作简单建库建表写 SQL 语句对新手友好而且很多学校机房的教学环境就是它。从数据流看整个系统就三层浏览器发请求到 TomcatTomcat 把.jsp编译成 Servlet 执行JSP 里通过 JDBC 连 SQL Server 2000 读写新闻表再把结果拼成 HTML 返回。没有复杂框架没有依赖注入出问题了看堆栈就能定位。这正是毕设需要的——能跑通、能讲清楚、能自己改。2.2 环境清单与版本匹配关系这套老栈最怕版本乱配。下面是我验证过能跑通的一组组合建议照抄组件推荐版本说明JDK1.8JDK 8不要用 JDK 11老 JSP 标签库会报错Tomcat8.5 或 9.08.5 最稳9.0 也可以SQL Server2000 或 20052000 需打 SP4 补丁JDBC 驱动sqljdbc4.jar 或 jtdsjtds 兼容性更好开发工具Eclipse / IDEA能配 Tomcat 即可提示如果你的电脑是 Win10/Win11SQL Server 2000 安装程序可能直接闪退。常见做法是改用 SQL Server 2005 Express 或 2008 ExpressSQL 语法几乎一样答辩时说明即可。2.3 数据库和 Tomcat 的最小配置步骤先建库建表。打开查询分析器执行下面的 SQL-- 创建新闻管理系统数据库 CREATE DATABASE NewsDB; GO USE NewsDB; GO -- 新闻表存标题、内容、栏目、发布时间 CREATE TABLE News ( NewsID INT IDENTITY(1,1) PRIMARY KEY, -- 自增主键 Title NVARCHAR(200) NOT NULL, -- 新闻标题 Content NTEXT, -- 新闻正文 Category NVARCHAR(50), -- 所属栏目 PubTime DATETIME DEFAULT GETDATE(), -- 发布时间 Author NVARCHAR(50) -- 发布人 ); GO -- 管理员表 CREATE TABLE Admin ( AdminID INT IDENTITY(1,1) PRIMARY KEY, UserName NVARCHAR(50) NOT NULL, Password NVARCHAR(50) NOT NULL ); GO -- 插入默认管理员 INSERT INTO Admin (UserName, Password) VALUES (admin, 123456); GO这段 SQL 做了三件事建库、建新闻表和管理员表、插入一个默认账号。IDENTITY(1,1)让 NewsID 自动递增省去手动维护主键。NTEXT类型能存长正文GETDATE()自动填发布时间。注意 SQL Server 2000 不支持NVARCHAR(MAX)所以正文用NTEXT。Tomcat 配置的关键是server.xml里的端口和编码。找到conf/server.xml确认 Connector 标签带URIEncodingUTF-8Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 URIEncodingUTF-8 /不加URIEncodingGET 请求里的中文参数会乱码这是血泪经验。改完重启 Tomcat浏览器访问http://localhost:8080看到默认页就说明容器正常。3. 用 JSP 把新闻的增删改查跑通从数据库连接到分页列表3.1 JDBC 连接 SQL Server 2000 的两种写法连接数据库有两种驱动可选微软官方sqljdbc4.jar和开源jtds.jar。SQL Server 2000 用官方驱动容易报“TCP/IP 连接失败”因为 2000 默认没开 TCP/IP 协议。我一般用 jtds兼容性好连接串也简单。// 数据库连接工具类 DBUtil.java import java.sql.*; public class DBUtil { // jtds 驱动连接 SQL Server 2000 private static final String DRIVER net.sourceforge.jtds.jdbc.Driver; private static final String URL jdbc:jtds:sqlserver://localhost:1433;DatabaseNameNewsDB; private static final String USER sa; private static final String PWD 你的密码; // 获取连接 public static Connection getConn() throws Exception { Class.forName(DRIVER); // 加载驱动 return DriverManager.getConnection(URL, USER, PWD); } // 关闭资源顺序不能错 public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs ! null) rs.close(); } catch (Exception e) {} try { if (stmt ! null) stmt.close(); } catch (Exception e) {} try { if (conn ! null) conn.close(); } catch (Exception e) {} } }Class.forName加载驱动只做一次getConnection每次调用返回新连接。关闭顺序必须是 ResultSet → Statement → Connection反过来会报错。URL里的1433是 SQL Server 默认端口如果装了实例名要改成localhost:1433;instance实例名。3.2 新闻列表分页的 SQL 写法与 JSP 渲染分页是新闻系统最核心也最容易写错的地方。SQL Server 2000 没有LIMIT和OFFSET得用TOP加子查询。假设每页 10 条查第 2 页-- 查询第 2 页每页 10 条 SELECT TOP 10 * FROM News WHERE NewsID NOT IN ( SELECT TOP 10 NewsID FROM News ORDER BY NewsID DESC ) ORDER BY NewsID DESC;原理是先取前 10 条的 ID 排除掉再取剩下的前 10 条。页数越大子查询越深性能越差但毕设数据量小够用。对应的 JSP 页面这样写% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8% % page importjava.sql.*, util.DBUtil % % int pageSize 10; // 每页条数 int pageNo 1; // 当前页码 String p request.getParameter(page); if (p ! null) pageNo Integer.parseInt(p); Connection conn null; Statement stmt null; ResultSet rs null; try { conn DBUtil.getConn(); stmt conn.createStatement(); // 计算偏移第 N 页要排除前 (N-1)*pageSize 条 int skip (pageNo - 1) * pageSize; String sql SELECT TOP pageSize * FROM News WHERE NewsID NOT IN (SELECT TOP skip NewsID FROM News ORDER BY NewsID DESC) ORDER BY NewsID DESC; rs stmt.executeQuery(sql); % table border1 trth标题/thth栏目/thth发布时间/th/tr % while (rs.next()) { % tr td% rs.getString(Title) %/td td% rs.getString(Category) %/td td% rs.getTimestamp(PubTime) %/td /tr % } % /table % } catch (Exception e) { out.println(查询失败 e.getMessage()); } finally { DBUtil.close(conn, stmt, rs); } %pageNo从 URL 参数取skip是当前页之前要跳过的条数。JSP 里用% %输出变量while(rs.next())遍历结果集。注意pageEncodingUTF-8和contentType都要写否则中文标题会变问号。3.3 新闻发布与删除的完整流程发布新闻就是一个 INSERT删除就是 DELETE。下面是一个发布页面的核心逻辑% request.setCharacterEncoding(UTF-8); // 必须放在取参数之前 String title request.getParameter(title); String content request.getParameter(content); String category request.getParameter(category); if (title ! null !title.trim().equals()) { Connection conn null; PreparedStatement ps null; try { conn DBUtil.getConn(); // 用 PreparedStatement 防 SQL 注入 String sql INSERT INTO News (Title, Content, Category, Author) VALUES (?, ?, ?, ?); ps conn.prepareStatement(sql); ps.setString(1, title); ps.setString(2, content); ps.setString(3, category); ps.setString(4, admin); int n ps.executeUpdate(); // 返回受影响行数 if (n 0) out.println(发布成功); } catch (Exception e) { out.println(发布失败 e.getMessage()); } finally { DBUtil.close(conn, ps, null); } } %request.setCharacterEncoding(UTF-8)必须写在所有getParameter之前否则 POST 中文乱码。用PreparedStatement而不是拼字符串能防止用户输入单引号导致 SQL 报错。executeUpdate返回影响行数大于 0 就是成功。删除同理把 SQL 换成DELETE FROM News WHERE NewsID?参数传 ID 即可。4. 环境搭建与部署避坑SQL Server 2000、Tomcat 和中文乱码的排查记录4.1 SQL Server 2000 装不上或连不上现象安装程序双击没反应或者装完服务启动失败JDBC 报“Connection refused”。原因SQL Server 2000 是为 Win2000/XP 设计的在 Win10/Win11 上兼容性差另外默认没启用 TCP/IP 协议只开了命名管道。解决右键安装程序选“兼容性疑难解答”用 XP SP3 模式运行。装完后打开“服务器网络实用工具”启用 TCP/IP端口设 1433。如果还是不行直接换 SQL Server 2005 Express连接串改成jdbc:jtds:sqlserver://localhost:1433;DatabaseNameNewsDB其余代码不用动。4.2 Tomcat 启动闪退或 8080 端口被占现象双击startup.bat窗口一闪而过或者启动后访问 localhost:8080 报 404。原因闪退通常是JAVA_HOME没配或 JDK 版本不对端口占用是别的程序如另一个 Tomcat、IIS占了 8080。解决先配JAVA_HOME指向 JDK 8 根目录PATH里加%JAVA_HOME%\bin。端口占用就在server.xml里把8080改成8081重启即可。想看闪退原因用命令行进bin目录执行catalina run错误会打印在控制台。4.3 JSP 页面中文乱码的三种场景现象页面标题正常但表单提交后变问号或者数据库里存进去就是乱码。原因JSP 文件本身的编码、请求编码、响应编码、数据库字段编码四处只要有一处不一致就会乱。解决JSP 头部写% page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%表单提交前调request.setCharacterEncoding(UTF-8)Tomcat 的server.xml加URIEncodingUTF-8数据库字段用NVARCHAR而不是VARCHAR。四处都对齐乱码基本消失。4.4 新闻正文太长导致页面报错现象发布一篇长新闻后列表页能显示详情页报“数据截断”或显示不全。原因SQL Server 2000 的TEXT和NTEXT字段在 JDBC 读取时如果一次性getString可能受驱动限制。解决正文用NTEXT读取时用rs.getString(Content)一般没问题如果报错改用rs.getCharacterStream流式读取。另外 JSP 输出正文时不要用% %直接嵌 HTML先做转义否则正文里的标签会破坏页面结构。5. 让毕设多拿几分新闻系统里几个能讲清楚的进阶技巧5.1 用 Session 做登录拦截别让后台裸奔很多毕设的登录只是做个样子直接输admin_list.jsp就能进后台。正确做法是在每个后台页面顶部加 Session 校验% // 放在后台页面最顶部 Object admin session.getAttribute(adminUser); if (admin null) { response.sendRedirect(login.jsp); // 没登录踢回登录页 return; // 必须 return否则继续执行 } %登录成功时执行session.setAttribute(adminUser, userName)。sendRedirect之后一定要return否则后面的代码还会跑这是新手最容易漏的一步。答辩时老师问“怎么保证后台安全”这就是标准答案。5.2 新闻列表加栏目筛选和关键词搜索在分页 SQL 基础上加WHERE条件即可。栏目筛选SELECT TOP 10 * FROM News WHERE Category ? AND NewsID NOT IN (...) ORDER BY NewsID DESC;关键词搜索用LIKEWHERE Title LIKE % ? %注意LIKE里的%拼接要在 Java 里做ps.setString(1, % keyword %)不要直接拼进 SQL。搜索和分页可以组合把条件拼成动态 SQL但参数仍用PreparedStatement占位符。5.3 用 JSP 内置对象简化代码JSP 有九个内置对象毕设里最常用的是request、response、session、out、application。比如统计访问量可以用application% Integer count (Integer) application.getAttribute(visitCount); if (count null) count 0; count; application.setAttribute(visitCount, count); % p本站访问量% count %/papplication对象在整个 Web 应用生命周期内共享适合做计数器。但注意多用户并发时会有线程安全问题毕设演示够用生产环境要用数据库或缓存。5.4 答辩前一定要做的三件事第一把数据库连接串、账号密码、Tomcat 端口写进一个readme.txt答辩现场换电脑能快速改。第二准备一份数据备份 SQL万一演示时数据被删能立刻恢复。第三把系统里所有硬编码的中文提示检查一遍确保没有乱码。我当年就是没做备份演示时手滑删了新闻表当场用INSERT一条条补那场面至今记得。希望帮到你。本文还有配套的精品资源点击获取