Ajax+SpringMvc前後端分離
前言:
傳統的,我們在訪問頁面時,我們會將填充完資料的html頁面返回給瀏覽器去解析。從而看到包含業務資料的網頁。如jsp會在頁面檔案中新增Java程式碼來渲染頁面。用EL表示式來輸出model的業務內容。
這種方式在一定程度上做了前後端的分離。但並不能完全的分離。前端設計師需要懂點Java基礎程式設計或者EL表示式。或者後端程式設計師需要懂一些前端頁面的html知識,css知識,甚至要再會一些JavaScript。
這種設計大致是這樣的:
jsp頁面hello.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %> <%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script src="../../js/jquery-3.3.1.min.js" type="text/javascript"></script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>啦啦啦啦啦</title> <script type="text/javascript"> $(function(){ $("p").click(function(){ $(this).hide(); }); $("tr").click(function(){ $(this).hide(); }); }); </script> </head> <body> <table> <thead> <tr> <th>序列</th> <th>名稱</th> <th>id</th> </tr> </thead> <%-- hello,I'm helloJsp2. ${users[4].userName} --%> <s:forEach items="${users}" var="item" varStatus="status"> <tr > <td>${status.count}</td> <td class="center"><span class="center">${item.userName}</span></td> <td>${item.userId}</td> </tr> </s:forEach> </table> <p >再見.</p> <% %> </body> </html>
hello.java:
package xyz.jangle.action; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import xyz.jangle.model.User; import xyz.jangle.service.UserService; @Controller @RequestMapping("/mvc") public class Hello { // 養成一種習慣,將專案的控制層物件,對應的檢視,檢視所用的js檔案,三個名稱進行統一。用Ctrl+R查詢時可以很方便地找到他們 @Autowired private UserService userService; @RequestMapping("/hello") public ModelAndView hello() { System.out.println("全都一起上吧,我根本沒在怕,啦蠟辣拉拉"); List<User> users = userService.getAllUser(); ModelAndView mav = new ModelAndView("hello"); // 引數為試圖名稱 viewName mav.addObject("users", users); // 新增model用於EL表示式輸出值 return mav; } }
我們訪問http://127.0.0.1/mvc/hello。 用通俗非專業的口吻來說: 該請求由後端邏輯Hello.java處理之後,返回給檢視hello.jsp,檢視jsp結合model的內容解析渲染(EL表示式輸出)最終的html頁面返回給瀏覽器。 這種方式我們在開啟頁面的時候頁面會有短暫的空白與等待(業務邏輯越複雜,資料越多就越慢)
正題:
下面介紹下Ajax獲取業務資料再渲染頁面的前後端分離的設計,其核心思想是:當請求時,直接返回使用者想要的頁面資源,再由瀏覽器傳送Ajax請求從伺服器獲取業務資料,再次渲染頁面進行資料展示。這裡將會有兩次的http請求。一次取頁面,一次取資料。
一般我們的Ajax請求返回JSON資料或者xml資料,前端設計師需掌握這兩種資料格式,就可以很好的設計產品所預期達到的頁面效果。
大致的設計如:helloAjax.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="../../js/jquery-3.3.1.min.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax獲取資料渲染</title>
<script type="text/javascript">
$(function(){
$.ajax({
url:'/hello/helloData',
type:"post",
dataType:"json",
success : function(data) {
$.each(data.users, function(index, item){
$("table").append("<tr>"
+"<td>"+index+"</td>"
+"<td>"+item.userName+"</td>"
+"<td>"+item.userId+"</td>"
+"</tr>");
});
},
error :function(data){
alert("失敗!");
}
});
});
</script>
</head>
<body>
<table>
<thead>
<tr>
<th>序列</th>
<th>名稱</th>
<th>id</th>
</tr>
</thead>
</table>
</body>
</html>
HelloAjax.java:
package xyz.jangle.action;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import xyz.jangle.model.User;
import xyz.jangle.service.UserService;
/**
* @author huhj
* @email [email protected]
* @time 2018年7月6日 上午10:27:20
*/
@Controller
@RequestMapping("/hello")
public class HelloAjax {
@Autowired
private UserService userService;
@RequestMapping("/helloAjax")
public ModelAndView hello(){
ModelAndView mav = new ModelAndView("helloAjax"); //引數為試圖名稱 viewName
return mav;
}
@RequestMapping("/helloData")
@ResponseBody
public Map<String, Object> helloData(){
Map<String,Object> map = new HashMap<String,Object>();
List<User> users = userService.getAllUser();
map.put("users",users);
return map;
}
}
一個方法用於返回頁面,一個方法用於返回資料。http://127.0.0.1/hello/helloAjax
總結:兩種方式展示的頁面是一樣的,內容也是一致的。但是在開發與分工上還是會有一些差別。所需掌握的技術也會有所偏差。
注:ajax請求時,SpringMvc會有一個預設的解析器(jackson)將各種資料型別轉化為JSON等ajax請求時(dataType)要求的資料格式。
相關推薦
Ajax+SpringMvc前後端分離
前言: 傳統的,我們在訪問頁面時,我們會將填充完資料的html頁面返回給瀏覽器去解析。從而看到包含業務資料的網頁。如jsp會在頁面檔案中新增Java程式碼來渲染頁面。用EL表示式來輸出model的業務內容。 這種方式在一定程度上做了前後端的分離。但並不能
springMVC前後端分離開發模式下支持跨域請求
xtend pat OS ping ioe exc auth ava request 1、web.xml中添加cors規則支持(請修改包名) <filter> <filter-name>cors</filter-name>
mui與springMVC前後端分離
reload ont 發送數據 nta out 修改 cell header print 這個小dome簡單來說的前後端分離,通過跨域調用接口來顯示數據。 前端用到mui框架,主要來顯示數據。 後端用到Java的springMVC,restful服務來做增刪改查管
springmvc專案的前後端分離使用ajax的坑
出現跨域問題,報錯jquery-3.3.1.min.js:2 Failed to load localhost:8080/userLogin: Cross origin requests are only supported for protocol schemes: http,
前後端分離ajax請求跨域問題
control jsonp ati cli lan win 圖標 mvc框架 技術分享 解決方案一(服務器端): 1.java語言 如果您使用的mvc框架是spring4.2以上的話,[email protected]/* */@CrossOrigin
Maven多模塊,Dubbo分布式服務框架,SpringMVC,前後端分離項目,基礎搭建,搭建過程出
接口實現 url 代碼 blacklist order compiler ply 整合過程 ram 一、Maven多模塊項目的創建 我們需要建立一個多模塊的maven項目,其目錄結構為其中student-api用於暴露接口;student-service用語處理業務
關於.Net Core 前後端分離跨域請求時 ajax並發請求導致部分無法通過驗證解決辦法。
figure mvc control head configure onf light 請求 並發 項目中有這樣一個頁面。頁面加載的時候會同時並發6個ajax請求去後端請求下拉框。 這樣會導致每次都有1~2個“瀏覽器預請求”不通過。 瀏覽器為什麽會自動發送“預請求”?請看以
SSM:Spring+SpringMVC+MyBatis(實現前後端分離)
背景介紹 前段時間開發涉及到了前後端分離思想,本人涉及到開發後端以及資料庫連線處理部分,測試使用postman進行請求,之後對前端請求瞭解了一部分後完成了一個小的頁面,現在分享並記錄下來。 分享 話不多說,maven建立工程在之前的文章中已經存在:maven專案建立。建立好的專案
前後端分離,解決跨域問題及django的csrf跨站請求保護 ajax 跨域 headers JavaScript ajax 跨域請求 +設定headers 實踐
1. 前後端分離解決跨域問題 解決跨域呼叫服務並設定headers 主要的解決方法需要通過伺服器端設定響應頭、正確響應options請求,正確設定 JavaScript端需要設定的headers資訊 方能實現; 關於跨域,前端會先發送OPTIONS請求,進行預檢,檢查後端是否允許前端設定的相應的請求頭,請
Yii2.0 前後端分離 前端ajax呼叫跨域的問題
Yii2.0有自己的一套防止跨域呼叫的機制,網上一搜一大把的解決方式,無非就是: use yii\filters\Cors; public function behaviors() { return ArrayHelper::merge([ [
前後端分離 ajax同域重定向和跨域重定向
前提:前端控制頁面跳轉,後端只提供介面,返回json格式資料,因此前端請求均是ajax請求 同域 伺服器端重定向:response.sendRedirect(url) ajax請求接收到狀態碼:302,同時response header 中增加Location欄位,瀏覽器會自動重定向
在前後端分離的專案中,ajax跨域請求怎樣附帶cookie
在專案的實際開發中,我們總會遇到前後端分離的專案,在這樣的專案中,跨域是第一個要解決的問題,除此之外,儲存使用者資訊也是很重要的,然而,在後臺儲存使用者資訊通常使用的session和cookie結合的方法,而在前端的實際情況中,跨域產生的ajax是無法攜帶cookie資訊的,
前後端分離——使用Ajax跨域請求資料並分頁展示
前後端分離的意思是,前後端只通過 JSON 來交流,元件化、工程化不需要依賴後端去實現: 下面以程式碼來講解使用Ajax跨域請求後端資料並分頁展示在前臺中: 後端程式碼如下: Dao層:資料訪問層,實現對資料表的Select(查詢),Insert(插入),Update(更新),Delete(刪除)等操作
前後端分離,https站點無法通過Ajax訪問http資源(Mixed Content,The page at 'https://xxx.com' was loaded over HTTPS)
目前Web開發,大部分公司都用的是前後端分離模式,即前端專注於前端頁面互動,後端專注於功能實現及提供Web Api介面。 在某次新站點的開發過程中,為了網站的安全性,要求Web站點使用https協議,在部署到QA環境時,發現呼叫介面報如下的錯: 從提示的內容來看,大致可推斷出是因為站點是https協議
從MVC到Ajax再到前後端分離的思考
轉自:從MVC到Ajax再到前後端分離的思考 從MVC到Ajax再到前後端分離的思考 <div class="postBody"> <div id="cnblogs_post_bod
微信授權域名允許子域名,前後端分離nginx做子域名靜態頁面對映,解決nginx跨域以及ajax跨域
因公司需求,前後端需徹底分離,由nginx對映靜態頁面,另外設定節點訪問介面。本來微信授權域是做在介面上的,現在多出h5靜態頁面的域名,網上教程允許子域名授權大多都是配置在授權回撥域名下的頁面多做了一次跳轉,拿到code之後再跳轉到其他域名下的頁面,但是這
vue axios ajax前後端分離專案localhost訪問java springboot後臺無法獲取後臺返回的cookie
訪問後臺時後臺明明設定了cookie,但是前臺卻接收不到, 由於localhost不是有效域名,會被chrome和ie無視掉。 https://cnodejs.org/topic/511f48eddf9e9fcc58320fa2 https://blog.csdn.net/lanria/
vue2 前後端分離專案ajax跨域session問題解決
最近學習使用vuejs前後端分離,重構一個已有的後臺管理系統,遇到了下面這個問題: 實現跨域請求時,每次ajax請求都是新的session,導致無法獲取登入資訊,所有的請求都被判定為未登陸。 1、 vuejs ajax跨域請求 最開始使用的是vue-resource
前後端分離springmvc和RESTful理解
1. 理解MVC MVC是一種經典的設計模式,全名為Model-View-Controller,即模型-檢視-控制器。 其中,模型是用於封裝資料的載體,例如,在Java中一般通過一個簡單的POJO(Plain Ordinary Java Object)來表示,其本質是一個
Maven多模組,Dubbo分散式服務框架,SpringMVC,前後端分離專案,基礎搭建,搭建過程出現的問題
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apac