编写留言板应用中的留言显示页面showMessage.jsp。
时间: 2023-06-14 11:02:27 浏览: 66
以下是一个简单的示例代码:
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<hr>
<c:forEach items="${messages}" var="message">
<div>
<h3>${message.title}</h3>
<p>${message.content}</p>
<p>发布时间:${message.publishTime}</p>
</div>
<hr>
</c:forEach>
</body>
</html>
```
这个页面使用了 JSTL 标签库中的 `c:forEach` 标签遍历传递过来的 `messages` 集合,并在页面上显示每个留言的标题、内容和发布时间。每个留言之间用水平线分隔开来。在实际应用中,你需要根据具体的需求和数据结构来修改和完善这个页面。
相关问题
在Servlet程序中实现发表留言、留言显示、删除留言
1. 发表留言:
首先,创建一个HTML页面,包含一个表单用于输入留言内容,提交表单时向Servlet发送POST请求。在Servlet中,获取表单数据,将留言内容存入数据库,并重定向到留言显示页面。
HTML页面:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>发表留言</title>
</head>
<body>
<h1>发表留言</h1>
<form action="AddMessageServlet" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br>
<label for="content">留言内容:</label>
<textarea id="content" name="content"></textarea><br>
<input type="submit" value="提交">
</form>
</body>
</html>
```
AddMessageServlet:
```java
@WebServlet("/AddMessageServlet")
public class AddMessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String content = request.getParameter("content");
MessageDao dao = new MessageDao();
dao.addMessage(username, content);
response.sendRedirect("ShowMessageServlet");
}
}
```
MessageDao中addMessage方法:
```java
public void addMessage(String username, String content) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DBUtil.getConnection();
String sql = "INSERT INTO message(username, content) VALUES (?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, content);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(stmt, conn);
}
}
```
2. 留言显示:
创建一个Servlet用于显示所有留言,从数据库中获取所有留言并将其显示在HTML页面中。
ShowMessageServlet:
```java
@WebServlet("/ShowMessageServlet")
public class ShowMessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Message> messages = new MessageDao().getAllMessages();
request.setAttribute("messages", messages);
request.getRequestDispatcher("showMessage.jsp").forward(request, response);
}
}
```
showMessage.jsp:
```jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<a href="addMessage.html">发表留言</a>
<hr>
<c:forEach items="${messages}" var="message">
<p>${message.username}说:${message.content}</p>
<form action="DeleteMessageServlet" method="post">
<input type="hidden" name="id" value="${message.id}">
<input type="submit" value="删除">
</form>
<hr>
</c:forEach>
</body>
</html>
```
MessageDao中getAllMessages方法:
```java
public List<Message> getAllMessages() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<Message> messages = new ArrayList<>();
try {
conn = DBUtil.getConnection();
String sql = "SELECT id, username, content FROM message";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt(1);
String username = rs.getString(2);
String content = rs.getString(3);
Message message = new Message(id, username, content);
messages.add(message);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, stmt, conn);
}
return messages;
}
```
3. 删除留言:
添加一个表单用于删除留言,向Servlet发送POST请求,从数据库中删除指定留言,并重定向到留言显示页面。
DeleteMessageServlet:
```java
@WebServlet("/DeleteMessageServlet")
public class DeleteMessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
MessageDao dao = new MessageDao();
dao.deleteMessage(id);
response.sendRedirect("ShowMessageServlet");
}
}
```
MessageDao中deleteMessage方法:
```java
public void deleteMessage(int id) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DBUtil.getConnection();
String sql = "DELETE FROM message WHERE id = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(stmt, conn);
}
}
```
如何在QT中使用.cpp文件展示qml页面
要在Qt中使用.cpp文件展示QML页面,需要完成以下步骤:
1. 创建一个QML文件,例如main.qml,用于设计页面布局和逻辑。
2. 在Qt项目中创建一个C++类,例如MyClass,用于与QML页面进行交互。
3. 在MyClass类中,通过Q_PROPERTY宏将C++类中的变量暴露给QML页面,使得QML页面可以访问和修改这些变量。
4. 在MyClass类中,通过Q_INVOKABLE宏将C++类中的函数暴露给QML页面,使得QML页面可以调用这些函数。
5. 在main.cpp中,创建一个QApplication对象和QQuickView对象,并将QML文件加载到QQuickView对象中。
6. 在main.cpp中,实例化MyClass类,并将其注册到QML引擎中。
7. 在main.cpp中,将QQuickView对象设置为主窗口,并显示窗口。
具体实现可以参考以下代码:
MyClass.h:
```cpp
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QObject>
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged)
public:
explicit MyClass(QObject *parent = nullptr);
QString message() const;
void setMessage(const QString &message);
Q_INVOKABLE void showMessage();
signals:
void messageChanged();
private:
QString m_message;
};
#endif // MYCLASS_H
```
MyClass.cpp:
```cpp
#include "MyClass.h"
#include <QDebug>
MyClass::MyClass(QObject *parent) : QObject(parent)
{
m_message = "Hello, world!";
}
QString MyClass::message() const
{
return m_message;
}
void MyClass::setMessage(const QString &message)
{
if (m_message != message) {
m_message = message;
emit messageChanged();
}
}
void MyClass::showMessage()
{
qDebug() << "Message from QML:" << m_message;
}
```
main.cpp:
```cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQuickView>
#include "MyClass.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
MyClass myClass;
engine.rootContext()->setContextProperty("myClass", &myClass);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.show();
return app.exec();
}
```
main.qml:
```qml
import QtQuick 2.0
Rectangle {
width: 400
height: 400
color: "lightgray"
Text {
text: myClass.message
font.pixelSize: 20
anchors.centerIn: parent
}
Button {
text: "Change message"
onClicked: myClass.message = "New message"
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
}
Button {
text: "Show message"
onClicked: myClass.showMessage()
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
}
}
```
在这个例子中,我们创建了一个名为MyClass的C++类,其中包含一个message属性和一个showMessage函数。我们将MyClass类实例化并注册到QML引擎中,然后在QML文件中使用message属性和showMessage函数。最后,我们将QML文件加载到QQuickView对象中,并将QQuickView对象设置为主窗口。运行该应用程序后,您将看到一个带有文本和按钮的窗口,您可以点击按钮来更改文本或显示消息。