实现数据库版本的留言墙(表白墙)练习
目录
目标
1.创建工程
2.构建目录工程结构
3.设置编码格式
4.查看Maven的配置
6.导入HTML和JS,配置tomcat
7.测试网站是否可以正常访问
8.编写业务代码
目标:
- 1.熟练掌握前端向后端提交数据
- 2.后端接收数据并校验
- 3.通过JAVA代码进行数据库操作
- 4.返回处理结果的响应
1.创建工程

2.构建目录工程结构

3.设置编码格式

4.查看Maven的配置

5.在pom.xml中导入依赖

javax.servlet javax.servlet-api 3.1.0 provided com.fasterxml.jackson.core jackson-databind 2.14.2 mysql mysql-connector-java 5.1.49
6.导入HTML和JS,配置tomcat


messagewall.html
表白墙
表白墙
输入后点击提交,会将内容显示在表格中
谁:对谁:说什么
7.测试网站是否可以正常访问

8.编写业务代码
分析:
- 用户从前端提交数据 AJAX技术
- 服务器要接受用户的数据 通过Servlet实现
- 业务逻辑的处理
- 操作数据库 JDBC
- 获取数据库的结果,并为用户构造响应 JSON
在java目录下创建model包,包下创建类Message
public class Message {private Long id; // 对应到数据中的主键private String sender; // 发送者private String receiver; // 接收者private String content; // 留言内容public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getSender() {return sender;}public void setSender(String sender) {this.sender = sender;}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}
在数据库中建表

在java目录下创建utils包,包下创建类DBUtil
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** 单例模式的数据库连接类* 作用是为了获取一个数据库连接** @Author 比特就业课*/public class DBUtil {// 声明一个数据源对象private static DataSource dataSource = null;// 定义数据库连接的参数private static final String URL = "jdbc:mysql://localhost:3306/java78?characterEncoding=utf8&useSSL=false";private static final String USER = "root";private static final String PASSWORD = "123456";// 在静态方法中初始化数据源对象static {MysqlDataSource mysqlDataSource = new MysqlDataSource();mysqlDataSource.setURL(URL);mysqlDataSource.setUser(USER);mysqlDataSource.setPassword(PASSWORD);dataSource = mysqlDataSource;}// 私有化构造方法private DBUtil () {}/*** 获取数据库连接* @return* @throws SQLException*/public static Connection getConnection () throws SQLException {// 通过数据源对象,获取数据库连接对象return dataSource.getConnection();}public static void close (ResultSet resultSet, PreparedStatement statement, Connection connection) {// 依次关闭并释放资源if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}
在src下 创建文件db.sql

在java目录下创建dao包,包下创建类MessageDao
import com.bitejiuyeke.model.Message;
import com.bitejiuyeke.utils.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;/*** @Author 比特就业课*/public class MessageDao {/*** 获取所有留言数据** @return 留言集合*/public List selectAll () {// 定义访问数据库的相关对象Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {// 1. 获取数据库连接connection = DBUtil.getConnection();// 2. 定义SQL语句String sql = "select id, sender, receiver, content from message_wall order by id desc";// 3. 预处理SQLstatement = connection.prepareStatement(sql);// 4. 执行SQL并获取结果集resultSet = statement.executeQuery();// 5. 遍历结果集List messageList = null;while (resultSet.next()) {// 如果List为空,则初始化if (messageList == null) {messageList = new ArrayList<>();}// 创建一个Message对象Message message = new Message();message.setId(resultSet.getLong(1));message.setSender(resultSet.getString(2));message.setReceiver(resultSet.getString(3));message.setContent(resultSet.getString(4));// 把对象加入ListmessageList.add(message);}// 返回结果return messageList;} catch (SQLException e) {e.printStackTrace();} finally {// 关闭连接并释放资源DBUtil.close(resultSet, statement, connection);}return null;}/*** 新增一条留言记录* @param message 留言记录* @return 受影响的行数*/public int insert(Message message) {Connection connection = null;PreparedStatement statement = null;try {connection = DBUtil.getConnection();String sql = "insert into message_wall values (null, ?, ?, ?)";statement = connection.prepareStatement(sql);// 处理占位符statement.setString(1, message.getSender());statement.setString(2, message.getReceiver());statement.setString(3, message.getContent());// 执行SQLint row = statement.executeUpdate();return row;} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(null, statement, connection);}return -1;}
}
在根目录下创建类MessageServlet

import com.bitejiuyeke.dao.MessageDao;
import com.bitejiuyeke.model.Message;
import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** @Author 比特就业课*/
@WebServlet("/message")
public class MessageServlet extends HttpServlet {// 定义数据库访问类private MessageDao messageDao = new MessageDao();// json转换private ObjectMapper objectMapper = new ObjectMapper();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 定义编码格式req.setCharacterEncoding("UTF-8");resp.setContentType("application/json; charset=utf-8");// 查询数据库中的留言列表List messages = messageDao.selectAll();// 判断结果是否为空if (messages == null) {// 避免返回的是一个"null"messages = new ArrayList<>();}// 返结果转为json并返回String jsonString = objectMapper.writeValueAsString(messages);// 返回结果resp.getWriter().write(jsonString);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 定义编码格式req.setCharacterEncoding("UTF-8");resp.setContentType("application/json; charset=utf-8");// 接收用户请求中的数据Message message = objectMapper.readValue(req.getInputStream(), Message.class);// 非空校验if (message == null || message.getSender() == null || message.getSender().equals("")|| message.getReceiver() == null || message.getReceiver().equals("")|| message.getContent() == null || message.getContent().equals("")) {// 返回一个错误的自定义状态码resp.getWriter().write("{\"code\": -1}");return;}// 调用DAO写入数据库int row = messageDao.insert(message);if (row <= 0) {// 返回一个错误的自定义状态码resp.getWriter().write("{\"code\": -1}");return;}// 返回成功resp.getWriter().write("{\"code\": 0}");}
}
打开浏览器输入网址填入数据测试

在数据库中查看刚才的记录,完成
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
