??預期結果
可以發(fā)布并顯示
顯示后實現輸入框的清除
并且再次刷新后,不會清除下面的緩存
??前端代碼
這里由于博主主要從事后端相關工作,這里就不做過多講解了
相關知識點可以參考博主寫的【JavaEE初階】 JavaScript相應的WebAPI中表白墻的書寫
如果有看不懂的地方也可以找博主,博主也略知一二。代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>留言板</title>
<style>
.container {
width: 350px;
height: 300px;
margin: 0 auto;
/* border: 1px black solid; */
text-align: center;
}
.grey {
color: grey;
}
.container .row {
width: 350px;
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
}
.container .row input {
width: 260px;
height: 30px;
}
#submit {
width: 350px;
height: 40px;
background-color: orange;
color: white;
border: none;
margin: 10px;
border-radius: 5px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="container">
<h1>留言板</h1>
<p class="grey">輸入后點擊提交, 會將信息顯示下方空白處</p>
<div class="row">
<span>誰:</span> <input type="text" name="" id="from">
</div>
<div class="row">
<span>對誰:</span> <input type="text" name="" id="to">
</div>
<div class="row">
<span>說什么:</span> <input type="text" name="" id="say">
</div>
<input type="button" value="提交" id="submit" onclick="submit()">
<!-- <div>A 對 B 說: hello</div> -->
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
load();
function load() {
$.ajax({
type: "get",
url: "/message/getList",
success: function (result) {
for (var message of result) {
var divE = "<div>" + message.from + "對" + message.to + "說:" + message.message;
$(".container").append(divE);
}
}
});
}
function submit() {
//1. 獲取留?的內容
var from = $('#from').val();
var to = $('#to').val();
var say = $('#say').val();
if (from == '' || to == '' || say == '') {
return;
}
$.ajax({
type: "post",
url: "/message/publish",
data: {
from: from,
to: to,
message: say
},
success: function (result) {
if (result) {
//2. 構造節(jié)點
var divE = "<div>" + from + "對" + to + "說:" + say + "</div>";
//3. 把節(jié)點添加到??上
$(".container").append(divE);
//4. 清空輸?框的值
$('#from').val("");
$('#to').val("");
$('#say').val("");
} else {
alert("發(fā)表留?失敗!");
}
}
});
}
</script>
</body>
</html>
??約定前后端交互接?
??需求分析
后端需要提供兩個服務
-
提交留?:??輸?留?信息之后,后端需要把留?信息保存起來
-
展?留?:??展?時,需要從后端獲取到所有的留?信息
??接?定義
- 獲取全部留?
全部留?信息,我們?List來表?,可以?JSON來描述這個List數據.
請求:
GET /message/getLis
響應:JSON格式
[
{
"from": "?貓",
"to": "?貓",
"message": "喵"
},{
"from": "?狗",
"to": "?狗",
"message": "汪"
},
//...
]
瀏覽器給服務器發(fā)送?個GET /message/getList 這樣的請求,就能返回當前?共有哪些留?記錄.結果以 json 的格式返回過來
- 發(fā)表新留?
請求:body也為JSON格式
POST /message/publish
{
"from": "?貓",
"to": "?貓",
"message": "喵"
}
響應格式:JSON格式
true
??實現服務器端代碼
??lombok
這個環(huán)節(jié)為大家推薦一個工具lombok,它的出現會使我們開發(fā)起來更加簡單便捷
Lombok是?個Java?具庫,通過添加注解的?式,簡化Java的開發(fā)
首先我們需要在我們的pom.xml文件下面添加以下依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
那它有什么作用呢?又怎么使用呢?
比如以下代碼
public class Person {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
我們在獲取屬性時要用大量的get和set,看起來非常的不好看。而當我們使用了lombok后,代碼如下;
@Data
public class Person {
private int id;
private String name;
private String password;
}
這樣也可以達到相同的效果,不僅如此@Data 注解還會幫助我們?動?些?法,包含getter/setter,equals,toString等
如果覺得這樣使用太粗暴了,lombok也提供了一些細化的方法
注解 | 作? |
---|---|
@Getter | ?動添加 getter ?法 |
@Setter | ?動添加 setter ?法 |
@ToString | ?動添加 toString ?法 |
@EqualsAndHashCode | ?動添加 equals 和 hashCode ?法 |
@NoArgsConstructor | ?動添加?參構造?法 |
@AllArgsConstructor | ?動添加全屬性構造?法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為null |
@RequiredArgsConstructor | ?動添加必需屬性的構造?法,final+@NonNull的屬性為必需 |
它們之間的關系可以理解為:
@Data=@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor
但是呢,每一次都需要引入依賴,太麻煩了,所以我們可以下載相關的插件EditStarter,安裝過程與使用如下:
- 安裝插件EditStarter,重啟Idea
- 在pom.xml?件中,單擊右鍵,選擇Generate,操作如下圖所?
進?Edit Starters的編輯界?,添加對應依賴即可.
??服務器代碼實現
第一步:定義留?對象MessageInfo類
@Data
public class MessageInfo {
private String from;
private String to;
private String message;
}
第二步:創(chuàng)建MessageController類
這里我們使?List來存儲留?板信息
@RequestMapping("/message")
@RestController
public class MessageController {
private List<MessageInfo> messageInfos = new ArrayList<>();
@RequestMapping("/getList")
public List<MessageInfo> getList() {
System.out.println("===============");
return messageInfos;
}
@RequestMapping("/publish")
public boolean publish(MessageInfo messageInfo) {
System.out.println(messageInfo);
if (StringUtils.hasLength(messageInfo.getFrom())
&& StringUtils.hasLength(messageInfo.getTo())
&& StringUtils.hasLength(messageInfo.getMessage())) {
messageInfos.add(messageInfo);
return true;
}
return false;
}
}
??運?測試
此時在瀏覽器通過URL http://127.0.0.1:8080/messagewall.html 訪問服務器,即可看到
因為此時我們每次提交的數據都會發(fā)送給服務器.每次打開??的時候??都會從服務器加載數據.因此及時關閉??,數據也不會丟失
但是數據此時是存儲在服務器的內存中( private List< Message > messages = newArrayList< Message >(); ),?旦服務器重啟,數據仍然會丟失.要想數據不丟失,可以把數據存儲在數據庫中文章來源:http://www.zghlxwxcb.cn/news/detail-804416.html
?總結
關于《【JavaEEj進階】 Spring實現留言板》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-804416.html
到了這里,關于【JavaEEj進階】 Spring實現留言板的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!