国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

表白墻(服務(wù)器)

這篇具有很好參考價(jià)值的文章主要介紹了表白墻(服務(wù)器)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

0.需求

1.創(chuàng)建Maven項(xiàng)目

2.給pom.xml內(nèi)引入三個(gè)依賴

3.完善目錄,并補(bǔ)充web.xml中的內(nèi)容

4.編寫代碼

后端代碼

?編輯前端代碼

5.引入數(shù)據(jù)庫

創(chuàng)建message表

創(chuàng)建工具類?

往MessageServlet類中添加方法

0.需求

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

前面寫好了表白墻頁面,但存在問題:

1.刷新/重開頁面,之前輸入的數(shù)據(jù)會(huì)消失

2.只能在本機(jī)輸入和看見,其他機(jī)器看不見

解決思路:讓服務(wù)器存儲(chǔ)用戶提交的數(shù)據(jù),由服務(wù)器保存。有新的瀏覽器打開頁面的時(shí)候,從服務(wù)器獲取數(shù)據(jù)(服務(wù)器存檔和讀檔)

前后端交互:

1.點(diǎn)擊提交,瀏覽器把表白信息發(fā)到服務(wù)器

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

2.頁面加載,瀏覽器從服務(wù)器獲取到表白信息

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

存檔和讀檔:

存檔:每次點(diǎn)擊提交按鈕,觸發(fā)一次存檔操作,把用戶輸入的內(nèi)容存儲(chǔ)到服務(wù)器(存一條)

讀檔:每次加載頁面/刷新頁面,觸發(fā)一次讀檔操作,把之前服務(wù)器上存儲(chǔ)的所有記錄展示到當(dāng)前頁面中(讀所有)

1.創(chuàng)建Maven項(xiàng)目

2.給pom.xml內(nèi)引入三個(gè)依賴

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

<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.完善目錄,并補(bǔ)充web.xml中的內(nèi)容

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

<!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.編寫代碼

讀取的數(shù)據(jù)和響應(yīng)的數(shù)據(jù)都是json格式,對(duì)應(yīng)著:

objectMapper.readValue和objectMapper.writeValue方法完成轉(zhuǎn)換

Post方法把message存到List中,Get方法把L響應(yīng)到服務(wù)器中。

objectMapper.readValue把Json格式的message轉(zhuǎn)換成Java對(duì)象,objectMapper.writeValue把List中的Java對(duì)象轉(zhuǎn)換成Json格式的字符串。

這是一個(gè)演示json的轉(zhuǎn)換的代碼

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

class Student{
    public int classId;
    public int studentId;
}
//對(duì)Json的使用的舉例
public class TestJackson {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper=new ObjectMapper();
        //readValue是把Jackson對(duì)象轉(zhuǎn)換成Java對(duì)象
        String s="{\"classId\":10,\"studentId\":20}";
        //readValue的第一個(gè)參數(shù)可以直接填一個(gè)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對(duì)象轉(zhuǎn)換成json字符串
        Student student1 = new Student();
        student1.classId=10;
        student1.studentId=20;
        String s1=objectMapper.writeValueAsString(student1);
        System.out.println(s1);
    }
}

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

后端代碼

在表白墻后端中所對(duì)應(yīng)的代碼:

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

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();

    //向服務(wù)器提交數(shù)據(jù)
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //把body里的內(nèi)容解析出來,成為一個(gè)message對(duì)象
        Message message=objectMapper.readValue(req.getInputStream(),Message.class);
        //保存
        messageList.add(message);
        //狀態(tài)碼可以省略,默認(rèn)是200
        resp.setStatus(200);
    }
    //從服務(wù)器獲取數(shù)據(jù)
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //告訴瀏覽器,數(shù)據(jù)是json格式,字符集是utf8
        resp.setContentType("application/json;charset=utf8");
        //把Java對(duì)象轉(zhuǎn)成json字符串和把字符串寫到響應(yīng)對(duì)象中
        objectMapper.writeValue(resp.getWriter(),messageList);
    }
}

用postman進(jìn)行post和get進(jìn)行操作查看上述代碼實(shí)現(xiàn):

前端代碼

Post是點(diǎn)擊提交按鈕的時(shí)候發(fā)起的,Get是頁面加載的時(shí)候發(fā)起的。

對(duì)之前寫好的前端頁面代碼進(jìn)行補(bǔ)充

1.引入jQuery

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

2.對(duì)提交按鈕中添加:給服務(wù)器發(fā)起post請(qǐng)求,把上述數(shù)據(jù)提交到服務(wù)器

通過Ajax構(gòu)造:

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

上述存檔流程:

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

讀檔

讓瀏覽器ajax發(fā)送get請(qǐng)求

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

讀檔前后端交互過程

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

當(dāng)前數(shù)據(jù)是在內(nèi)存中保存的,重啟服務(wù)器就沒有了,要想持久化保存,就要寫入到文件中(硬盤)

1.直接使用流對(duì)象寫入文本文件

2.借助數(shù)據(jù)庫

創(chuàng)建數(shù)據(jù)表

此處只有一個(gè)表 message(from,to,message)

5.引入數(shù)據(jù)庫

創(chuàng)建message表

在MySQL中創(chuàng)建表message(from,to,message)

在創(chuàng)建時(shí),由于from和to是MySQL中的關(guān)鍵字,需要加上反引號(hào) (`)(鍵盤上Tab鍵上方)

表白墻(服務(wù)器),JavaEE,web,服務(wù)器,運(yùn)維

創(chuàng)建工具類?

對(duì)數(shù)據(jù)庫連接和關(guān)閉資源的工具類

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;

//通過這個(gè)類把數(shù)據(jù)庫連接過程封裝
//把這個(gè)類作為一個(gè)工具類,提供static方法供其他代碼調(diào)用
public class DBUtil {
    //靜態(tài)成員跟隨類對(duì)象,類對(duì)象在整個(gè)進(jìn)程中只有一份
    //靜態(tài)成員也相當(dāng)于唯一的實(shí)例(單例模式,餓漢模式)
    private static DataSource dataSource =new MysqlDataSource();

    static {
        //使用靜態(tài)代碼塊,針對(duì)dataSource進(jìn)行初始化操作
        ((MysqlDataSource)dataSource).setUrl("jdbc://127.0.0.1:3306/java106?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("318318");
    }
    //通過這個(gè)方法來建立連接
    public static Connection getConnection() throws SQLException {
      return dataSource.getConnection();
    }
    //通過這個(gè)方法斷開連接,釋放資源
    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():往數(shù)據(jù)庫中存一條消息

load():從數(shù)據(jù)庫獲取所有消息

 //往數(shù)據(jù)庫中存一條消息
    private void save(Message message){
        //JDBC操作
        Connection connection=null;
        PreparedStatement statement= null;
        //1.建立連接
        try {

            //2.構(gòu)造SQL語句
            String sql="insert into message values(?,?,?)";

            statement.setString(1,message.from);
            statement.setString(2,message.to);
            statement.setString(3,message.message);
            //3.執(zhí)行sql
            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //4.關(guān)閉連接
            DBUtil.close(connection,statement,null);
        }
    }

    //從數(shù)據(jù)庫獲取所有消息
    private List<Message> load(){
        List<Message> messageList=new ArrayList<>();
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
       try {
           //1.和數(shù)據(jù)庫建立連接
           connection=DBUtil.getConnection();
           //2.構(gòu)造SQL
           String sql="select * from message";
           statement= connection.prepareStatement(sql);
           //3.執(zhí)行sql
           resultSet=statement.executeQuery();
           //4.遍歷結(jié)果集合
           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;
    }
}

此時(shí)在頁面輸入的數(shù)據(jù)將會(huì)保存在數(shù)據(jù)庫中。文章來源地址http://www.zghlxwxcb.cn/news/detail-740343.html

到了這里,關(guān)于表白墻(服務(wù)器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaEE-部署項(xiàng)目到服務(wù)器

    JavaEE-部署項(xiàng)目到服務(wù)器

    本部分內(nèi)容為:安裝依賴:JDK,Tomcat,Mysql;部署項(xiàng)目到服務(wù)器 什么是Tomcat Tomcat簡(jiǎn)單的說就是一個(gè)運(yùn)行JAVA的網(wǎng)絡(luò)服務(wù)器,底層是Socket的一個(gè)程序,它也是JSP和Serlvet的一個(gè)容器。 為什么我們需要用到Tomcat 如果你學(xué)過html,css,你會(huì)知道你寫的頁面只能自己訪問,別人不能遠(yuǎn)程

    2024年02月05日
    瀏覽(15)
  • 【JavaEE初階】 TCP服務(wù)器與客戶端的搭建

    【JavaEE初階】 TCP服務(wù)器與客戶端的搭建

    TCP服務(wù)器與客戶端的搭建需要借助以下API TCP之間通信通過流進(jìn)行傳輸,無論是服務(wù)器還是客戶端:讀取內(nèi)容用輸入流,寫入內(nèi)容用輸出流 ServerSocket 是創(chuàng)建TCP服務(wù)端Socket的API。 ServerSocket 構(gòu)造方法 : 方法簽名 方法說明 ServerSocket(int port) 創(chuàng)建一個(gè)服務(wù)端流套接字Socket,并綁定

    2024年02月05日
    瀏覽(22)
  • 運(yùn)維:硬件服務(wù)器BMC介紹

    BMC(Baseboard Management Controller)是硬件服務(wù)器上的一個(gè)專用子系統(tǒng),它允許管理員通過獨(dú)立于主操作系統(tǒng)、CPU和主內(nèi)存的遠(yuǎn)程管理工具來監(jiān)視和管理服務(wù)器的硬件狀態(tài)。這種接口通常用于遠(yuǎn)程監(jiān)控和管理服務(wù)器,特別是在數(shù)據(jù)中心和大規(guī)模服務(wù)器部署環(huán)境中。 BMC接口規(guī)格: 接

    2024年04月12日
    瀏覽(26)
  • JavaEE & UDP簡(jiǎn)易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & CTP回顯服務(wù)器,回顯客戶端

    JavaEE & UDP簡(jiǎn)易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & CTP回顯服務(wù)器,回顯客戶端

    禁止白嫖 T T 點(diǎn)點(diǎn)贊唄 這個(gè)翻譯器主要是在上一章的回顯服務(wù)器和回顯客戶端上進(jìn)行修改 修改了計(jì)算響應(yīng)的過程, 即process方法 1.1 重寫方法 重寫方法是Java中的一種重要手段 指在一個(gè)類的子類里,對(duì)父類的一個(gè)方法進(jìn)行重新定義! 而父類的權(quán)限級(jí)別要大于等于子類~ 【除了

    2023年04月16日
    瀏覽(47)
  • JavaEE & UDP簡(jiǎn)易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & TCP回顯服務(wù)器,回顯客戶端

    JavaEE & UDP簡(jiǎn)易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & TCP回顯服務(wù)器,回顯客戶端

    禁止白嫖 T T 點(diǎn)點(diǎn)贊唄 這個(gè)翻譯器主要是在上一章的回顯服務(wù)器和回顯客戶端上進(jìn)行修改 修改了計(jì)算響應(yīng)的過程, 即process方法 1.1 重寫方法 重寫方法是Java中的一種重要手段 指在一個(gè)類的子類里,對(duì)父類的一個(gè)方法進(jìn)行重新定義! 而父類的權(quán)限級(jí)別要大于等于子類~ 【除了

    2023年04月16日
    瀏覽(20)
  • 運(yùn)維——ssh無法登錄云服務(wù)器

    運(yùn)維——ssh無法登錄云服務(wù)器

    一般來講,無法登錄ssh的原因挺多,如果無法登錄云服務(wù)器,則除了要檢查ssh端口是否放行,防火墻狀態(tài)外,還需要檢查云服務(wù)器web控制臺(tái)入站規(guī)則是否開放了對(duì)應(yīng)端口。如果你前面檢查都是正常,那么還需要注意云服務(wù)器運(yùn)營商。某些奇葩的運(yùn)營商,例如TY云,限定了80,

    2024年02月01日
    瀏覽(19)
  • 運(yùn)維:mysql常用的服務(wù)器狀態(tài)命令

    運(yùn)維:mysql常用的服務(wù)器狀態(tài)命令

    目錄 1、查詢當(dāng)前服務(wù)器運(yùn)行的進(jìn)程 2、查詢最大鏈接數(shù) 3、查詢當(dāng)前鏈接數(shù) 4、展示當(dāng)前正在執(zhí)行的sql語句 5、查詢當(dāng)前MySQL當(dāng)中記錄的慢查詢條數(shù) 6、展示Mysql服務(wù)器從啟動(dòng)到現(xiàn)在持續(xù)運(yùn)行的時(shí)間 7、查詢數(shù)據(jù)庫存儲(chǔ)占用情況 8、查詢服務(wù)器啟動(dòng)以來的執(zhí)行查詢的總次數(shù) 9、查詢

    2024年02月08日
    瀏覽(34)
  • 運(yùn)維 | 查看 Linux 服務(wù)器 IP 地址

    大多數(shù)在操作 Linux 系統(tǒng)時(shí),我們經(jīng)常需要知道服務(wù)器的 IP 比便于后續(xù)的一系列操作,這時(shí)候有快速查看主機(jī) IP 的命令行操作,能夠有效的幫助我們 本章節(jié)主要記錄一些常用查看服務(wù)器 IP 的命令,希望對(duì)大家有所幫助。 查看 Linux 服務(wù)器的 IP 地址的命令大體上有以下幾種。

    2024年04月27日
    瀏覽(104)
  • 運(yùn)維記錄 會(huì)產(chǎn)生無用日志的服務(wù)器

    創(chuàng)建linux定時(shí)任務(wù) crontab -e cron表達(dá)式 文件名.sh 查看linux定時(shí)任務(wù) crontab -l 確認(rèn)創(chuàng)建完成后重啟cron service crond restart

    2024年04月11日
    瀏覽(18)
  • shell腳本——服務(wù)器巡檢(自動(dòng)化運(yùn)維)

    ?目的? ?自動(dòng) 獲取集群內(nèi) 多個(gè)主機(jī) 的內(nèi)存、磁盤、cpu等信息 生成日志 ?準(zhǔn)備? ? VMware虛擬主機(jī)IP在同一個(gè)網(wǎng)段(互相能ping通) ? ? ? ? ? ? 虛擬主機(jī)都有公鑰免登錄 ???????????修改主機(jī)IP? vi/etc/sysconfig/netwoek-scripts/ifcfg-ens160 ? ? ? ? ? ?設(shè)置主機(jī)名?hostnamectl set-ho

    2024年02月15日
    瀏覽(40)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包