- 1.内存版表白墙
- 2.数据库版表白墙
1.创建servlet项目
2.创建必要的目录src
3.调整pom.xml
引入servlet和jackson依赖:
4.message-wall.html:
表白墙
表白墙
输入后点击提交, 会将信息显示在表格中
谁:
对谁:
说什么:
猫猫对狗狗说: 喵喵喵
小赵对小张说: 你好
5.AddMeaageServlet.java:
import lombok.Getter;
import lombok.Setter;
import utils.StringUtils;
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;
@WebServlet("/message/add")
public class AddMessageServlet extends HttpServlet {
public static List msgList = new ArrayList<>();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int result = -1;
//1.得到前端参数并效验
String from = req.getParameter("from");
String to = req.getParameter("to");
String msg = req.getParameter("msg");
if (StringUtils.hasLength(from) && StringUtils.hasLength(to) && StringUtils.hasLength(msg)) {
//2.将表白对象加入到集合(内存)
AddMessageServlet.msgList.add(new Message(from, to, msg));
result = 1;
//
}
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().println(result);
}
}
@Setter
@Getter
class Message{
private String from;
private String to;
private String message;
public Message(String from, String to, String message) {
this.from = from;
this.to = to;
this.message = message;
}
}
6.MessageListServlet.java:
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.List;
@WebServlet("/message/list")
public class MessageListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List messageList=AddMessageServlet.msgList;
resp.setContentType("application/json;charset=utf-8");
ObjectMapper objectMapper=new ObjectMapper();
resp.getWriter().println(objectMapper.writeValueAsString(messageList));
}
}
7.通过浏览器访问:http://localhost:8080/first-servlet/message-wall.html可以看到:
添加表白信息:
(1)成功添加表白信息:
(2)用户输入不完整时提示输入错误:
表白信息列表:
上面的程序有一个问题数据是存储在内存中的,当服务器重启之后数据就会丢失。
1.创建数据库和数据表:
此时数据库中还没有数据:
2.连接数据库:
pom.xml中添加MYSQL JDBC依赖:
3.message-wallv2.html:
表白墙——连接数据库版本
表白墙
输入后点击提交, 会将信息显示在表格中
谁:
对谁:
说什么:
4.DBUtils.java:
package utils;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
private DBUtils() {
}
private static volatile MysqlDataSource mysqlDataSource;
private static volatile Connection connection;
private static MysqlDataSource getMysqlDataSource() {
if (mysqlDataSource == null) {
synchronized (DBUtils.class) {
if (mysqlDataSource == null) {
mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/messagewall?character=utf8&useSSL=true");
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("123456");
}
}
}
return mysqlDataSource;
}
// 1.get connect
public static Connection getConnection() {
if (connection == null) { // 首次访问
synchronized (DBUtils.class) {
if (connection == null) {
try {
MysqlDataSource dataSource = getMysqlDataSource();
connection = (Connection) dataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
return connection;
}
// 2.提供关闭资源的方法
public static void close(ResultSet resultSet, PreparedStatement statement, Connection connection) throws SQLException {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
}
5.AddMessageServletV2.java:
import com.mysql.jdbc.Connection;
import lombok.SneakyThrows;
import utils.DBUtils;
import utils.StringUtils;
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.PreparedStatement;
@WebServlet("/message/add2")
public class AddMessageServletV2 extends HttpServlet {
@SneakyThrows
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int result = -1;
// 1.得到前端参数并效验
String from = req.getParameter("from");
String to = req.getParameter("to");
String msg = req.getParameter("msg");
if (StringUtils.hasLength(from) && StringUtils.hasLength(to)
&& StringUtils.hasLength(msg)) {
// 2.将表白对象加入到集合
// 2.1 得到 Connection
Connection connection = DBUtils.getConnection();
// 2.2 拼接 sql,创建执行器
String sql = "insert into messages(`from`,`to`,`message`) values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, from);
statement.setString(2, to);
statement.setString(3, msg);
// 2.3 执行执行器,并返回结果
result = statement.executeUpdate();
// 2.4 关闭资源
DBUtils.close(null, statement, connection);
}
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().println(result);
}
}
6.MessageListServletV2.java:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mysql.jdbc.Connection;
import lombok.SneakyThrows;
import utils.DBUtils;
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.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/message/list2")
public class MessageListServletV2 extends HttpServlet {
@SneakyThrows
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//查询数据库中的表白列表
List list=new ArrayList<>();
//1.得到connection
Connection connection= DBUtils.getConnection();
//2.拼接sql,创建执行器
String sql="select * from messages";
PreparedStatement statement=connection.prepareStatement(sql);
//3.执行sql,返回resultSet并循环将数据添加到List
ResultSet resultSet=statement.executeQuery();
while(resultSet.next ()){
String from=resultSet.getString("from");
String to=resultSet.getString("to");
String message=resultSet.getString("message");
list.add(new Message(from,to,message));
}
//4.关闭资源
DBUtils.close(resultSet,statement,connection);
resp.setContentType("application/json;charset=utf-8");
ObjectMapper objectMapper=new ObjectMapper();
resp.getWriter().println(objectMapper.writeValueAsString(list));
}
}
7.运行结果:
添加表白信息:
添加信息失败:
表白信息列表:
8.数据库里查询信息:



