㈠ 前端後端的數據交互(ajax)怎麼處理比較好
ajax的非同步,可以引入promise或者其他的非同步處理庫。
promise的好處是es2015標准,不用babel通過一個js庫也可以實現。
通過promise簡單的封裝,可以把ajax封裝成 $.ajax.then(success,fail)的形式。
除了ajax這部分,更重要的整個頁面的結構吧。最好是引入模塊化的開發,封裝每個組件成一個個模塊。本身web都是盒模型,很適合一個個組件的抽象封裝。一個頁面通過每個模塊的引入就可以了。
㈡ 如何給後端程序設計前端頁面
後端伺服器一般是指servlet容器,用於執行java源程序
常見的網頁有html,htm,shtml,asp,aspx,php,jsp等格式
前兩個常用於靜態網頁,後面幾個常用於動態網頁。
這里前端網頁以比較常見的 xx.html 和 xx.jsp 網頁作為介紹,其它類似
一、靜態頁面xx.html如何跟後台交互:
先來看一個最簡單的登陸界面源代碼
user: password: <input type="submit" value="Submit"/>
</form>12
這是一個表單,我們看到裡面都是純html內容,這是一個靜態頁面,當我們點擊submit按鈕時候,瀏覽器會提交表單內的數據到伺服器的loginServlet這個相對地址,我們看看瀏覽器的地址變成啥了:
這不就是我們的後台servlet的地址嘛,然後這個地址指向的是loginServlet這個servlet,然後在web.xml文件中找到這個servlet關聯的java類,從而執行了伺服器端的程序(第一次執行,那麼會實例化,然後執行裡面init()函數,然後執行service()函數,如果是第二次調用,那麼不用實例化了,直接執行service()函數),我們來看看伺服器端的源程序:
package com.atguigu.javaweb;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class loginServlet extends MyGeneriServlet {
public void init(javax.servlet.ServletConfig config) throws ServletException{
super.init(config);
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//獲取請求方式是GET,POST方式?
HttpServletRequest httpServletRequest=(HttpServletRequest) request;
String method=httpServletRequest.getMethod();
System.out.println(method);
//1.獲取請求參數:username,password
String username=request.getParameter(「username」);
String password=request.getParameter(「password」);
//獲取請求參數
String initUser=getServletContext().getInitParameter(「user」);
String initpassword=getServletContext().getInitParameter(「password」);
PrintWriter out=response.getWriter();
//3.對比
if(initUser.equals(username)&&initpassword.equals(password)){
out.print("Hello"+username); // 生成html內容
}else{
out.print("Sorry"+username); // 生成html內容
}
}12345678
}
上面沒有判斷此時對servlet的請求是post還是get方法,不過沒關系,request這個傳進來的參數以及包含了這些信息,自己判斷一下執行相應的操作即可
由於頁面路徑已經跳轉到servlet了,但是servlet不是一個.html文件啊,那豈不是沒有內容供瀏覽器顯示了,不是的,我們看到返回的參數response中的對象PrintWriter out用於動態生成html內容的字元串"Hello",所以這時候相當於servlet這個路徑也有了html內容了,瀏覽器的頁面就會顯示上述字元串了
二、jsp頁面如何跟後端伺服器交互:
jsp網頁文件就是html內容裡面插入java代碼,當我們訪問.jsp網頁文件時候,伺服器提前已經知道這個頁面內含有java代碼,那麼伺服器這邊就得先執行一下這些代碼(就跟執行servlet的java源代碼一樣),同時把執行的結果嵌入在當前這個.jsp頁面內,我們看看源代碼:
<%@page import=「java.util.Date」%> // 如果這個.jsp頁面中用到了一些java函數,就得導入庫,這就跟java源文件一樣的
<% out.println("Hello World!"); // 這里實際上是伺服器執行了結果,然後以文本返回給瀏覽器進行顯示 %>
上面紅色代碼就是java代碼,剛剛說過對象PrintWriter out用於動態生成html內容的字元串,所以伺服器執行完嵌入在裡面的java代碼後,就是動態生成了一串html代碼,然後一起傳給客戶端瀏覽器進行顯示
當然這種情況.jsp裡面沒有按鈕,表單這樣的控制項,現在再來看看有表單這種.jsp如何跟後端交互:
view.jsp
<%@page import=「day03_student.Student」%> // 還是得帶入java用到的庫文件
學生個人基本信息
<% Student s=(Student)request.getAttribute("students"); // %>
編號 學號 姓名 性別 年齡
<%=s.getId()%> <%=s.getStuno()%> <%=s.getName()%> <%=s.getGender()%> <%=s.getAge() %>
參考的原文:https://blog.csdn.net/myclass1312/article/details/80571867
這時候如果我們直接訪問這兒view.jsp文件,應該是沒有數據的,因為對象s無法從request對象獲取,必須得先給這個request對象賦值才行,即應該從如下servlet路徑跳轉來view.jsp文件路徑才行
public class viewservlet extends HttpServlet {
private StudentDao =new StudentDao();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String idstr = request.getParameter("id");
int id = Integer.parseInt(idstr);
//將數據放入request中,傳遞到頁面
Student student=.queryById(id);
request.setAttribute("students", student);
request.getRequestDispatcher("view.jsp").forward(request, response); // 這里是從當前頁面跳轉去哪個頁面,同時傳遞了request, response這兩個參數,這時候的request就是有內容的,接下來的view.jsp頁面就能獲取到內容而且動態生成html內容
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}123456789101112131415
}
總結:每個xx.html文件,xx.jsp文件,servlet響應程序…都是需要在客戶端瀏覽器通過URL來訪問的。
xx.jsp文件,servlet響應程序因為含有java源代碼,需要伺服器電腦先執行一下,.jsp文件中的java代碼一般會動態生成一些html內容嵌入在當前.jsp文件裡面一起給瀏覽器顯示出來;而servlet中的java代碼一般是數據處理功能的,可能會通過request.getRequestDispatcher(「view.jsp」).forward(request, response);
這樣的方式跳轉到其它有html內容的頁面的URL(同時傳遞處理好的數據過去) 來顯示結果
㈢ 就是把一個數據拿到後端處理再怎麼拿出來給前端的顯示頁面
以Get/Post通過ajax或者axios將你要給後端的數據data發給後端,後端會返回給你一個數據。
㈣ node 後端發送大量數據給前端怎麼處理效率最高
拿到數據,把數據存起來,分頁顯示。
再說後端一下子給那麼多數據,那得多大啊,也會佔用http響應時間。
最合理應該是 前端發給請求拿多少條,如果用戶有滾動到底或者點分頁的話,前端再去請求拿數據。就不會說你一下子拿那麼多,可能用戶只看了一兩條就不看了。造成資源浪費。
㈤ 後端解決前端跨域請求問題
場景:前後端分離,頁面和後端項目部署在不同伺服器,出現請求跨域問題。
原因:CORS:跨來源資源共享(CORS)是一份瀏覽器技術的規范,提供了 Web 服務從不同網域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是 JSONP 模式的現代版。與 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以讓網頁設計師用一般的 XMLHttpRequest,這種方式的錯誤處理比JSONP要來的好,JSONP對於 RESTful 的 API 來說,發送 POST/PUT/DELET 請求將成為問題,不利於介面的統一。但另一方面,JSONP 可以在不支持 CORS 的老舊瀏覽器上運作。不過現代的瀏覽器(IE10以上)基本都支持 CORS。
預檢請求(option):在 CORS 中,可以使用 OPTIONS 方法發起一個預檢請求(一般都是瀏覽檢測到請求跨域時,會自動發起),以檢測實際請求是否可以被伺服器所接受。預檢請求報文中的 Access-Control-Request-Method 首部欄位告知伺服器實際請求所使用的 HTTP 方法;Access-Control-Request-Headers 首部欄位告知伺服器實際請求所攜帶的自定義首部欄位。伺服器基於從預檢請求獲得的信息來判斷,是否接受接下來的實際請求。
解決方案:
1、創建一個過濾器,過濾options請求。
package com.biz.eisp.sci.util;
import org.apache.commons.httpclient.HttpStatus;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 解決跨域問題
*
*/
public class CorsFilterimplements Filter {//filter 介面的自定義實現
public void init(FilterConfig filterConfig)throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
response.setHeader("Access-Control-Allow-Origin", "*");
if ("OPTIONS".equals(request.getMethod())){//這里通過判斷請求的方法,判斷此次是否是預檢請求,如果是,立即返回一個204狀態嗎,標示,允許跨域;預檢後,正式請求,這個方法參數就是我們設置的post了
response.setStatus(HttpStatus.SC_NO_CONTENT); //HttpStatus.SC_NO_CONTENT = 204
response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");//當判定為預檢請求後,設定允許請求的方法
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with"); //當判定為預檢請求後,設定允許請求的頭部類型
response.addHeader("Access-Control-Max-Age", "1"); // 預檢有效保持時間
}
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
2、修改web.xml文件
<filter>
<filter-name>cors</filter-name>
<filter-class>com.biz.eisp.sci.util.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
3、spring-mvc.xml添加HttpRequestHandlerAdapter http請求處理器適配器。
HttpRequestHandlerAdapter作為HTTP請求處理器適配器僅僅支持對HTTP請求處理器的適配。它簡單的將HTTP請求對象和響應對象傳遞給HTTP請求處理器的實現,它並不需要返回值。它主要應用在基於HTTP的遠程調用的實現上。
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
㈥ web開發的後端和前端不在同一家公司,後端怎麼把數據給前端
其實這個是很簡單的問題,現在的網站開發大多是前後端分離,前後端分離的意思就是前端只需要負責前端的東西,後端負責數據處理,
那麼最後前端再通過介面把數據傳遞給後端,或者從後端獲取數據,
所以介面就是前端和後端的橋梁,後端提供一個介面,然後介面文檔格式你需要傳遞什麼數據,返回什麼數據,你通過ajax或axios把介面對接起來,這樣不管你在上面地方都能進行數據傳遞了。當然可能會出現跨域的問題,這個就需要後端去解決了。