飞道的博客

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

290人阅读  评论(0)

目录

一、创建项目

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

请求内容:

响应内容:


转载:https://blog.csdn.net/m0_67683346/article/details/127981859
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场