当前位置: 首页 > news >正文

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.xdnf.cn/news/914995.html

相关文章:

  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
  • [总结篇]个人网站
  • 应用层协议:HTTPS
  • 微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表
  • 2025年- H75-Lc183--121.买卖股票的最佳时机1(贪心or动态规划)--Java版
  • Vue:Ajax
  • 学习STC51单片机30(芯片为STC89C52RCRC)
  • 【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
  • c++学习-this指针
  • 微信小程序带参分享、链接功能
  • ​​Android 如何查看CPU架构?2025年主流架构有哪些?​
  • 文字转语音
  • 安卓基础(Java 和 Gradle 版本)
  • Qt Quick Test模块功能及架构
  • Qt/C++学习系列之列表使用记录
  • 网络原理5 - TCP4
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
  • 【Java学习笔记】StringBuilder类(重点)
  • 基于 Transformer robert的情感分类任务实践总结之二——R-Drop
  • Python实例题:Python计算线性代数
  • SQL 基础入门
  • Vue学习之---nextTick
  • 抖去推--短视频矩阵系统源码开发
  • vue3 + vite实现动态路由,并进行vuex持久化设计
  • Vue ④-组件通信 || 进阶语法
  • 基于SFC的windows系统损坏修复程序
  • 个人电脑部署本地大模型+UI
  • SQL Server全局搜索:在整个数据库中查找特定值的高效方法
  • 11.RV1126-ROCKX项目 API和人脸检测画框
  • SCAU数值计算OJ