本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息,客户端通过WAP浏览器访问WML页面。系统支持信息分类查询、关键词搜索、信息发布与管理等功能,为移动设备用户提供便捷的信息获取渠道。
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── wmlsystem
│ │ │ ├── controller (控制器层)
│ │ │ ├── model (模型层)
│ │ │ ├── dao (数据访问层)
│ │ │ └── utils (工具类)
│ │ ├── webapp
│ │ │ ├── WEB-INF
│ │ │ │ ├── web.xml
│ │ │ │ └── views (JSP页面)
│ │ │ └── wml (WML页面)
// 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();
}
}
}
// 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;
}
// 其他方法省略...
}
// 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("");
out.println("");
out.println("" );
out.println(" + category + "列表\">");
out.println(""
);
out.println("" + category + "列表
");
out.println("");
if (infoList.isEmpty()) {
out.println("暂无信息
");
} else {
out.println(""
);
for (Info info : infoList) {
out.println(" + info.getId() + "\">" + info.getTitle() + "
");
}
out.println("");
// 分页导航
out.println(""
);
if (page > 1) {
out.println(" + category + "&page=" + (page - 1) + "\">上一页 ");
}
if (infoList.size() == pageSize) {
out.println(" + category + "&page=" + (page + 1) + "\">下一页");
}
out.println("");
}
out.println(""
);
out.println("返回分类
");
out.println("返回首页");
out.println("");
out.println(" ");
out.println("");
}
}
// 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("");
out.println("");
out.println("" );
out.println("" );
if (result > 0) {
out.println("信息发布成功!
");
} else {
out.println("信息发布失败!
");
}
out.println(""
);
out.println("返回管理页面
");
out.println("");
out.println("");
out.println("");
}
}
标题:
分类:
内容:
发布
返回
系统的前端使用WML语言设计,包括以下主要页面:
后端管理界面使用JSP和Servlet实现,包括:
// 生成WML页面的辅助方法
private void generateWMLInfoList(PrintWriter out, List<Info> infoList, String category, int page) {
out.println("");
out.println("");
out.println("" );
out.println(" + category + "列表\">");
out.println(""
);
out.println("" + category + "列表
");
out.println("");
if (infoList.isEmpty()) {
out.println("暂无信息
");
} else {
out.println(""
);
for (Info info : infoList) {
// 截断过长的标题
String shortTitle = info.getTitle();
if (shortTitle.length() > 20) {
shortTitle = shortTitle.substring(0, 20) + "...";
}
out.println(" + info.getId() + "\">" + shortTitle + "
");
}
out.println("");
// 分页导航
out.println(""
);
if (page > 1) {
out.println(" + category + "&page=" + (page - 1) + "\">上一页 ");
}
if (infoList.size() == 10) {
out.println(" + category + "&page=" + (page + 1) + "\">下一页");
}
out.println("");
}
out.println(""
);
out.println("返回分类
");
out.println("返回首页");
out.println("");
out.println(" ");
out.println("");
}
// InfoDAOTest.java
public class InfoDAOTest {
private InfoDAO infoDAO = new InfoDAO();
@Test
public void testPublishInfo() {
Info info = new Info();
info.setTitle("测试信息");
info.setContent("这是一条测试信息,用于测试信息发布功能。");
info.setCategory("news");
int result = infoDAO.publishInfo(info);
assertTrue(result > 0);
}
@Test
public void testGetInfoListByCategory() {
List<Info> infoList = infoDAO.getInfoListByCategory("news", 1, 10);
assertNotNull(infoList);
}
@Test
public void testSearchInfo() {
List<Info> infoList = infoDAO.searchInfo("测试", 1, 10);
assertNotNull(infoList);
}
}
本系统基于Java和WML技术实现了移动设备上的信息查询与后端信息发布功能,采用B/S架构,具有良好的可扩展性和可维护性。系统支持信息的分类查询、关键词搜索和后台管理,为移动设备用户提供了便捷的信息获取渠道。通过本项目的开发,深入掌握了Java Web开发技术和WML页面设计。