基于 JSP/Servlet 的旅游景点推荐网站设计与实现(Java Web + MySQL)
一、前言
想旅游的时候,大多数人第一步是上网查攻略:这个景点好玩吗?门票贵不贵?交通方便吗?如果把「找景点」这件事搬到一个统一的平台上,按地区筛选、按热度推荐,再配上简介、文化、历史、特产四个维度的介绍,就是一个很典型的 Web 信息管理系统。
本文完整拆解一个基于JSP/Servlet + MySQL的旅游景点推荐网站。它的定位是「轻量级 Java Web 项目」:没有 Spring 全家桶,没有前端工程化,就是最原生的 Servlet 接收请求、JDBC 访问数据库、HTML 页面用 jQuery + Ajax 渲染,非常适合用来理解 Java Web 的三层结构是怎么转起来的,也适合作为 Java Web 课程设计、毕业设计的参考底子。
系统分前台(游客端)和后台(管理端)两个入口:游客可以按「省-市-县」三级联动查询景点、浏览详情、点赞、评论、留言;管理员可以维护景点数据、一键设置热门推荐、管理用户评论和留言,并通过图表查看访客与注册数据。
二、技术栈与总体架构
系统整体是教科书式的三层架构,技术选型如下:
| 层次 | 技术 | 说明 |
|---|---|---|
| 表现层 | HTML + CSS + jQuery + Ajax | 前台为静态页面异步渲染;后台采用 layui/xadmin 组件库 |
| 控制层 | Servlet(共 30 个) | 每个业务动作一个 Servlet,web.xml 逐一映射 |
| 数据访问层 | JDBC(DriverManager) | JdbcUtils 统一管理连接,SQL 直接执行 |
| 数据库 | MySQL 5.7,utf-8 | 单库 lvyou,7 张表 |
| 运行环境 | JDK 1.8 + Tomcat 8.5 | war 目录部署,上下文路径 /lvyou |
几个值得注意的实现细节:
- 命名即文档。Servlet 按「行为前缀 + 实体」命名:
Sel开头是查询(SelRDjindianServlet查热门景点、SelOneByIdServlet查详情)、Add/Del/Upd对应增删改,LoginServlet/RsgServlet/AdminServlet负责两类角色的登录注册。看一眼 web.xml 就能把整张接口表列出来。 - 前后端约定 JSON。页面侧全部用
$.ajax发请求,Servlet 用 json-lib 把结果对象序列化成{code, msg, extend}结构返回,code=100表示成功。这种「手工版统一响应体」在没有框架的年代很常见,也确实够用。 - 文件上传。景点图片等走 commons-fileupload 处理,上传后保存到应用目录的 images 下,数据库里只存相对路径。
- 无需框架的会话控制。后台页面通过 localStorage 判断管理员是否已登录,未登录自动跳回登录页;登录态由 Servlet 端 session 配合完成。
三、功能设计
前台(游客端)
- 注册 / 登录 / 忘记密码:前台账号独立于管理员账号,注册后即可点赞和评论;
- 首页门户:轮播图展示、热门景点推荐位、访客量计数;
- 区域查询:省-市-县三级联动下拉,选中后一键筛选对应景点;
- 景点列表与详情:每个景点按「简介、文化、历史、特产」四个维度组织图文内容;
- 点赞:单个用户对单个景点只能点赞一次,可取消;
- 评论:登录用户可在景点详情页发表评论,页面实时展示最新评论;
- 在线留言:填写称呼、联系方式和留言内容,提交进后台待审;
- 栏目资讯页:秀美风景、文化、历史、特产等专题栏目,静态模板 + 数据混合展示。
后台(管理端)
- 管理员登录:独立 admin 账号校验,与前台用户隔离;
- 景点管理:新增、修改、删除景点,维护四个维度的图文内容;
- 热门推荐设置:一键把景点设为热门 / 取消热门,直接联动前台首页推荐位;
- 用户管理:查询、删除前台注册用户;
- 评论管理:全站评论集中查看,违规内容一键删除;
- 留言管理:查看游客留言并处理;
- 数据统计:基于 echarts 的访客量、注册人数、点赞数柱状图;
- 区域数据维护:省市区三级联动数据维护页面。
四、数据库设计
数据库只有 7 张表,结构非常干净,核心实体关系是「用户 — 评论/点赞 — 景点」:
| 表名 | 含义 | 关键字段 |
|---|---|---|
| scenic_spot | 景点信息 | name、yiji/erji/sanji(省/市/县)、jianjie/wenhua/lishi(简介/文化/历史)、techang(特产)、四张配图字段、isremeng(热门标记) |
| user | 前台用户 | username、password |
| admin | 管理员 | username、password |
| pinglun | 景点评论 | user_id、jindian_id、details、creattime |
| dianzan | 点赞记录 | user_id、jingdan_id、creattime |
| liuyan | 游客留言 | user_id、chenghu、phone、sex、xinxi、creattime |
| fankejilu | 访客量统计 | shuliang(累计访问数) |
设计上有两个小亮点:一是景点表用yiji/erji/sanji三个冗余字段直接存省市区名称,配合前端三级联动做等值查询,省掉了地区表的 join;二是热门推荐用isremeng一个 0/1 标记位实现,首页推荐位只是「where isremeng=1」的一条查询,后台的「设为热门」按钮本质就是改这个字段。
五、系统演示
前台首页:轮播图 + 热门景点推荐位,顶部可直接按省市区联动筛选:
按「广西壮族自治区 > 南宁市 > 青秀区」筛选后的景点列表:
景点详情页,左侧是「简介 / 文化 / 历史 / 特产」栏目导航,正文展示景点介绍,登录后可以点赞和发表评论,页面实时加载最新评论:
前台登录页与在线留言页:
栏目资讯页(秀美风景专题):
后台管理端登录后进入工作台,数据统计卡片展示景点数、用户数、评论数、留言数、点赞数与累计访问量:
景点管理列表,支持修改、删除与热门位设置:
用户管理与评论管理页面:
留言管理与基于 echarts 的系统统计:
六、小结
这个项目麻雀虽小五脏俱全:三层架构、30 个 Servlet、7 张表、前后台双端完整,把 Java Web 的基础知识——Servlet 生命周期、session 会话、JDBC 事务边界、Ajax 异步渲染、文件上传——全都覆盖了一遍。对于正在准备 Java Web 课程设计或毕业设计的读者来说,它是一个很容易看懂、也容易在其上做二次扩展的底子(比如把热门推荐改成基于协同过滤的推荐算法,或者把评论区加上敏感词过滤)。
完整资源已整理上传(含可运行的 Java Web 源码、数据库脚本与部署说明):
旅游景点推荐网站源码(Java Web + MySQL)
如果在实现类似系统时遇到问题,欢迎评论区交流。