前端的表白墙实现代码在之前的博客中有
表白墙中的每一个表白信息都由Message对象呈现,其包含form——表白者,to——被表白者,message——表白信息,以及一系列get和set方法
public class Message {private String from;private String to;private String message;public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}
相对于前端实现的版本,这次的messageWall中添加了使用ajax实现用post向服务器提交数据,从后端加载表白信息的方法,使用ajax实现用get向服务器获取数据,并将数据添加到dom树上,让前端可以展现新的数据
Document
表白墙
输入后点击提交,会将信息显示在表格中
表白者被表白者表白信息
和Message类采用相同的属性命名,类型都是varchar(1024)
和数据库进行连接,将查询到一行表白信息转换成message对象,存储在messageList中并返回
和数据库进行连接,将参数中的message对象中的三个属性转换为message表中的一行数据,插入到数据库中
调用load方法,获得数据库中的数据,转为messageList,使用上一篇博客中的Jackson的方法将messageList转为json格式发送到前端
得到前端传递过来的json数据,将其转为message对象,调用save方法,将其存储在数据库中,设置状态码为200,打印数据
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;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 javax.sql.DataSource;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;@WebServlet("/message")
public class MessageServlet extends HttpServlet {private ObjectMapper objectMapper = new ObjectMapper();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {List messageList = null;try {messageList = load();} catch (SQLException throwables) {throwables.printStackTrace();}resp.setContentType("application/json; charset=utf-8");resp.getWriter().write(objectMapper.writeValueAsString(messageList));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Message message = objectMapper.readValue(req.getInputStream(),Message.class);try {save(message);} catch (SQLException throwables) {throwables.printStackTrace();}resp.setStatus(200);System.out.println("提交数据成功!" + "form:" + message.getFrom() + " to:" + message.getTo() + " message:" + message.getMessage());}private void save(Message message) throws SQLException {//数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("Lx20030830");//建立连接Connection connection = (Connection) dataSource.getConnection();//构造sql语句String sql = "insert into message values(?, ?, ?)";PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1,message.getFrom());statement.setString(2,message.getTo());statement.setString(3, message.getMessage());//执行插入操作int ret = statement.executeUpdate();System.out.println("ret: " + ret);//关闭连接statement.close();connection.close();}private List load() throws SQLException {//数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("Lx20030830");//建立连接Connection connection = (Connection) dataSource.getConnection();String sql = "select * from message";PreparedStatement statement = connection.prepareStatement(sql);//执行查询操作ResultSet resultSet = statement.executeQuery();//将查询到的信息保存在messageList中List messageList = new ArrayList<>();while(resultSet.next()){Message message = new Message();message.setFrom(resultSet.getString("from"));message.setTo(resultSet.getString("to"));message.setMessage(resultSet.getString("message"));messageList.add(message);}statement.close();connection.close();return messageList;}
}
当点击提交按钮是,数据发送给服务器,服务器处理数据存储在数据库中
然后,服务器获取数据库中的数据,以json格式发送给前端,前端将其展示在页面上
并且,不论是刷新页面还是重启服务器,数据都不会消失了