动漫网站毕业设计旧栈部署与故障排查
简介:面向动漫类网站开发初学者与毕业设计撰写者的完整论文文档,围绕一个功能完善、界面友好的动漫网站从需求分析到系统测试的全过程展开,适合需要参考选题结构、技术选型与实现思路的在校学生。压缩包内共1个doc文件,约569KB,正文按章节组织,涵盖MyEclipse、Tomcat、B/S结构、ORACLE数据库、Dreamweaver、JavaScript与JSP等技术介绍,并给出需求分析、可行性分析、系统设计、数据库表描述与表间联系、总体设计、项目包部署、数据连接配置、前后台页面及登录实现、系统测试等模块。已有2170人学习,可作为毕业设计写作框架与网站制作流程的对照材料,帮助读者理解数据库设计与功能模块划分的衔接方式,并借鉴前后台实现与测试章节的组织方法。
1. 从论文里的旧栈说起:动漫网站的设计与实现毕业论文先定版本组合
动漫网站的设计与实现毕业论文这类资源,最容易让人误判的地方是:论文里写着 MyEclipse 8.5、Tomcat 6.0、Oracle 10g,看起来装完就能跑,真正动手才发现 JSP 容器、JDK 编译级别和数据库驱动只要有一个不对,首页就白屏。网站制作在这类旧栈项目里不是拼页面,而是先把版本组合钉死。这套环境适合正在做毕业设计、课程设计,或者需要复现一套 B/S 动漫网站的人;装不好最常见的后果不是单个报错,而是 404、乱码和数据库连接空指针混在一起,排查时像黑匣子。我的建议是先按论文里的工具链对齐,不追新,再逐层验证。
2. 安装 JDK 与 Tomcat 6.0:把 JSP 容器先跑起来
旧 JSP 项目的安装顺序不能反过来。先把 JDK 和 Tomcat 6.0 跑通,再谈 MyEclipse;如果容器本身起不来,后面所有报错都会指向项目代码,容易误判。这一章的目标是让http://localhost:8080出现 Tomcat 默认页,并且能在命令行里看到启停日志。JDK 我一般会给这套 MyEclipse 8.5 + Tomcat 6.0 配 1.6 这一代,编译级别也压到 1.6,不直接上高版本,旧容器对高版本类文件格式和注解扫描都不友好。
2.1 选 JDK 版本与安装路径
JDK 先装在短路径下,例如D:\dev\jdk1.6,不要放在“桌面”“新建文件夹”或带中文、空格的目录里。MyEclipse 8.5 和 Tomcat 6.0 对路径空格的处理没有新工具稳,路径里一旦有空格,启动脚本拼参数时容易断成两截,表现就是一闪而过。安装完成后先在命令行做一次最小验证,确认java和javac都来自同一个 JDK,而不是系统里残留的 JRE。
rem 临时验证 JDK 是否可用,路径按自己的安装目录改 set JAVA_HOME=D:\dev\jdk1.6 set PATH=%JAVA_HOME%\bin;%PATH% java -version javac -version这段命令只对当前命令行窗口生效,适合排查阶段使用。JAVA_HOME必须指向 JDK 根目录,不是bin,也不是jre子目录;PATH里追加%JAVA_HOME%\bin是为了让java、javac能被直接调用。java -version看运行时版本,javac -version看编译器版本,两者不一致时,后面 MyEclipse 编译和 Tomcat 运行就可能对不上。
提示:
JAVA_HOME写错是旧栈部署里最常见的低级翻车点,路径末尾不要带分号,也不要带\bin。
2.2 配置 JAVA_HOME、CATALINA_HOME 与 PATH 三个变量
系统环境变量建议在图形界面里追加,不要用一条setx PATH直接覆盖。旧机器上 PATH 往往还挂着其他工具,覆盖后会出现“Java 能跑、别的命令没了”的血泪经验。需要落三个值:JAVA_HOME指向 JDK 根目录,CATALINA_HOME指向 Tomcat 6.0 解压目录,PATH只追加两个bin路径。配置完成后重新开一个命令行窗口,旧窗口不会自动刷新环境变量。
rem 只做示例,实际在系统环境变量窗口里逐项追加 set JAVA_HOME=D:\dev\jdk1.6 set CATALINA_HOME=D:\dev\tomcat6 set PATH=%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%PATH%JAVA_HOME给 Tomcat 启动脚本寻找运行时,CATALINA_HOME给startup.bat、shutdown.bat定位配置和日志目录。PATH里追加%CATALINA_HOME%\bin后,可以在任意目录执行startup、shutdown、version。如果机器上已有别的 Tomcat,不要同时把两个bin都塞进 PATH,先用绝对路径启动,避免命令打到另一个容器上。
| 变量名 | 示例值 | 作用 | 常见错误 |
|---|---|---|---|
JAVA_HOME | D:\dev\jdk1.6 | 指定 JDK 根目录 | 写成bin或jre |
CATALINA_HOME | D:\dev\tomcat6 | 指定 Tomcat 6.0 根目录 | 指向webapps |
PATH | %JAVA_HOME%\bin;%CATALINA_HOME%\bin | 让命令可直接调用 | 直接覆盖原 PATH |
2.3 解压 Tomcat 6.0 并改 Connector 端口
Tomcat 6.0 解压到D:\dev\tomcat6后,先改conf\server.xml里的 Connector。默认端口 8080 经常和本机其他服务冲突,冲突时启动日志会报Address already in use。旧 JSP 项目的中文参数还依赖 URI 解码,Tomcat 6.0 默认按 ISO-8859-1 处理 GET 参数,页面显示和后台接收对不上时,先把URIEncoding固定成 UTF-8。
<!-- conf/server.xml 中找到 Connector,端口冲突时把 8080 改成 8081 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />port是浏览器访问端口,改完要同步改项目里的访问地址;connectionTimeout是连接超时毫秒数,旧项目一般不用动;redirectPort留给需要安全跳转的场景,没配证书时保持默认即可;URIEncoding="UTF-8"决定 GET 请求参数按什么字符集解码。只改 JSP 页面编码而不改这里,搜索参数、分页参数里的中文仍可能变成乱码。
注意:改
server.xml前先备份一份,XML 标签闭合不完整时 Tomcat 6.0 启动会直接失败,日志里只给行号,不给完整上下文。
2.4 用 startup.bat 验证容器与看日志
Tomcat 6.0 的启动脚本在bin目录下。双击startup.bat出现黑窗口一闪而过时,不要反复双击,改在命令行里执行catalina.bat run,让异常留在当前窗口。正常启动后,浏览器访问http://localhost:8080,能看到 Tomcat 默认页,说明 JDK、端口、CATALINA_HOME这条链路已经通了。接着再看logs目录下的日志,确认没有ClassNotFoundException或端口占用。
cd /d D:\dev\tomcat6\bin catalina.bat run rem 另开一个窗口检查 8080 是否被占用 netstat -ano | findstr :8080catalina.bat run会前台运行,关掉窗口就停服务,适合排查启动失败;startup.bat是后台启动,适合日常使用。netstat -ano | findstr :8080用来找占用端口的进程号,再到任务管理器里核对。日志优先看logs\catalina.*.log和logs\localhost.*.log,前者记录容器启动,后者记录项目部署异常。容器默认页都打不开时,先别碰项目代码,回到环境变量和端口这两处。
3. 配置 MyEclipse 8.5 与导入项目:工作空间、编码和 WebRoot 三处别写错
MyEclipse 8.5 是这套论文环境里的开发入口,但它本身不负责运行 JSP,真正跑页面的是 Tomcat 6.0。安装前先把 JDK 对齐,安装时工作空间选短路径,例如D:\workspace\anime,不要选在中文目录或同步盘里。项目导入后重点看三处:编译级别是不是 1.6、Web 根目录是不是WebRoot、jar 包是不是进了WEB-INF/lib。这三处错一个,表现可能是编译通过但部署 404,也可能是本地能跑、换机器就缺驱动。
3.1 安装 MyEclipse 8.5 前先对齐 JDK 和工作空间
MyEclipse 8.5 安装时会让选工作空间,工作空间路径只用来放项目元数据,不要和 Tomcat 安装目录混在一起。装完后在首选项里确认 Installed JREs 指向D:\dev\jdk1.6,并把项目编译级别压到 1.6。旧项目里常见javax.servlet相关包由 Tomcat 提供,不要为了消红叉把 Tomcat 的servlet-api.jar复制进项目,否则部署时容易和容器自带版本冲突。
# 项目 .settings/org.eclipse.jdt.core.prefs 中的编译级别 org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6这三行分别控制源码识别级别、编译合规级别和生成的 class 目标版本。旧容器加载高版本 class 时会报Unsupported major.minor version,表面看是 Tomcat 起不来,实际是编译级别没压住。改完执行一次 Clean,让项目重新编译;如果只改工作空间设置不改项目设置,已有项目仍会沿用旧配置。
提示:MyEclipse 8.5 的界面反应慢是常态,导入大项目时不要连续点刷新,等构建完成再看 Problems。
3.2 导入项目与确认 WebRoot 是 Web 根目录
论文项目里常见的目录结构是项目根下放src、WebRoot、WebRoot\WEB-INF。导入时用 Existing Projects into Workspace,不要把整个压缩包解压后的外层目录当成项目根。判断项目根是否选对,看它下面有没有.project、src、WebRoot这三样。Web 根目录是WebRoot,不是项目根;部署配置里的docBase要指到WebRoot,指错时首页 404,但 Tomcat 本身是正常的。
<!-- WebRoot/WEB-INF/web.xml 中至少保留欢迎页配置 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>welcome-file决定访问目录时默认打开哪个页面。论文项目首页一般叫index.jsp,如果实际文件名不同,按项目里的文件名改,不要凭空造一个。这个配置只影响目录访问,不影响直接输入 JSP 文件名访问;首页 404 时先确认WebRoot下确实有对应文件,再看web.xml是否被正确读取。
| 目录 | 作用 | 部署时是否必须 |
|---|---|---|
src | Java 源码 | 编译后进WEB-INF/classes |
WebRoot | Web 根目录 | 是,docBase指向这里 |
WebRoot/WEB-INF | 配置与类文件 | 是,浏览器不能直接访问 |
WebRoot/WEB-INF/lib | 第三方 jar | 是,JDBC 驱动放这里 |
3.3 配置 JSP/JavaScript 编码与 Tomcat 运行时
JSP 页面头部要统一声明 UTF-8,JavaScript 文件也按 UTF-8 保存。旧项目里常见有的页面是 GBK、有的是 UTF-8,单独打开正常,一提交表单就乱码。MyEclipse 里可以在 Workspace 首选项把 Text file encoding 设为 UTF-8,再对已有 JSP 逐个确认 page 指令。Tomcat 运行时则在 Servers 视图里绑定D:\dev\tomcat6,不要用 MyEclipse 自带的内嵌容器替代,否则部署路径和日志位置都对不上论文里的说明。
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>contentType告诉浏览器按 UTF-8 解析响应,pageEncoding告诉容器按 UTF-8 读取 JSP 源文件。两个都写才稳,只写一个时,某些旧容器仍会按默认编码读源码。JavaScript 里如果出现中文提示,文件本身也要用 UTF-8 保存,否则页面头部声明再对,脚本里的字符串仍是乱码。
注意:不要用记事本另存为 UTF-8 后直接覆盖项目里的 JSP,旧版本记事本可能带 BOM,JSP 顶部出现不可见字符会导致页面编译报错。
3.4 构建路径与 jar 包放置:WEB-INF/lib 才是部署后生效
MyEclipse 里把 jar 加到 Build Path 只能让编译通过,部署到 Tomcat 后是否带上,要看 jar 是否在WebRoot/WEB-INF/lib下。Oracle JDBC 驱动尤其如此,项目里常见的驱动文件命名是ojdbc14.jar,对应 Oracle 10g 这一代。把驱动只挂在外部路径上,本机编译不报错,换一台机器部署就报ClassNotFoundException: oracle.jdbc.driver.OracleDriver,这是旧项目迁移时最容易踩的坑。
<!-- conf/Catalina/localhost/anime.xml,指向 WebRoot 而不是项目根 --> <Context path="/anime" docBase="D:\workspace\anime\WebRoot" reloadable="true" />path是浏览器访问前缀,部署后地址是http://localhost:8080/anime/;docBase必须指到WebRoot,指到项目根时容器找不到WEB-INF/web.xml;reloadable开发期设为true,改类文件后容器会尝试重载,上线时设为false减少内存波动。这个文件放在 Tomcat 的conf\Catalina\localhost下,比直接改server.xml更容易回退。
4. 配置 Oracle 10g 与数据源:建用户、建表和 JDBC 连接参数
论文里的数据层用的是 Oracle 10g,表多、外键多,还有序列和自增字段。安装数据库时不要用系统账号直接连应用,常见做法是建一个独立用户,把表、序列、索引都放在这个用户下,JDBC 连接串只暴露这个用户。Oracle 10g 的安装路径、实例名、字符集要在安装时就记下来,后面改连接串、导数据、排查乱码都靠这几个值。数据库跑不起来时,先看监听和服务,再看项目和驱动,不要一上来就改 Java 代码。
4.1 安装 Oracle 10g 的服务端与客户端取舍
如果只是本机复现论文环境,装服务端即可,客户端工具按需装。安装路径不要带中文和空格,实例名记清楚,常见默认实例名是orcl,但安装时改过就要以实际为准。安装完成后先检查服务是否启动、监听是否正常,再谈建表。旧机器内存不大时,Oracle 10g 启动会明显拖慢系统,Tomcat 和数据库不要同时抢内存,先把数据库服务起来,再启动容器。
rem 服务名和实例名按实际安装替换,ORCL 只是常见示例 sc query OracleServiceORCL lsnrctl statussc query看数据库服务是否处于 RUNNING,lsnrctl status看监听端口和实例注册情况。监听没起来时,JDBC 会报连接拒绝或ORA-12541;实例名写错时,常见报错是ORA-12505。这两个错误看起来都像“数据库连不上”,处理方式不同,先分清是监听问题还是 SID 问题。
提示:安装时记下 SID、端口、字符集三件事,后面连接串和建库脚本都要用,别等报错再回头翻安装记录。
4.2 建独立用户、表空间与核心表
应用不要用 SYS 或 SYSTEM 连接。常见做法是建一个表空间和独立用户,把论文里的表放进去。表空间数据文件路径按本机 Oracle 安装目录改,不要照抄示例路径。用户权限先给CONNECT、RESOURCE,够建表和连接;后面项目需要序列、触发器时再单独补权限。建表时字段名尽量贴近论文里的表描述,实体类映射和 SQL 语句都按这个来,中途改名会牵出一串问题。
-- 表空间和用户,数据文件路径按本机安装目录调整 CREATE TABLESPACE anime_data DATAFILE 'D:\oracle\oradata\ORCL\anime_data.dbf' SIZE 200M AUTOEXTEND ON NEXT 50M MAXSIZE 2G; CREATE USER anime IDENTIFIED BY anime123 DEFAULT TABLESPACE anime_data; GRANT CONNECT, RESOURCE TO anime;DATAFILE是数据文件落盘位置,目录必须已存在且有写权限;SIZE是初始大小,AUTOEXTEND让空间不够时自动扩;DEFAULT TABLESPACE决定用户建表默认放哪。用户名和密码按项目配置改,但不要用弱口令直接放到公网环境。建完用户后用新用户登录,再执行下面的建表语句,避免把表建到系统用户下。
-- 用户表与动漫表的核心字段,字段名按论文表描述保留 CREATE TABLE users ( USERID NUMBER(4) NOT NULL, USERNAME VARCHAR2(20) NOT NULL, USERPWD VARCHAR2(20) NOT NULL, USERNAME2 VARCHAR2(20) NOT NULL, HEAD VARCHAR2(20) NOT NULL, BIRTHDAY DATE NOT NULL, REGTIME DATE NOT NULL, SEX NUMBER(4), INTERGAL NUMBER(4), CONSTRAINT pk_users PRIMARY KEY (USERID) ); CREATE TABLE anime ( animeid NUMBER(4) NOT NULL, animename VARCHAR2(40) NOT NULL, animepic VARCHAR2(40) NOT NULL, CONSTRAINT pk_anime PRIMARY KEY (animeid) );NUMBER(4)对应论文里的 INT 类型,VARCHAR2(20)、VARCHAR2(40)按原表长度保留。INTERGAL这个字段名在论文表里就是这么写的,不要自作主张改成别的拼写,实体类 setter/getter 和 SQL 都按原名对。BIRTHDAY、REGTIME用 DATE 类型,插入时用TO_DATE或 JDBC 的日期参数,不要直接拼字符串。
-- 论文里提到自动增长序列,这里给用户表和动漫表各建一个 CREATE SEQUENCE seq_users START WITH 1 INCREMENT BY 1 NOCACHE; CREATE SEQUENCE seq_anime START WITH 1 INCREMENT BY 1 NOCACHE; CREATE OR REPLACE TRIGGER trg_users_id BEFORE INSERT ON users FOR EACH ROW BEGIN IF :NEW.USERID IS NULL THEN SELECT seq_users.NEXTVAL INTO :NEW.USERID FROM dual; END IF; END; /START WITH是起始值,INCREMENT BY是步长,NOCACHE避免旧版本缓存序列在异常重启后跳号。触发器在插入前检查主键是否为空,为空时取序列值。序列和触发器不是越多越好,论文表里需要自动编号的字段才配;如果 Java 代码里已经显式传主键,触发器里的判空条件要保留,避免覆盖业务传入的值。
4.3 配置 JDBC 连接参数与驱动
项目里的数据连接配置一般会抽到属性文件或配置类里,连接串格式按 Oracle 10g 的 thin 驱动写。127.0.0.1比localhost更稳,旧环境里 IPv6 解析偶尔会让连接变慢。SID 写安装时的实例名,不是服务名;端口默认 1521,改过就同步改。驱动 jar 放WebRoot/WEB-INF/lib,不要只挂构建路径。
# db.properties,按本机实例名和用户修改 jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl jdbc.username=anime jdbc.password=anime123jdbc.driver是驱动类名,Oracle 10g 这一代常见写法就是oracle.jdbc.driver.OracleDriver;jdbc.url里thin表示纯 Java 驱动,@后是主机、端口、SID;jdbc.username和jdbc.password用刚建的独立用户。属性文件不要放在WEB-INF/classes外面,部署后类加载器读不到。改完配置后先写一个最小 Java 测试,不要直接启动整个项目。
// 最小连接测试,确认驱动、SID、用户密码三件事 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "anime", "anime123"); System.out.println(conn.getMetaData().getDatabaseProductVersion()); conn.close();Class.forName触发驱动注册,类名写错会报ClassNotFoundException;DriverManager.getConnection的三个参数分别是连接串、用户、密码,SID 错会报ORA-12505,监听没起会报连接拒绝。测试通过后再启动 Tomcat,能把数据库问题和项目问题分开。连接对象用完要关闭,旧项目里常见连接泄漏,跑一段时间后后台页面全部卡住。
注意:驱动 jar 的版本要和数据库主版本匹配,随便拿一个新版驱动连 Oracle 10g,可能出现能连上但部分类型读写异常的情况。
4.4 初始化测试数据与检查字符集
表建完后先插一条测试数据,确认中文能进能出。不要等前台页面做完再测,那时候乱码来源可能有 JSP、Tomcat、JDBC、数据库四层,排查成本高。插入中文后查询NLS_CHARACTERSET,确认数据库字符集不是只支持单字节的旧字符集。如果数据库字符集不对,后面页面声明 UTF-8 也只能救一部分,落库仍可能变问号。
-- 插入一条动漫测试数据并查询 INSERT INTO anime (animeid, animename, animepic) VALUES (seq_anime.NEXTVAL, '测试动漫', 'images/test.jpg'); COMMIT; SELECT * FROM anime; -- 检查数据库字符集 SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';COMMIT必须执行,旧版客户端不自动提交时,换一个会话查不到数据会误判为插入失败。NLS_CHARACTERSET常见可用值是AL32UTF8,如果安装时选错,建库后再改代价很大,能重装就重装。测试数据不要用生僻字,先用常用中文确认链路,再考虑特殊字符。
5. 常见问题排查:Tomcat 6.0 与 Oracle 10g 部署时最容易翻车的五处
旧栈项目的报错经常串在一起:容器起不来,项目 404;数据库连不上,登录页空白;编码不对,后台插入变问号。排查时不要同时改五处配置,按“容器 -> 部署路径 -> 数据库连接 -> 编码 -> 会话”的顺序走,每改一处就重启验证。下面五条是我在类似环境里反复遇到的翻车点,每条按现象、原因、解决写,照着对能少走很多弯路。
5.1 现象:启动 Tomcat 6.0 一闪而过,黑窗口看不到报错
现象是双击startup.bat后窗口闪一下就消失,浏览器打不开 8080,日志目录里也没有完整异常。原因通常有三类:JAVA_HOME指向了bin或jre,Tomcat 找不到可用 JDK;CATALINA_HOME写错,启动脚本找不到conf和logs;8080 已被其他进程占用。旧机器上还常见环境变量改了但没开新窗口,脚本读到的仍是旧值。
解决时先在命令行里前台启动,让异常留在屏幕上。再看端口占用,改 Connector 端口后重启。如果日志里出现Unsupported major.minor version,回到 MyEclipse 把项目编译级别压到 1.6 并 Clean。不要用“多启动几次”碰运气,闪退不会自己恢复。
cd /d D:\dev\tomcat6\bin set JAVA_HOME=D:\dev\jdk1.6 set CATALINA_HOME=D:\dev\tomcat6 catalina.bat run netstat -ano | findstr :8080catalina.bat run前台运行,异常直接打印;set只对当前窗口生效,适合排除系统变量干扰;netstat找到占用端口的 PID 后,在任务管理器里结束对应进程或改 Tomcat 端口。改端口后浏览器地址也要同步改,别只改配置不改访问地址。
5.2 现象:项目 404 或 WebRoot 下的 JSP 访问不到
现象是 Tomcat 默认页能开,但访问/anime/返回 404,直接访问/anime/index.jsp也找不到。原因多半是docBase指到了项目根,而不是WebRoot;或者访问路径多了、少了项目名;还有一种是web.xml里欢迎页文件名和实际文件不一致。MyEclipse 里部署成功不等于 Tomcat 的 `conf\
本文还有配套的精品资源,点击获取