国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳談 Filter 過濾器

wind5o / 1670人閱讀

摘要:元素用于指定過濾器的完整的限定類名。除此之外,過濾器不會被調(diào)用。參數(shù)用于訪問后續(xù)過濾器。還可以為指定目標(biāo)資源為某個,例如當(dāng)用戶訪問時,會執(zhí)行名字為的,這時會執(zhí)行過濾器。防止中文亂碼過濾器項目使用框架時。

文章首發(fā)在CSDN博客,轉(zhuǎn)載請務(wù)必注明以下所有鏈接,否則考慮法律追究責(zé)任。

CSDN地址:http://blog.csdn.net/tzs_1041218129/article/details/53345485

個人博客地址:www.54tianzhisheng.cn/Blog/html/filter.html (閱讀效果最好)

pdf 版本:www.54tianzhisheng.cn/Blog/pdf/filter.pdf

所有文章干貨都在:https://github.com/zhisheng17/zhisheng17.github.io

更多精彩博客還請關(guān)注我的微信公眾號:猿blog

1、簡介

  Filter也稱之為過濾器,它是Servlet技術(shù)中最實用的技術(shù),WEB開發(fā)人員通過Filter技術(shù),對web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實現(xiàn)一些特殊的功能。例如實現(xiàn)URL級別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級功能。

  它主要用于對用戶請求進(jìn)行預(yù)處理,也可以對HttpServletResponse 進(jìn)行后處理。使用Filter 的完整流程:Filter 對用戶請求進(jìn)行預(yù)處理,接著將請求交給Servlet 進(jìn)行處理并生成響應(yīng),最后Filter 再對服務(wù)器響應(yīng)進(jìn)行后處理。

  Filter功能:

在HttpServletRequest 到達(dá) Servlet 之前,攔截客戶的 HttpServletRequest 。?根據(jù)需要檢查 HttpServletRequest ,也可以修改HttpServletRequest 頭和數(shù)據(jù)。

在HttpServletResponse 到達(dá)客戶端之前,攔截HttpServletResponse 。?根據(jù)需要檢查 HttpServletResponse ,也可以修改HttpServletResponse頭和數(shù)據(jù)。

2、如何實現(xiàn)攔截

  Filter接口中有一個doFilter方法,當(dāng)開發(fā)人員編寫好Filter,并配置對哪個web資源進(jìn)行攔截后,WEB服務(wù)器每次在調(diào)用web資源的service方法之前,都會先調(diào)用一下filter的doFilter方法,因此,在該方法內(nèi)編寫代碼可達(dá)到如下目的:

調(diào)用目標(biāo)資源之前,讓一段代碼執(zhí)行。

是否調(diào)用目標(biāo)資源(即是否讓用戶訪問web資源)。

  web服務(wù)器在調(diào)用doFilter方法時,會傳遞一個filterChain對象進(jìn)來,filterChain對象是filter接口中最重要的一個對象,它也提供了一個doFilter方法,開發(fā)人員可以根據(jù)需求決定是否調(diào)用此方法,調(diào)用該方法,則web服務(wù)器就會調(diào)用web資源的service方法,即web資源就會被訪問,否則web資源不會被訪問。?

3、Filter開發(fā)兩步走

編寫java類實現(xiàn)Filter接口,并實現(xiàn)其doFilter方法。?

在 web.xml 文件中使用元素對編寫的filter類進(jìn)行注冊,并設(shè)置它所能攔截的資源。

  web.xml配置各節(jié)點介紹:

用于為過濾器指定一個名字,該元素的內(nèi)容不能為空。
元素用于指定過濾器的完整的限定類名。
元素用于為過濾器指定初始化參數(shù),它的子元素指定參數(shù)的名字,指定參數(shù)的值。
在過濾器中,可以使用FilterConfig接口對象來訪問初始化參數(shù)。

元素用于設(shè)置一個 Filter 所負(fù)責(zé)攔截的資源。一個Filter攔截的資源可通過兩種方式來指定:Servlet 名稱和資源訪問的請求路徑
子元素用于設(shè)置filter的注冊名稱。該值必須是在元素中聲明過的過濾器的名字
設(shè)置 filter 所攔截的請求路徑(過濾器關(guān)聯(lián)的URL樣式)
指定過濾器所攔截的Servlet名稱。
指定過濾器所攔截的資源被 Servlet 容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST。用戶可以設(shè)置多個 子元素用來指定 Filter 對資源的多種調(diào)用方式進(jìn)行攔截。

 子元素可以設(shè)置的值及其意義:
REQUEST:當(dāng)用戶直接訪問頁面時,Web容器將會調(diào)用過濾器。如果目標(biāo)資源是通過RequestDispatcher的include()或forward()方法訪問時,那么該過濾器就不會被調(diào)用。
INCLUDE:如果目標(biāo)資源是通過RequestDispatcher的include()方法訪問時,那么該過濾器將被調(diào)用。除此之外,該過濾器不會被調(diào)用。
FORWARD:如果目標(biāo)資源是通過RequestDispatcher的forward()方法訪問時,那么該過濾器將被調(diào)用,除此之外,該過濾器不會被調(diào)用。
ERROR:如果目標(biāo)資源是通過聲明式異常處理機(jī)制調(diào)用時,那么該過濾器將被調(diào)用。除此之外,過濾器不會被調(diào)用。

4、Filter鏈

  在一個web應(yīng)用中,可以開發(fā)編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈。

  web服務(wù)器根據(jù)Filter在web.xml文件中的注冊順序,決定先調(diào)用哪個Filter,當(dāng)?shù)谝粋€Filter的doFilter方法被調(diào)用時,web服務(wù)器會創(chuàng)建一個代表Filter鏈的FilterChain對象傳遞給該方法。在doFilter方法中,開發(fā)人員如果調(diào)用了FilterChain對象的doFilter方法,則web服務(wù)器會檢查FilterChain對象中是否還有filter,如果有,則調(diào)用第2個filter,如果沒有,則調(diào)用目標(biāo)資源。

多個過濾器執(zhí)行順序

一個目標(biāo)資源可以指定多個過濾器,過濾器的執(zhí)行順序是在web.xml文件中的部署順序:


    myFilter1
    cn.cloud.filter.MyFilter1
  
  
    myFilter1
    /index.jsp
  
  
    myFilter2
    cn. cloud.filter.MyFilter2
  
  
    myFilter2
    /index.jsp
  

MyFilter1

public class MyFilter1 extends HttpFilter {
    public void doFilter(HttpServletRequest request, HttpServletResponse response,
           FilterChain chain) throws IOException, ServletException {
       System.out.println("filter1 start...");
       chain.doFilter(request, response);//放行,執(zhí)行MyFilter2的doFilter()方法
       System.out.println("filter1 end...");
    }
}

MyFilter2

public class MyFilter2 extends HttpFilter {
    public void doFilter(HttpServletRequest request, HttpServletResponse response,
           FilterChain chain) throws IOException, ServletException {
       System.out.println("filter2 start...");
       chain.doFilter(request, response);//放行,執(zhí)行目標(biāo)資源
       System.out.println("filter2 end...");
    }
}

    This is my JSP page. 

index.jsp

<%System.out.println("index.jsp"); %>

當(dāng)有用戶訪問index.jsp頁面時,輸出結(jié)果如下:

filter1 start...
filter2 start...
index.jsp
filter2 end...
filter1 end...

5、Filter的生命周期

public void init(FilterConfig filterConfig) throws ServletException;//初始化

  和我們編寫的Servlet程序一樣,F(xiàn)ilter的創(chuàng)建和銷毀由WEB服務(wù)器負(fù)責(zé)。 web 應(yīng)用程序啟動時,web 服務(wù)器將創(chuàng)建Filter 的實例對象,并調(diào)用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為后續(xù)的用戶請求作好攔截的準(zhǔn)備工作(filter對象只會創(chuàng)建一次,init方法也只會執(zhí)行一次)。開發(fā)人員通過init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的FilterConfig對象。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//攔截請求

  這個方法完成實際的過濾操作。當(dāng)客戶請求訪問與過濾器關(guān)聯(lián)的URL(目標(biāo)資源)的時候,Servlet過濾器將先執(zhí)行doFilter方法。FilterChain參數(shù)用于訪問后續(xù)過濾器。

public void destroy();//銷毀

  服務(wù)器在創(chuàng)建Filter對象之后,把Filter放到緩存中一直使用(會駐留在內(nèi)存),通常不會銷毀它,當(dāng)web應(yīng)用移除或服務(wù)器停止時才銷毀Filter對象。在Web容器卸載 Filter 對象之前被調(diào)用。該方法在Filter的生命周期中僅執(zhí)行一次。在這個方法中,可以釋放過濾器使用的資源。

6、FilterConfig接口

  用戶在配置filter時,可以使用為filter配置一些初始化參數(shù),當(dāng)web容器實例化Filter對象,調(diào)用其init方法時,會把封裝了filter初始化參數(shù)的filterConfig對象傳遞進(jìn)來。因此開發(fā)人員在編寫filter時,通過filterConfig對象的方法,就可獲得以下內(nèi)容:

String getFilterName();//得到filter的名稱;與元素對應(yīng)。
String getInitParameter(String name);//返回在部署描述中指定名稱的初始化參數(shù)的值。如果不存在返回null,與元素對應(yīng).
Enumeration getInitParameterNames();//返回過濾器的所有初始化參數(shù)的名字的枚舉集合。
public ServletContext getServletContext();//返回Servlet上下文對象的引用。

7、FilterChain

doFilter()方法的參數(shù)中有一個類型為FilterChain的參數(shù),它只有一個方法:doFilter(ServletRequest,ServletResponse)

doFilter() 方法的放行,讓請求流訪問目標(biāo)資源!其實調(diào)用該方法的意思是,當(dāng)前 Filter 放行了,但不代表其他過濾器也放行。一個目標(biāo)資源上,可能部署了多個過濾器,所以調(diào)用 FilterChain 類的 doFilter() 方法表示的是執(zhí)行下一個過濾器的 doFilter() 方法,或者是執(zhí)行目標(biāo)資源!

如果當(dāng)前過濾器是最后一個過濾器,那么調(diào)用 chain.doFilter() 方法表示執(zhí)行目標(biāo)資源,而不是最后一個過濾器,那么 chain.doFilter() 表示執(zhí)行下一個過濾器的 doFilter() 方法。

8、過濾器的應(yīng)用場景

執(zhí)行目標(biāo)資源之前做預(yù)處理工作,例如設(shè)置編碼,這種試通常都會放行,只是在目標(biāo)資源執(zhí)行之前做一些準(zhǔn)備工作;

通過條件判斷是否放行,例如校驗當(dāng)前用戶是否已經(jīng)登錄,或者用戶IP是否已經(jīng)被禁用;

在目標(biāo)資源執(zhí)行后,做一些后續(xù)的特殊處理工作,例如把目標(biāo)資源輸出的數(shù)據(jù)進(jìn)行處理

設(shè)置目標(biāo)資源

在web.xml文件中部署Filter時,可以通過“*”來執(zhí)行目標(biāo)資源:


       myfilter
       /*
    

特性與Servlet完全相同!通過這一特性,可以在用戶訪問敏感資源時,執(zhí)行過濾器,例如:/admin/*,可以把所有管理員才能訪問的資源放到/admin路徑下,這時可以通過過濾器來校驗用戶身份。

還可以為指定目標(biāo)資源為某個Servlet,例如:


       myservlet
       cn.cloud.servlet.MyServlet
    
    
       myservlet
       /abc
    
    
       myfilter
       cn.cloud.filter.MyFilter
    
    
       myfilter
       myservlet
    

當(dāng)用戶訪問http://localhost:8080/filtertest/abc時,會執(zhí)行名字為myservlet的Servlet,這時會執(zhí)行過濾器。

9、四種攔截方式

寫一個過濾器,指定過濾的資源為b.jsp,然后在瀏覽器中直接訪問b.jsp,會發(fā)現(xiàn)過濾器執(zhí)行了.但是,當(dāng)在a.jsp中request.getRequestDispathcer(“/b.jsp”).forward(request,response)時,就不會再執(zhí)行過濾器了!也就是說,默認(rèn)情況下,只能直接訪問目標(biāo)資源才會執(zhí)行過濾器,而forward執(zhí)行目標(biāo)資源,不會執(zhí)行過濾器!

public class MyFilter extends HttpFilter {
    public void doFilter(HttpServletRequest request,
           HttpServletResponse response, FilterChain chain)
           throws IOException, ServletException {
       System.out.println("myfilter...");
       chain.doFilter(request, response);
    }
}

       myfilter
       cn.itcast.filter.MyFilter
    
    
       myfilter
       /b.jsp
    

   

b.jsp

a.jsp

<% request.getRequestDispatcher("/b.jsp").forward(request, response); %>

在瀏覽器輸入:

http://localhost:8080/filtertest/b.jsp 直接訪問b.jsp時,會執(zhí)行過濾器內(nèi)容;

http://localhost:8080/filtertest/a.jsp 訪問a.jsp,但a.jsp會forward到b.jsp,這時就不會執(zhí)行過濾器!

過濾器有四種攔截方式!分別是:REQUEST、FORWARD、INCLUDE、ERROR。

REQUEST:直接訪問目標(biāo)資源時執(zhí)行過濾器。包括:在地址欄中直接訪問、表單提交、超鏈接、重定向,只要在地址欄中可以看到目標(biāo)資源的路徑,就是REQUEST

FORWARD:轉(zhuǎn)發(fā)訪問執(zhí)行過濾器。包括RequestDispatcher#forward()方法、標(biāo)簽都是轉(zhuǎn)發(fā)訪問

INCLUDE:包含訪問執(zhí)行過濾器。包括RequestDispatcher#include()方法、標(biāo)簽都是包含訪問

ERROR:當(dāng)目標(biāo)資源在web.xml中配置為中時,并且真的出現(xiàn)了異常,轉(zhuǎn)發(fā)到目標(biāo)資源時,會執(zhí)行過濾器。

可以在中添加0~n個子元素,來說明當(dāng)前訪問的攔截方式。

如:

 
       myfilter
       /b.jsp
       REQUEST
       FORWARD
    

最為常用的就是REQUEST和FORWARD兩種攔截方式,而INCLUDE和ERROR都比較少用!其中INCLUDE比較好理解,ERROR方式不易理解,下面給出ERROR攔截方式的例子:


       myfilter
       /b.jsp
       ERROR
    
    
       500
       /b.jsp
    

  

a.jsp

<% if(true) throw new RuntimeException("嘻嘻~"); %>

10、Filter使用案例

  1、使用Filter驗證用戶登錄安全控制

  前段時間參與維護(hù)一個項目,用戶退出系統(tǒng)后,再去地址欄訪問歷史,根據(jù)url,仍然能夠進(jìn)入系統(tǒng)響應(yīng)頁面。我去檢查一下發(fā)現(xiàn)對請求未進(jìn)行過濾驗證用戶登錄。添加一個filter搞定問題!

  先在web.xml配置


    SessionFilter
    com.action.login.SessionFilter
    
        logonStrings
        /project/index.jsp;login.do
    
    
        includeStrings
        .do;.jsp
    
    
        redirectPath
        /index.jsp
    
    
        disabletestfilter
        N
    


    SessionFilter
    /*

  接著編寫FilterServlet:

package com.action.login;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

/**
 *    判斷用戶是否登錄,未登錄則退出系統(tǒng)
 */
public class SessionFilter implements Filter {

    public FilterConfig config;

    public void destroy() {
        this.config = null;
    }

    public static boolean isContains(String container, String[] regx) {
        boolean result = false;

        for (int i = 0; i < regx.length; i++) {
            if (container.indexOf(regx[i]) != -1) {
                return true;
            }
        }
        return result;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hrequest = (HttpServletRequest)request;
        HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);

        String logonStrings = config.getInitParameter("logonStrings");        // 登錄登陸頁面
        String includeStrings = config.getInitParameter("includeStrings");    // 過濾資源后綴參數(shù)
        String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 沒有登陸轉(zhuǎn)向頁面
        String disabletestfilter = config.getInitParameter("disabletestfilter");// 過濾器是否有效

        if (disabletestfilter.toUpperCase().equals("Y")) {    // 過濾無效
            chain.doFilter(request, response);
            return;
        }
        String[] logonList = logonStrings.split(";");
        String[] includeList = includeStrings.split(";");

        if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 只對指定過濾參數(shù)后綴進(jìn)行過濾
            chain.doFilter(request, response);
            return;
        }

        if (this.isContains(hrequest.getRequestURI(), logonList)) {// 對登錄頁面不進(jìn)行過濾
            chain.doFilter(request, response);
            return;
        }

        String user = ( String ) hrequest.getSession().getAttribute("useronly");//判斷用戶是否登錄
        if (user == null) {
            wrapper.sendRedirect(redirectPath);
            return;
        }else {
            chain.doFilter(request, response);
            return;
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        config = filterConfig;
    }
}

  這樣既可完成對用戶所有請求,均要經(jīng)過這個Filter進(jìn)行驗證用戶登錄。

  2、防止中文亂碼過濾器

  項目使用spring框架時。當(dāng)前臺JSP頁面和JAVA代碼中使用了不同的字符集進(jìn)行編碼的時候就會出現(xiàn)表單提交的數(shù)據(jù)或者上傳/下載中文名稱文件出現(xiàn)亂碼的問題,那就可以使用這個過濾器。


    encoding
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    
    
        forceEncoding
        false
    


    encoding
    /*

  3、Spring+Hibernate的OpenSessionInViewFilter控制session的開關(guān)

  當(dāng) hibernate+spring 配合使用的時候,如果設(shè)置了lazy=true(延遲加載),那么在讀取數(shù)據(jù)的時候,當(dāng)讀取了父數(shù)據(jù)后,hibernate 會自動關(guān)閉 session,這樣,當(dāng)要使用與之關(guān)聯(lián)數(shù)據(jù)、子數(shù)據(jù)的時候,系統(tǒng)會拋出lazyinit的錯誤,這時就需要使用 spring 提供的 OpenSessionInViewFilter 過濾器。

  OpenSessionInViewFilter主要是保持 Session 狀態(tài)直到 request 將全部頁面發(fā)送到客戶端,直到請求結(jié)束后才關(guān)閉 session,這樣就可以解決延遲加載帶來的問題。

  注意:OpenSessionInViewFilter 配置要寫在struts2的配置前面。因為 tomcat 容器在加載過濾器的時候是按照順序加載的,如果配置文件先寫的是 struts2 的過濾器配置,然后才是 OpenSessionInViewFilter 過濾器配置,所以加載的順序?qū)е?,action 在獲得數(shù)據(jù)的時候 session 并沒有被 spring 管理。



    OpenSessionInViewFilter
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    
        sessionFactoryBeanName
        sessionFactory
    
    
        singleSession
        true
    


    OpenSessionInViewFilter
    *.do

  4、Struts2的web.xml配置

  項目中使用Struts2同樣需要在web.xml配置過濾器,用來截取請求,轉(zhuǎn)到Struts2的Action進(jìn)行處理。

  注意:如果在2.1.3以前的Struts2版本,過濾器使用org.apache.struts2.dispatcher.FilterDispatcher。否則使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。從Struts2.1.3開始,將廢棄ActionContextCleanUp過濾器,而在StrutsPrepareAndExecuteFilter過濾器中包含相應(yīng)的功能。

  三個初始化參數(shù)配置:

config參數(shù):指定要加載的配置文件。逗號分割。

actionPackages參數(shù):指定Action類所在的包空間。逗號分割。

configProviders參數(shù):自定義配置文件提供者,需要實現(xiàn)ConfigurationProvider接口類。逗號分割。



    struts2
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter


    struts2
    *.do

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69829.html

相關(guān)文章

  • ES6指北【6】——詳談解構(gòu)賦值【附贈練習(xí)題】

    摘要:指北詳談解構(gòu)賦值附贈練習(xí)題一何謂解構(gòu)賦值基本概念首先我們看一下給的定義解構(gòu)賦值語法是一個表達(dá)式,這使得可以將值從數(shù)組或?qū)傩詮膶ο筇崛〉讲煌淖兞恐袕亩x中,我們可以發(fā)現(xiàn)解構(gòu)賦值的作用是對變量進(jìn)行賦值主要通過兩個方面實現(xiàn)這個作用數(shù)組將數(shù)組中的 ES6指北【6】——詳談解構(gòu)賦值【附贈練習(xí)題】 一、何謂解構(gòu)賦值? 1. 基本概念 首先我們看一下MDN給的定義 解構(gòu)賦值語法是一個 Javasc...

    sorra 評論0 收藏0
  • 詳談js防抖和節(jié)流

    摘要:本文會分別介紹什么是防抖和節(jié)流,它們的應(yīng)用場景,和實現(xiàn)方式。防抖和節(jié)流都是為了解決短時間內(nèi)大量觸發(fā)某函數(shù)而導(dǎo)致的性能問題,比如觸發(fā)頻率過高導(dǎo)致的響應(yīng)速度跟不上觸發(fā)頻率,出現(xiàn)延遲,假死或卡頓的現(xiàn)象。 本文由小芭樂發(fā)表 0. 引入 首先舉一個例子: 模擬在輸入框輸入后做ajax查詢請求,沒有加入防抖和節(jié)流的效果,這里附上完整可執(zhí)行代碼: 沒有防抖 ...

    shevy 評論0 收藏0
  • JavaScript數(shù)據(jù)類型----原始類型與引用類型(object)詳談

    摘要:做個小小的延伸在這個栗子中,兩個對象都有一條相同的值,但這兩個對象卻不相等,為什么呢因為兩個對象分別引用的是存放在堆內(nèi)存中的個不同的對象,故變量和的值引用地址也是不一樣的。 JavaScript中,有七種內(nèi)置類型:6種原始類型和引用類型,他們分別是: 6種原始類型(基本類型): 空值(null) 未定義(undefined) 布爾值(boolean) 數(shù)字(number) 字符串(s...

    tomlingtm 評論0 收藏0
  • 用Python寫了個檢測文章抄襲,詳談去重算法原理

    摘要:中文網(wǎng)頁的一大特點就是天下文章一大抄,各種博文新聞幾乎一字不改或稍作修改就被網(wǎng)站發(fā)表了。這個特點,很適合這個百度算法。但是,實際中個別字的修改,會導(dǎo)致被轉(zhuǎn)載的最長的那句話不一樣,從而其值也不一樣了,最終結(jié)果是,準(zhǔn)確率很高,召回率較低。 在互聯(lián)網(wǎng)出現(xiàn)之前,抄很不方便,一是源少,而是發(fā)布渠道少;而在互聯(lián)網(wǎng)出現(xiàn)之后,抄變得很簡單,鋪天蓋地的源源源不斷,發(fā)布渠道也數(shù)不勝數(shù),博客論壇甚至是自建網(wǎng)...

    blair 評論0 收藏0
  • 支付寶小程序之連接后端+詳談引入阿里icon圖標(biāo)

    摘要:背景第一天練習(xí)支付寶小程序的時候?qū)懞昧艘粋€簡單的頁面后續(xù)是新增重置按鈕連接后端接口然后加入圖標(biāo)網(wǎng)上看了很多小程序加圖標(biāo)例子說實話沒有單獨能成功的我也不記得結(jié)合了多少個才成功了還是自己寫了篇文章記錄下引入流程可能有點啰嗦但是比較詳細(xì)連接后端接 背景:第一天練習(xí)支付寶小程序的時候?qū)懞昧艘粋€簡單的頁面.后續(xù)是新增重置按鈕,連接后端接口.然后加入icon圖標(biāo).網(wǎng)上看了很多小程序加icon圖標(biāo)例...

    biaoxiaoduan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<