实现数据库版本的留言墙(表白墙)练习

目录

目标

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.servletjavax.servlet-api3.1.0providedcom.fasterxml.jackson.corejackson-databind2.14.2mysqlmysql-connector-java5.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}");}
}

打开浏览器输入网址填入数据测试

 在数据库中查看刚才的记录,完成


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部