表白墙(服务器)

这篇具有很好参考价值的文章主要介绍了表白墙(服务器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

0.需求

1.创建Maven项目

2.给pom.xml内引入三个依赖

3.完善目录,并补充web.xml中的内容

4.编写代码

后端代码

​编辑前端代码

5.引入数据库

创建message表

创建工具类 

往MessageServlet类中添加方法

0.需求

表白墙(服务器),JavaEE,web,服务器,运维

前面写好了表白墙页面,但存在问题:

1.刷新/重开页面,之前输入的数据会消失

2.只能在本机输入和看见,其他机器看不见

解决思路:让服务器存储用户提交的数据,由服务器保存。有新的浏览器打开页面的时候,从服务器获取数据(服务器存档和读档)

前后端交互:

1.点击提交,浏览器把表白信息发到服务器

表白墙(服务器),JavaEE,web,服务器,运维

2.页面加载,浏览器从服务器获取到表白信息

表白墙(服务器),JavaEE,web,服务器,运维

存档和读档:

存档:每次点击提交按钮,触发一次存档操作,把用户输入的内容存储到服务器(存一条)

读档:每次加载页面/刷新页面,触发一次读档操作,把之前服务器上存储的所有记录展示到当前页面中(读所有)

1.创建Maven项目

2.给pom.xml内引入三个依赖

表白墙(服务器),JavaEE,web,服务器,运维

<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>


    </dependencies>

3.完善目录,并补充web.xml中的内容

表白墙(服务器),JavaEE,web,服务器,运维

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

4.编写代码

读取的数据和响应的数据都是json格式,对应着:

objectMapper.readValue和objectMapper.writeValue方法完成转换

Post方法把message存到List中,Get方法把L响应到服务器中。

objectMapper.readValue把Json格式的message转换成Java对象,objectMapper.writeValue把List中的Java对象转换成Json格式的字符串。

这是一个演示json的转换的代码

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

class Student{
    public int classId;
    public int studentId;
}
//对Json的使用的举例
public class TestJackson {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper=new ObjectMapper();
        //readValue是把Jackson对象转换成Java对象
        String s="{\"classId\":10,\"studentId\":20}";
        //readValue的第一个参数可以直接填一个String,也可以写InputStream
        Student student=objectMapper.readValue(s,Student.class);
        System.out.println(student.studentId);
        System.out.println(student.classId);

        System.out.println();

        //writeValue/writeValueAsString是把Java对象转换成json字符串
        Student student1 = new Student();
        student1.classId=10;
        student1.studentId=20;
        String s1=objectMapper.writeValueAsString(student1);
        System.out.println(s1);
    }
}

表白墙(服务器),JavaEE,web,服务器,运维

后端代码

在表白墙后端中所对应的代码:

表白墙(服务器),JavaEE,web,服务器,运维

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.ArrayList;
import java.util.List;

class Message{
    public String from;
    public String to;
    public String message;
}

@WebServlet("/message")
public class MessageServlet extends HttpServlet {
    //使用list变量保存所有消息
    private List<Message> messageList=new ArrayList<>();
    private ObjectMapper objectMapper=new ObjectMapper();

    //向服务器提交数据
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //把body里的内容解析出来,成为一个message对象
        Message message=objectMapper.readValue(req.getInputStream(),Message.class);
        //保存
        messageList.add(message);
        //状态码可以省略,默认是200
        resp.setStatus(200);
    }
    //从服务器获取数据
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //告诉浏览器,数据是json格式,字符集是utf8
        resp.setContentType("application/json;charset=utf8");
        //把Java对象转成json字符串和把字符串写到响应对象中
        objectMapper.writeValue(resp.getWriter(),messageList);
    }
}

用postman进行post和get进行操作查看上述代码实现:

前端代码

Post是点击提交按钮的时候发起的,Get是页面加载的时候发起的。

对之前写好的前端页面代码进行补充

1.引入jQuery

表白墙(服务器),JavaEE,web,服务器,运维

2.对提交按钮中添加:给服务器发起post请求,把上述数据提交到服务器

通过Ajax构造:

表白墙(服务器),JavaEE,web,服务器,运维

上述存档流程:

表白墙(服务器),JavaEE,web,服务器,运维

读档

让浏览器ajax发送get请求

表白墙(服务器),JavaEE,web,服务器,运维

读档前后端交互过程

表白墙(服务器),JavaEE,web,服务器,运维

当前数据是在内存中保存的,重启服务器就没有了,要想持久化保存,就要写入到文件中(硬盘)

1.直接使用流对象写入文本文件

2.借助数据库

创建数据表

此处只有一个表 message(from,to,message)

5.引入数据库

创建message表

在MySQL中创建表message(from,to,message)

在创建时,由于from和to是MySQL中的关键字,需要加上反引号 (`)(键盘上Tab键上方)

表白墙(服务器),JavaEE,web,服务器,运维

创建工具类 

对数据库连接和关闭资源的工具类

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;

//通过这个类把数据库连接过程封装
//把这个类作为一个工具类,提供static方法供其他代码调用
public class DBUtil {
    //静态成员跟随类对象,类对象在整个进程中只有一份
    //静态成员也相当于唯一的实例(单例模式,饿汉模式)
    private static DataSource dataSource =new MysqlDataSource();

    static {
        //使用静态代码块,针对dataSource进行初始化操作
        ((MysqlDataSource)dataSource).setUrl("jdbc://127.0.0.1:3306/java106?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("318318");
    }
    //通过这个方法来建立连接
    public static Connection getConnection() throws SQLException {
      return dataSource.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();
            }
        }
    }
}

往MessageServlet类中添加方法

save():往数据库中存一条消息

load():从数据库获取所有消息

 //往数据库中存一条消息
    private void save(Message message){
        //JDBC操作
        Connection connection=null;
        PreparedStatement statement= null;
        //1.建立连接
        try {

            //2.构造SQL语句
            String sql="insert into message values(?,?,?)";

            statement.setString(1,message.from);
            statement.setString(2,message.to);
            statement.setString(3,message.message);
            //3.执行sql
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //4.关闭连接
            DBUtil.close(connection,statement,null);
        }
    }

    //从数据库获取所有消息
    private List<Message> load(){
        List<Message> messageList=new ArrayList<>();
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
       try {
           //1.和数据库建立连接
           connection=DBUtil.getConnection();
           //2.构造SQL
           String sql="select * from message";
           statement= connection.prepareStatement(sql);
           //3.执行sql
           resultSet=statement.executeQuery();
           //4.遍历结果集合
           while(resultSet.next()){
               Message message=new Message();
               message.from=resultSet.getNString("from");
               message.to= resultSet.getNString("to");
               message.message=resultSet.getNString("message");
               messageList.add(message);
           }
           return messageList;
       }catch (SQLException e){
          e.printStackTrace();
       }finally {
           //5.释放资源,断开连接
           DBUtil.close(connection,statement,resultSet);
       }
       return messageList;
    }
}

此时在页面输入的数据将会保存在数据库中。文章来源地址https://www.toymoban.com/news/detail-740343.html

到了这里,关于表白墙(服务器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaEE-部署项目到服务器

    本部分内容为:安装依赖:JDK,Tomcat,Mysql;部署项目到服务器 什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。 为什么我们需要用到Tomcat 如果你学过html,css,你会知道你写的页面只能自己访问,别人不能远程

    2024年02月05日
    浏览(39)
  • 【JavaEE初阶】 TCP服务器与客户端的搭建

    TCP服务器与客户端的搭建需要借助以下API TCP之间通信通过流进行传输,无论是服务器还是客户端:读取内容用输入流,写入内容用输出流 ServerSocket 是创建TCP服务端Socket的API。 ServerSocket 构造方法 : 方法签名 方法说明 ServerSocket(int port) 创建一个服务端流套接字Socket,并绑定

    2024年02月05日
    浏览(41)
  • 运维:硬件服务器BMC介绍

    BMC(Baseboard Management Controller)是硬件服务器上的一个专用子系统,它允许管理员通过独立于主操作系统、CPU和主内存的远程管理工具来监视和管理服务器的硬件状态。这种接口通常用于远程监控和管理服务器,特别是在数据中心和大规模服务器部署环境中。 BMC接口规格: 接

    2024年04月12日
    浏览(51)
  • JavaEE & UDP简易翻译服务器 & 网络编程示例2 & TCP回显服务器,回显客户端

    禁止白嫖 T T 点点赞呗 这个翻译器主要是在上一章的回显服务器和回显客户端上进行修改 修改了计算响应的过程, 即process方法 1.1 重写方法 重写方法是Java中的一种重要手段 指在一个类的子类里,对父类的一个方法进行重新定义! 而父类的权限级别要大于等于子类~ 【除了

    2023年04月16日
    浏览(56)
  • JavaEE & UDP简易翻译服务器 & 网络编程示例2 & CTP回显服务器,回显客户端

    禁止白嫖 T T 点点赞呗 这个翻译器主要是在上一章的回显服务器和回显客户端上进行修改 修改了计算响应的过程, 即process方法 1.1 重写方法 重写方法是Java中的一种重要手段 指在一个类的子类里,对父类的一个方法进行重新定义! 而父类的权限级别要大于等于子类~ 【除了

    2023年04月16日
    浏览(52)
  • 运维——ssh无法登录云服务器

    一般来讲,无法登录ssh的原因挺多,如果无法登录云服务器,则除了要检查ssh端口是否放行,防火墙状态外,还需要检查云服务器web控制台入站规则是否开放了对应端口。如果你前面检查都是正常,那么还需要注意云服务器运营商。某些奇葩的运营商,例如TY云,限定了80,

    2024年02月01日
    浏览(63)
  • 运维 | 查看 Linux 服务器 IP 地址

    大多数在操作 Linux 系统时,我们经常需要知道服务器的 IP 比便于后续的一系列操作,这时候有快速查看主机 IP 的命令行操作,能够有效的帮助我们 本章节主要记录一些常用查看服务器 IP 的命令,希望对大家有所帮助。 查看 Linux 服务器的 IP 地址的命令大体上有以下几种。

    2024年04月27日
    浏览(76)
  • 运维:mysql常用的服务器状态命令

    目录 1、查询当前服务器运行的进程 2、查询最大链接数 3、查询当前链接数 4、展示当前正在执行的sql语句 5、查询当前MySQL当中记录的慢查询条数 6、展示Mysql服务器从启动到现在持续运行的时间 7、查询数据库存储占用情况 8、查询服务器启动以来的执行查询的总次数 9、查询

    2024年02月08日
    浏览(49)
  • 运维记录 会产生无用日志的服务器

    创建linux定时任务 crontab -e cron表达式 文件名.sh 查看linux定时任务 crontab -l 确认创建完成后重启cron service crond restart

    2024年04月11日
    浏览(44)
  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包