表白墙网站练习【前端+后端+数据库】
创始人
2024-01-31 07:51:01

表白墙网站练习【前端+后端+数据库】

开发该表白墙(简单网站)的基本步骤:
1.约定前后端交互接口
2.开发服务器代码

  1. 编写Servlet能够处理前端发来的请求
  2. 编写数据库代码,来获取/存储关键数据

3.开发客户端代码

  1. 基于ajax能够构造请求以解析响应
  2. 能够响应用户的操作(点击提交按钮之后,触发服务器发送请求的行为)

MVC

Model(操作数据存取的逻辑) View(给用户展示的界面) Controller(控制器,处理请求之后的关键逻辑)

【view->controller->model】

具体效果

由于主要代码是控制后端,前端界面美化就没有很详细的搞。
在这里插入图片描述
通过输入三条信息,然后展示在当前界面,通过后端连接数据库实现刷新该页面,或者重启服务器,用户之前输入的内容不消失的功能。
在这里插入图片描述
刷新、重启服务器刷新之后
在这里插入图片描述
可以通过MySQL查询存入数据库的信息
在这里插入图片描述

具体代码实现

项目目录结构【Maven】

在这里插入图片描述

源代码

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;public class DBUtil {private static final String URL="jdbc:mysql://127.0.0.1:3306/sunyuhang?characterEncoding=utf8&useSSL=false";private static final String USERNAME = "root";private static final String PASSWORD ="111111";private volatile static DataSource dataSource = null;private static DataSource getDataSource(){if (dataSource == null){synchronized (DBUtil.class) {if (dataSource == null) {dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl(URL);((MysqlDataSource) dataSource).setUser(USERNAME);((MysqlDataSource) dataSource).setPassword(PASSWORD);}}}return dataSource;}public static Connection getConnection() throws SQLException{return getDataSource().getConnection();}public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){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();}}}
}

massageServlet


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.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;class Message{public String from;public String to;public String message;
}@WebServlet("/message")
public class massageServlet extends HttpServlet {private ObjectMapper objectMapper = new ObjectMapper();//改成数据库就不需要这个变量了// private List messages  = new ArrayList<>();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理提交消息请求Message  message = objectMapper.readValue(req.getInputStream(),Message.class);//最简单的方法就是保存到内存中//messages.add(message);//告知页面 返回的数据是 json  格式//有了这样的声明 jQuery Ajax  就会自动帮我们把字符串转换成 js 对象//没有的话 jQuery ajax 就会当成普通字符串来处理save(message);resp.setContentType("application/json;charset=utf8");resp.getWriter().write("{\"ok\":true}");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取消息列表  只要把消息列表中的内容整个返回给客户端即可List messages = load();String jsonString = objectMapper.writeValueAsString(messages);System.out.println("jsonString:"+jsonString);resp.setContentType("application/json;charset=utf8");resp.getWriter().write(jsonString);}private void save(Message message){//把一条消息保存到数据库中Connection connection= null;PreparedStatement statement = null;try {//1.和数据库建立连接connection = DBUtil.getConnection();//2.构造 SQLString sql = "insert into message values(?,?,?)";statement = connection.prepareStatement(sql);statement.setString(1,message.from);statement.setString(2,message.to);statement.setString(3,message.message);//3.执行SQLstatement.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.close(connection, statement,null);}}private List load(){//从数据库中获取到所有的消息List messages = new ArrayList<>();Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {connection = DBUtil.getConnection();String sql = "select * from message";statement = connection.prepareStatement(sql);resultSet = statement.executeQuery();while (resultSet.next()){Message message = new Message();message.from = resultSet.getString("from");message.to = resultSet.getString("to");message.message = resultSet.getString("message");messages.add(message);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.close(connection,statement,resultSet);}return messages;}
}

message_wall.html

将输入的数据按照json格式构造post请求
在这里插入图片描述
在这里插入图片描述



表白墙



表白墙

对谁
说什么

web.xml【固定格式不必细究】

Archetype Created Web Application

pom.xml【通过maven中央仓库依赖导入】


4.0.0org.example20221116Message_wall1.0-SNAPSHOT88mysqlmysql-connector-java5.1.47com.fasterxml.jackson.corejackson-databind2.12.6.1javax.servletjavax.servlet-api3.1.0provided

相关内容

热门资讯

excel表格怎么求积 exc... Hello大家好,我是帮帮。今天跟大家分享一下Excel合并单元格求和乘积计算技巧,特殊表格公式计算...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
死人为什么要盖上脸 家里死人三... 众所周知,人的一生是非常短暂的,所以人们会在有限的时间里,将自己想做的事情都做完,为的就是不留遗憾。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...