Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现

一、系统概述

本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息,客户端通过WAP浏览器访问WML页面。系统支持信息分类查询、关键词搜索、信息发布与管理等功能,为移动设备用户提供便捷的信息获取渠道。

二、系统架构设计

1. 技术选型

  • 前端:WML (Wireless Markup Language)
  • 后端:Java Servlet、JSP
  • 数据库:MySQL
  • 开发工具:Eclipse、Tomcat

2. 系统架构

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── wmlsystem
│   │   │           ├── controller (控制器层)
│   │   │           ├── model (模型层)
│   │   │           ├── dao (数据访问层)
│   │   │           └── utils (工具类)
│   │   ├── webapp
│   │   │   ├── WEB-INF
│   │   │   │   ├── web.xml
│   │   │   │   └── views (JSP页面)
│   │   │   └── wml (WML页面)

三、核心代码实现

1. WML页面设计

<!-- index.wml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><card id="main" title="信息查询系统"><p align="center"><big><b>信息查询系统</b></big><br/><br/><a href="categories.wml">分类查询</a><br/><a href="search.wml">关键词搜索</a><br/><a href="login.wml">管理入口</a><br/></p></card>
</wml><!-- categories.wml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><card id="categories" title="信息分类"><p align="center"><big><b>信息分类</b></big><br/><br/><a href="list.wml?category=news">新闻资讯</a><br/><a href="list.wml?category=products">产品信息</a><br/><a href="list.wml?category=events">活动通知</a><br/><a href="list.wml?category=faq">常见问题</a><br/><a href="index.wml">返回首页</a></p></card>
</wml>

2. 数据库连接工具

// DBConnectionUtil.java
public class DBConnectionUtil {private static final String URL = "jdbc:mysql://localhost:3306/wmlsystem";private static final String USER = "root";private static final String PASSWORD = "password";public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, PASSWORD);}public static void close(Connection conn, Statement stmt, ResultSet rs) {try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

3. 信息管理DAO

// InfoDAO.java
public class InfoDAO {// 获取分类信息列表public List<Info> getInfoListByCategory(String category, int page, int pageSize) {List<Info> infoList = new ArrayList<>();Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = DBConnectionUtil.getConnection();String sql = "SELECT * FROM information WHERE category = ? " +"ORDER BY publish_time DESC LIMIT ? OFFSET ?";stmt = conn.prepareStatement(sql);stmt.setString(1, category);stmt.setInt(2, pageSize);stmt.setInt(3, (page - 1) * pageSize);rs = stmt.executeQuery();while (rs.next()) {Info info = new Info();info.setId(rs.getInt("id"));info.setTitle(rs.getString("title"));info.setContent(rs.getString("content"));info.setCategory(rs.getString("category"));info.setPublishTime(rs.getTimestamp("publish_time"));infoList.add(info);}} catch (SQLException e) {e.printStackTrace();} finally {DBConnectionUtil.close(conn, stmt, rs);}return infoList;}// 根据关键词搜索信息public List<Info> searchInfo(String keyword, int page, int pageSize) {List<Info> infoList = new ArrayList<>();Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {conn = DBConnectionUtil.getConnection();String sql = "SELECT * FROM information WHERE title LIKE ? OR content LIKE ? " +"ORDER BY publish_time DESC LIMIT ? OFFSET ?";stmt = conn.prepareStatement(sql);stmt.setString(1, "%" + keyword + "%");stmt.setString(2, "%" + keyword + "%");stmt.setInt(3, pageSize);stmt.setInt(4, (page - 1) * pageSize);rs = stmt.executeQuery();while (rs.next()) {Info info = new Info();info.setId(rs.getInt("id"));info.setTitle(rs.getString("title"));info.setContent(rs.getString("content"));info.setCategory(rs.getString("category"));info.setPublishTime(rs.getTimestamp("publish_time"));infoList.add(info);}} catch (SQLException e) {e.printStackTrace();} finally {DBConnectionUtil.close(conn, stmt, rs);}return infoList;}// 发布新信息public int publishInfo(Info info) {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;int id = -1;try {conn = DBConnectionUtil.getConnection();String sql = "INSERT INTO information (title, content, category, publish_time) " +"VALUES (?, ?, ?, NOW())";stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);stmt.setString(1, info.getTitle());stmt.setString(2, info.getContent());stmt.setString(3, info.getCategory());int rows = stmt.executeUpdate();if (rows > 0) {rs = stmt.getGeneratedKeys();if (rs.next()) {id = rs.getInt(1);}}} catch (SQLException e) {e.printStackTrace();} finally {DBConnectionUtil.close(conn, stmt, rs);}return id;}// 其他方法省略...
}

4. Servlet控制器

// InfoListServlet.java
@WebServlet("/list.wml")
public class InfoListServlet extends HttpServlet {private static final long serialVersionUID = 1L;private InfoDAO infoDAO = new InfoDAO();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/vnd.wap.wml;charset=UTF-8");PrintWriter out = response.getWriter();String category = request.getParameter("category");int page = Integer.parseInt(request.getParameter("page"));int pageSize = 10;List<Info> infoList = infoDAO.getInfoListByCategory(category, page, pageSize);out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");out.println("<wml>");out.println("<card id=\"list\" title=\"" + category + "列表\">");out.println("<p align=\"center\">");out.println("<big><b>" + category + "列表</b></big><br/>");out.println("</p>");if (infoList.isEmpty()) {out.println("<p align=\"center\">暂无信息</p>");} else {out.println("<p>");for (Info info : infoList) {out.println("<a href=\"detail.wml?id=" + info.getId() + "\">" + info.getTitle() + "</a><br/>");}out.println("</p>");// 分页导航out.println("<p align=\"center\">");if (page > 1) {out.println("<a href=\"list.wml?category=" + category + "&page=" + (page - 1) + "\">上一页</a> ");}if (infoList.size() == pageSize) {out.println("<a href=\"list.wml?category=" + category + "&page=" + (page + 1) + "\">下一页</a>");}out.println("</p>");}out.println("<p align=\"center\">");out.println("<a href=\"categories.wml\">返回分类</a><br/>");out.println("<a href=\"index.wml\">返回首页</a>");out.println("</p>");out.println("</card>");out.println("</wml>");}
}// PublishServlet.java
@WebServlet("/publish.do")
public class PublishServlet extends HttpServlet {private static final long serialVersionUID = 1L;private InfoDAO infoDAO = new InfoDAO();protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String title = request.getParameter("title");String content = request.getParameter("content");String category = request.getParameter("category");Info info = new Info();info.setTitle(title);info.setContent(content);info.setCategory(category);int result = infoDAO.publishInfo(info);response.setContentType("text/vnd.wap.wml;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");out.println("<wml>");out.println("<card id=\"result\" title=\"发布结果\">");if (result > 0) {out.println("<p align=\"center\">信息发布成功!</p>");} else {out.println("<p align=\"center\">信息发布失败!</p>");}out.println("<p align=\"center\">");out.println("<a href=\"admin.wml\">返回管理页面</a><br/>");out.println("</p>");out.println("</card>");out.println("</wml>");}
}

5. 信息管理页面

<!-- publish.wml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><card id="publish" title="发布信息"><p><b>标题:</b><br/><input type="text" name="title" maxlength="50"/><br/><b>分类:</b><br/><select name="category"><option value="news">新闻资讯</option><option value="products">产品信息</option><option value="events">活动通知</option><option value="faq">常见问题</option></select><br/><b>内容:</b><br/><textarea name="content" rows="8" maxlength="1000"></textarea><br/><anchor>发布<go href="publish.do" method="post"><postfield name="title" value="$title"/><postfield name="category" value="$category"/><postfield name="content" value="$content"/></go></anchor><br/><a href="admin.wml">返回</a></p></card>
</wml>

四、系统界面设计

1. 前端WML页面设计

系统的前端使用WML语言设计,包括以下主要页面:

  • 首页:提供分类查询、关键词搜索和管理入口
  • 分类列表页:显示特定分类的信息列表
  • 信息详情页:显示信息的详细内容
  • 搜索页:提供关键词搜索功能
  • 管理页:管理员登录后可进行信息发布、编辑和删除

2. 后端管理界面

后端管理界面使用JSP和Servlet实现,包括:

  • 管理员登录页面
  • 信息发布页面
  • 信息管理页面
  • 分类管理页面

3. 界面交互逻辑

// 生成WML页面的辅助方法
private void generateWMLInfoList(PrintWriter out, List<Info> infoList, String category, int page) {out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");out.println("<wml>");out.println("<card id=\"list\" title=\"" + category + "列表\">");out.println("<p align=\"center\">");out.println("<big><b>" + category + "列表</b></big><br/>");out.println("</p>");if (infoList.isEmpty()) {out.println("<p align=\"center\">暂无信息</p>");} else {out.println("<p>");for (Info info : infoList) {// 截断过长的标题String shortTitle = info.getTitle();if (shortTitle.length() > 20) {shortTitle = shortTitle.substring(0, 20) + "...";}out.println("<a href=\"detail.wml?id=" + info.getId() + "\">" + shortTitle + "</a><br/>");}out.println("</p>");// 分页导航out.println("<p align=\"center\">");if (page > 1) {out.println("<a href=\"list.wml?category=" + category + "&page=" + (page - 1) + "\">上一页</a> ");}if (infoList.size() == 10) {out.println("<a href=\"list.wml?category=" + category + "&page=" + (page + 1) + "\">下一页</a>");}out.println("</p>");}out.println("<p align=\"center\">");out.println("<a href=\"categories.wml\">返回分类</a><br/>");out.println("<a href=\"index.wml\">返回首页</a>");out.println("</p>");out.println("</card>");out.println("</wml>");
}

五、系统部署与测试

1. 环境要求

  • JDK 1.8+
  • Apache Tomcat 8+
  • MySQL 5.7+
  • WAP模拟器或支持WAP的手机

2. 部署步骤

  1. 创建数据库并导入表结构
  2. 配置数据库连接信息
  3. 将项目部署到Tomcat服务器
  4. 使用WAP模拟器或手机访问系统

3. 测试用例

// InfoDAOTest.java
public class InfoDAOTest {private InfoDAO infoDAO = new InfoDAO();@Testpublic void testPublishInfo() {Info info = new Info();info.setTitle("测试信息");info.setContent("这是一条测试信息,用于测试信息发布功能。");info.setCategory("news");int result = infoDAO.publishInfo(info);assertTrue(result > 0);}@Testpublic void testGetInfoListByCategory() {List<Info> infoList = infoDAO.getInfoListByCategory("news", 1, 10);assertNotNull(infoList);}@Testpublic void testSearchInfo() {List<Info> infoList = infoDAO.searchInfo("测试", 1, 10);assertNotNull(infoList);}
}

六、毕业设计文档框架

1. 论文框架

  1. 引言
  2. 相关技术综述
  3. 系统需求分析
  4. 系统设计
  5. 系统实现
  6. 系统测试
  7. 总结与展望

七、总结

本系统基于Java和WML技术实现了移动设备上的信息查询与后端信息发布功能,采用B/S架构,具有良好的可扩展性和可维护性。系统支持信息的分类查询、关键词搜索和后台管理,为移动设备用户提供了便捷的信息获取渠道。通过本项目的开发,深入掌握了Java Web开发技术和WML页面设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式与锁(死锁)

目录 线程安全的单例模式 什么是单例模式 单例模式的特点 饿汉实现方式和懒汉实现方式 饿汉⽅式实现单例模式 懒汉⽅式实现单例模式 懒汉⽅式实现单例模式(线程安全版本) 单例式线程池 ThreadPool.hpp threadpool.cc 运行结果 线程安全和重⼊问题 常⻅锁概念 死…

CSS标题下划线动态进入和移开

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>CSS动态效果</title><style>div .title…

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…

鸿蒙 Stege模型 多模块应用

模块 一个鸿蒙应用可能包含一个或者多个功能模块&#xff0c;在 DevEcoStudio 工程中可以创建对应的一个或多个 Module。Module 又分为 “Ability” 和 “Library”两种类型&#xff0c;“Ability”类型的 Module 对应于编译后的 HAP&#xff08;Harmony Ability Package&…

领域LLM九讲——第4讲 构建可测评、可优化的端到端商业AI Agent 系统

领域LLM九讲——第4讲 构建可测评、可优化的端到端商业AI Agent 系统 以 OpenAI Cookbook 的《receipt_inspection》示例为基础&#xff0c;探讨如何设计一个可测试、可优化的端到端 AI Agent 系统。整体流程分为三个阶段&#xff1a; (1) 端到端 Agent 构建&#xff08;基线测…

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…

Linux线程与进程关系及底层实现

在操作系统中&#xff0c;线程切换相比进程切换更轻量级的关键原因之一是 缓存&#xff08;Cache&#xff09;的有效性&#xff0c;尤其是对 CPU 缓存&#xff08;如 L1/L2/L3&#xff09;和 TLB&#xff08;Translation Lookaside Buffer&#xff09;的影响。以下从缓存角度详…

【论文阅读30】Bi-LSTM(2024)

用于精确实时滑坡检测的双向LSTM模型&#xff1a;以印度梅加拉亚邦毛永格里姆为例的研究 IEEE Internet of Things Journal&#xff08;简称 IoT‑J&#xff09;是一份 IEEE 自 2014 年起双月刊发表的国际顶级学术期刊&#xff0c;专注于物联网各领域的研究。 作者&#xff1a…

Java编程之原型模式

原型模式的定义 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;通过复制已有对象来创建新对象&#xff0c;而非通过常规的手段的new关键字来实例化。适用于对象创建成本较高或需要动态配置的场景。 例如&#xff0c;在一个游戏开发中&am…

RAG质量评估

当完成了一个RAG系统的开发工作以后&#xff0c;还需要对该系统的性能进行评估。如何对RAG系统的性能进行评估呢&#xff1f;仔细分析RAG系统的产出成果&#xff0c;主要涉及以下几点&#xff1a; &#xff08;1&#xff09;检索器组件 检索的相关文档 context, &#xff08;…

LLMs基础学习(八)强化学习专题(1)

LLMs基础学习&#xff08;八&#xff09;强化学习专题&#xff08;1&#xff09; 文章目录 LLMs基础学习&#xff08;八&#xff09;强化学习专题&#xff08;1&#xff09;学习资料资源强化学习是什么强化学习一句话精准定义 强化学习与其他学习类型的对比强化学习 vs 监督学习…

19-Oracle 23 ai Database Sharding-知识准备

小伙伴是不是经常遇见大规模集群和数量的时候&#xff0c;业务就提出要对数据进行sharding。 Oracle 和其他数据库&#xff08;如 MySQL、PostgreSQL、MongoDB 等&#xff09; 为什么要进行分片&#xff08;sharding&#xff09;&#xff0c;分片的原因是什么&#xff0c;实现…

分类与逻辑回归 - 一个完整的guide

线性回归和逻辑回归其实比你想象的更相似 &#x1f603; 它们都是所谓的参数模型。让我们先看看什么是参数模型&#xff0c;以及它们与非参数模型的区别。 线性回归 vs 逻辑回归 线性回归&#xff1a;用于回归问题的线性参数模型。逻辑回归&#xff1a;用于分类问题的线性参数…

英语写作中“每一个”each individual、every individual、every single的用法

一、Individual &#xff1a;个体&#xff0c;相对于团体&#xff0c;例如&#xff1a; Individual competition &#xff08;个人比赛&#xff09;&#xff0c;相对于team competition &#xff08;团体比赛&#xff09; Individual users &#xff08;个人用户&#xff09;…

由于 z(x,y) 的变化导致的影响(那部分被分给了链式项)

✅ 本质问题&#xff1a;为什么链式法则中 ∂ F ∂ x \frac{\partial F}{\partial x} ∂x∂F​ 不考虑 z z ( x , y ) zz(x,y) zz(x,y)&#xff1f; &#x1f50d; 一、关键是&#xff1a;偏导数的定义是什么&#xff1f; 我们从最根本的定义开始&#xff1a; ∂ F ( x , y…

python打卡day44@浙大疏锦行

知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战&#xff1a;resnet18 作业&#xff1a; 尝试在cifar10对比如下其他的预训练模型&#xff0c;观察差异&#xff0c;尽可能和他人选择的不同尝试通过ctrl进入resnet的…

十一(3) 类,加深对拷贝构造函数的理解

class ClassName { public: // 拷贝构造函数&#xff1a;参数是同类型对象的引用&#xff08;通常为 const 引用&#xff09; ClassName(const ClassName& other) { // 复制 other 的成员变量到当前对象 } }; 参数要求&#xff1a;必须是同类型对象的引用&#xff0…

网页后端开发(基础1--maven)

maven的作用&#xff1a; Maven是一款管理和构建Java项目的工具。 1.依赖管理&#xff1a; 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09; 不用手动下载jar包&#xff0c;只需要中maven中引用&#xff0c;maven会查找本地仓库。若本地仓库没有&#xff0c;会直…

认识电子元器件---高低边驱动

目录 一、基本概念 二、关键参数对比 三、工作原理 &#xff08;1&#xff09;高边驱动 &#xff08;2&#xff09;低边驱动 四、典型的应用场景 五、如何选择 一、基本概念 可以理解成&#xff1a;高低边驱动是MOS/IGBT的一种应用方式 高低边驱动是电路拓扑概念&#…

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性&#xff0c;分别代表什么&#xff0c;有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …