• 表白墙(前端+后端+数据库)


    目录

    一、创建项目

    1、创建maven项目,引入依赖

    2、创建目录结构

    二、前端代码

    1、页面内容和样式

    2、提交按钮的点击事件

    3、发送GET请求

    三、数据库

    四、后端代码

    1、重写doPost方法

    1.1 创建Message类

    1.2 重写doPost方法

    1.3 实现save方法

    2、重写doGet方法

    1、重写doGet方法

    2、实现load方法

    五、查看结果

    1、查看POST请求

    2、查看GET请求


    一、创建项目

    1、创建maven项目,引入依赖

    2、创建目录结构

    二、前端代码

    前端代码中主要实现页面的内容和样式,以及通过ajax向服务器发送请求:

    (1) 点击提交按钮,向服务器发送一个提交数据的POST请求,服务器收到请求后,把数据保存到数据库中;

    (2) 重新加载页面时,向服务器发送一个获取数据的GET请求,服务器收到请求后,返回数据库中的数据,再由浏览器把这些数据显示在页面上。

    1、页面内容和样式

    1. <style>
    2. .container {
    3. width: 400px;
    4. margin: 0 auto;
    5. }
    6. .title {
    7. text-align: center;
    8. }
    9. .ps {
    10. height: 20px;
    11. text-align: center;
    12. color: gray;
    13. }
    14. .row {
    15. height: 40px;
    16. display: flex;
    17. /*水平居中*/
    18. justify-content: center;
    19. /*垂直居中*/
    20. align-items: center;
    21. }
    22. .row span {
    23. font-size: larger;
    24. width: 100px;
    25. }
    26. .row input {
    27. height: 30px;
    28. width: 250px;
    29. }
    30. .row button {
    31. height: 40px;
    32. width: 360px;
    33. color: white;
    34. background-color: orange;
    35. border: none;
    36. border-radius: 5px;
    37. }
    38. .row button:active {
    39. background-color: rgb(152, 146, 146);
    40. }
    41. style>
    42. <div class="container">
    43. <h1 class="title">表白墙h1>
    44. <div class="ps">输入后点击提交,会将信息显示在表格中div>
    45. <div class="row">
    46. <span>谁:span><input type="text">
    47. div>
    48. <div class="row">
    49. <span>对谁:span><input type="text">
    50. div>
    51. <div class="row">
    52. <span>说什么:span><input type="text">
    53. div>
    54. <div class="row"><button>提交button>div>
    55. div>

    上述代码实现的页面效果:

    2、提交按钮的点击事件

    1. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js">script>
    2. <script>
    3. let button = document.querySelector('button');
    4. button.onclick = function() {
    5. //1.获取文本框中的内容
    6. let messages = document.querySelectorAll('input');
    7. let from = messages[0].value;
    8. let to = messages[1].value;
    9. let message = messages[2].value;
    10. if(from == "" || to == "" || message == ""){
    11. return;
    12. }
    13. //2.构造html元素
    14. let element = document.createElement('div');
    15. element.innerHTML = from+'对'+to+'说:'+message;
    16. element.className = 'row';
    17. //3.把构造好的元素添加到后面
    18. let div = document.querySelector('.container');
    19. div.appendChild(element);
    20. //4.清空输入框的内容
    21. for(let i = 0;i < messages.length;i++){
    22. messages[i].value = "";
    23. }
    24. //创建一个data对象用来存放向服务器提交的数据
    25. let data = {
    26. to: to,
    27. from: from,
    28. message: message
    29. };
    30. //5.点击提交按钮,给服务器发送提交数据请求
    31. $.ajax({
    32. type: 'post',
    33. url: 'message',
    34. //通过JSON.stringify把data对象转成json格式的字符串
    35. data: JSON.stringify(data),
    36. contentType: "application/json;charset=utf8",
    37. success: function(body){
    38. console.log("提交数据成功");
    39. }
    40. })
    41. }
    42. script>

    3、发送GET请求

    1. <script>
    2. let button = document.querySelector('button');
    3. button.onclick = function() {
    4. ……
    5. }
    6. //向服务器发送获取数据请求
    7. //由于这个请求是在页面加载时就发送的,所以要写在button的点击事件外面
    8. function getMessages() {
    9. $.ajax({
    10. type: 'get',
    11. url: 'message',
    12. //jquery会自动把body中的内容(json格式的数组)解析成JS对象数组
    13. //前提条件是响应的ContentType要设置成"application/json"
    14. success: function(body){
    15. let container = document.querySelector('.container');
    16. for(let i = 0;i < body.length;i++){
    17. //根据一个数组元素构造一个row
    18. let message = body[i];
    19. let element = document.createElement('div');
    20. //设置构造好的row里的内容
    21. element.innerHTML = message.from+'对'+message.to+'说:'+message.message;
    22. element.className = 'row';
    23. //再把构造好的row放在container后面
    24. container.appendChild(element);
    25. }
    26. }
    27. })
    28. }
    29. getMessages();
    30. script>

    三、数据库

    (1) 创建一个数据库messageWall:

    mysql> create table message(`from` varchar(50), `to` varchar(50), message varchar(1024));

    (2) 在messageWall中创建一张message表,表中包含from、to、message三列:

    1. create table message(`from` varchar(50), `to` varchar(50), message varchar(1024));
    2. desc message;

    注意:from和to是MySQL中的关键字,需要加上反引号。 

    四、后端代码

    首先创建一个MessageWallServlet类来处理客户端发来的请求,然后重写里面的doGet和doPost方法:

    1. @WebServlet("/message")
    2. public class MessageWallServlet extends HttpServlet {
    3. //由于mapper对象在多个请求中都会被用到,所以创建为成员对象
    4. private ObjectMapper mapper = new ObjectMapper();
    5. }

    1、重写doPost方法

    1.1 创建Message类

    当服务器收到一个POST请求时,服务器需要读取请求中的数据并存放到数据库中,所以需要先创建一个Message用来读取并解析请求中的json数据:

    1. public class Message {
    2. private String from;
    3. private String to;
    4. private String message;
    5. public String getFrom() {
    6. return from;
    7. }
    8. public void setFrom(String from) {
    9. this.from = from;
    10. }
    11. public String getTo() {
    12. return to;
    13. }
    14. public void setTo(String to) {
    15. this.to = to;
    16. }
    17. public String getMessage() {
    18. return message;
    19. }
    20. public void setMessage(String message) {
    21. this.message = message;
    22. }
    23. }

    1.2 重写doPost方法

    1. @Override
    2. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    3. //读取请求中的json数据并解析成Message对象
    4. Message message = mapper.readValue(req.getInputStream(),Message.class);
    5. //通过调用save方法把message中的数据存到数据库中
    6. try {
    7. save(message);
    8. } catch (SQLException e) {
    9. e.printStackTrace();
    10. }
    11. //设置状态码
    12. resp.setStatus(200);
    13. //在服务器控制台打印日志
    14. System.out.println("提交数据成功:"+"from = "+message.getFrom()+
    15. " to = "+message.getTo()+" message = "+message.getMessage());
    16. }

    1.3 实现save方法

    1. private void save(Message message) throws SQLException {
    2. //把数据保存到数据库
    3. //1.创建数据源
    4. DataSource dataSource = new MysqlDataSource();
    5. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/messageWall?characterEncoding=utf8&useSSL=false");
    6. ((MysqlDataSource)dataSource).setUser("root");
    7. ((MysqlDataSource)dataSource).setPassword("");
    8. //2.建立连接
    9. Connection connection = dataSource.getConnection();
    10. //3.构造SQL语句
    11. String sql = "insert into message values(?,?,?)";
    12. PreparedStatement statement = connection.prepareStatement(sql);
    13. statement.setString(1,message.getFrom());
    14. statement.setString(2,message.getTo());
    15. statement.setString(3,message.getMessage());
    16. //4.执行SQL语句
    17. int ret = statement.executeUpdate();
    18. System.out.println(ret);
    19. //5.关闭连接
    20. connection.close();
    21. statement.close();
    22. }

    2、重写doGet方法

    doGet方法不需要对请求中的内容进行解析处理,只需要查询数据库的数据并返回给客户端即可:

    1、重写doGet方法

    1. @Override
    2. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    3. //加载数据库中的数据
    4. List messageList = null;
    5. try {
    6. messageList = load();
    7. } catch (SQLException e) {
    8. e.printStackTrace();
    9. }
    10. //设置状态码
    11. resp.setStatus(200);
    12. //设置响应的数据格式和字符集
    13. resp.setContentType("application/json; charset=utf8");
    14. //把加载的数据返回给客户端
    15. resp.getWriter().write(mapper.writeValueAsString(messageList));
    16. }

    2、实现load方法

    1. private List load() throws SQLException {
    2. //从数据库查询数据
    3. //1.创建数据源
    4. DataSource dataSource = new MysqlDataSource();
    5. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/messageWall?characterEncoding=utf8&useSSL=false");
    6. ((MysqlDataSource)dataSource).setUser("root");
    7. ((MysqlDataSource)dataSource).setPassword("524169");
    8. //2.建立连接
    9. Connection connection = dataSource.getConnection();
    10. //3.构造SQL语句
    11. String sql = "select * from message";
    12. PreparedStatement statement = connection.prepareStatement(sql);
    13. //4.执行SQL语句
    14. ResultSet resultSet = statement.executeQuery();
    15. //5.遍历结果集合
    16. List messageList = new ArrayList<>();
    17. while (resultSet.next()){
    18. Message message = new Message();
    19. message.setFrom(resultSet.getString("from"));
    20. message.setTo(resultSet.getString("to"));
    21. message.setMessage(resultSet.getString("message"));
    22. messageList.add(message);
    23. }
    24. //6.关闭连接
    25. connection.close();
    26. statement.close();
    27. return messageList;
    28. }

    五、查看结果

    1、查看POST请求

    浏览器:

    POST请求内容:

    服务器:

    数据库:

    2、查看GET请求

    请求内容:

    响应内容:

  • 相关阅读:
    STM32CUBEIDE编译库函数项目及库文件调用
    GNSS及其定位原理,差分GNSS技术分析
    Web安全测试(五):XSS攻击—存储式XSS漏洞
    windows10家庭版如何开启组策略/地平线4Teredo服务器限定
    ceph块存储在线扩容
    Python嵌套绘图并为条形图添加自定义标注
    声明 Array List 的3种方式 ArrayList、Collection、List 的区别
    “/etc/apt/sources.list.d“和文件/etc/apt/sources.list的不同
    Linux-0.11 boot目录bootsect.s详解
    Spring——AOP
  • 原文地址:https://blog.csdn.net/m0_67683346/article/details/127981859