欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java個人技術(shù)知識點總結(jié)(框架篇)-創(chuàng)新互聯(lián)

框架篇

成都創(chuàng)新互聯(lián)擁有十載的建站服務(wù)經(jīng)驗,在此期間,我們發(fā)現(xiàn)較多的客戶在挑選建站服務(wù)商前都非常的猶豫。主要問題集中:在無法預(yù)知自己的網(wǎng)站呈現(xiàn)的效果是什么樣的?也無法判斷選擇的服務(wù)商設(shè)計出來的網(wǎng)頁效果自己是否會滿意?成都創(chuàng)新互聯(lián)業(yè)務(wù)涵蓋了互聯(lián)網(wǎng)平臺網(wǎng)站建設(shè)、移動平臺網(wǎng)站制作、網(wǎng)絡(luò)推廣、定制網(wǎng)站開發(fā)等服務(wù)。成都創(chuàng)新互聯(lián)網(wǎng)站開發(fā)公司本著不拘一格的網(wǎng)站視覺設(shè)計和網(wǎng)站開發(fā)技術(shù)相結(jié)合,為企業(yè)做網(wǎng)站提供成熟的網(wǎng)站設(shè)計方案。

Struts1的運行原理

在啟動時通過前端總控制器ActionServlet加載struts-config.xml并進行解析,當(dāng)用戶在jsp頁面發(fā)送請求被struts1的核心控制器ActionServlet接收,ActionServlet在用戶請求時將請求參數(shù)放到對應(yīng)的ActionForm對象中的成員變量中,然后ActionServlet則會根據(jù)struts-config.xml中的映射關(guān)系找到相應(yīng)的Action中的方法,將對應(yīng)的ActionForm一并傳給這個Action中的方法里,然后執(zhí)行相應(yīng)的業(yè)務(wù)邏輯操作,最后就根據(jù)ActionMapping的findforward方法返回一個ActionForward,之后在struts-config.xml中找到與之對應(yīng)的forward標(biāo)簽,根據(jù)它的配置路徑找到對應(yīng)的jsp頁面。

Struts2的運行原理

1、tomcat 啟動的時候會加載 web.xml 、核心控制器 FilterDispatcher 會加載并解析 struts.xml

2、客戶端會發(fā)送一個請求到 action 、FilterDispatcher  會根據(jù)后綴名進行攔截

3、FilterDispatcher根據(jù) struts.xml  的配置文件信息 找到 某個action 對應(yīng)的某個類里的指定方法

4、執(zhí)行相關(guān)的業(yè)務(wù)邏輯最后返回 一個String

5、<action/> 里配置 <result/> name的屬性值與返回的String 進行匹配,跳轉(zhuǎn)到指定的jsp 頁面

struts2的體系結(jié)構(gòu)

1、客戶端向Servlet容器(例如Tomcat)發(fā)送一個請求;

2、這個請求經(jīng)過一系列的過濾器(Filter);

3、接著FilterDispatcher被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請求是否需要調(diào)用某個Action;

4、如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy;

5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類;

6、ActionProxy創(chuàng)建一個ActionInvocation的實例。

7、ActionInvocation在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

8、一旦Action執(zhí)行完畢,ActionInvocation負責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是jsp或者FreeMarker的模版。(體系結(jié)構(gòu)圖見下一頁)

Java個人技術(shù)知識點總結(jié)(框架篇)

Spring MVC運行原理

整個處理過程從一個HTTP請求開始:

1.Tomcat在啟動時加載解析web.xml,找到spring mvc的前端總控制器DispatcherServlet,并且通過DispatcherServlet來加載相關(guān)的配置文件信息。

2.DispatcherServlet接收到客戶端請求,找到對應(yīng)HandlerMapping,根據(jù)映射規(guī)則,找到對應(yīng)的處理器(Handler)。

3.調(diào)用相應(yīng)處理器中的處理方法,處理該請求后,會返回一個ModelAndView。

4.DispatcherServlet根據(jù)得到的ModelAndView中的視圖對象,找到一個合適的ViewResolver(視圖解析器),根據(jù)視圖解析器的配置,DispatcherServlet將要顯示的數(shù)據(jù)傳給對應(yīng)的視圖,最后顯示給用戶。

Struts1.x與Struts2.x的區(qū)別

Struts 2以WebWork為核心,

采用攔截器的機制來處理用戶的請求,struts1嚴(yán)重依賴于servletAPI,

屬于侵入性框架,struts2不嚴(yán)重依賴于servletAPI,屬于非侵入型框架。

線程模型方面:

Struts1的Action是單實例的,

一個Action的實例處理所有的請求。

Struts2的Action是一個請求對應(yīng)一個實例(每次請求時都新new出一個對象),

沒有線程安全方面的問題

封裝請求參數(shù):

Struts1中強制使用ActionForm對象封裝請求的參數(shù)。

Struts2可以選擇使用POJO類來封裝請求的參數(shù),或者直接使用Action的屬性。

struts1的前端總控制器(核心總控制器)為ActionServlet,

struts2的前端總控制器(核心總控制器)為FilterDispather

Spring MVC、struts1和struts2區(qū)別

1.spring mvc單例 非線程安全

struts1單例 非線程安全

struts2線程安全對每個請求都產(chǎn)生一個實例

2.spring mvc的入口是servlet,而struts2是filter

spring的前端總控制器為 DispatcherServlet

struts2的前端總控制器為 FilterDispatcher

struts1的前端總控制器為 actionServlet

3.參數(shù)傳遞:struts是在接受參數(shù)的時候,

可以用屬性來接受參數(shù),這就說明參數(shù)是讓多個方法共享的。

springmvc用方法來接受參數(shù)

4.spring mvc是基于方法的設(shè)計,而sturts是基于類

如果你依然覺得有些茫然,不如加入我的Java架構(gòu)師之路:766529531 跟有多年Java開發(fā)經(jīng)驗的資深工程師聊一聊。也可獲取免費的視頻學(xué)習(xí)資料以及電子書學(xué)習(xí)資料喔!

Struts2中result中的type類型

1.dispatcher:它是默認(rèn)的,用來轉(zhuǎn)向頁面,通常處理JSP

    2.redirect:將用戶重定向到一個已配置好的URL

    3.redirectAction:將用戶重定向到一個已定義好的action

    4.chain:將action和另外一個action鏈接起來

    5.freemarker:呈現(xiàn)Freemarker模板

    6.httpheader:返回一個已配置好的HTTP頭信息響應(yīng)

    7.stream:向瀏覽器發(fā)送InputSream對象對下載的內(nèi)容和圖片非常有用

    8.velocity:呈現(xiàn)Velocity模板

    9.xslt :該XML可以通過XSL模板進行轉(zhuǎn)換

    10.plaintext:顯示原始文件內(nèi)容,例如文件源代碼

Struts2標(biāo)簽

首先需要引用<%@taglib prefix="s" uri="/struts-tags"%>

1.判斷標(biāo)簽 后面可跟 <s:else>

2. 迭代標(biāo)簽

3.引入標(biāo)簽 可以把一個JSP頁面或者servlet引入一 個頁面中

4.輸出標(biāo)簽

5.標(biāo)簽賦予變量一個特定范圍內(nèi)的值

6.表單標(biāo)簽

7.文本域標(biāo)簽

8.下拉標(biāo)簽

9.聲明一個url的路徑

最常用的是:

判斷

循環(huán)

輸出

SSI整合

1、Action繼承于Actionsupport

2、引入struts-spring-plugin.jar包,從而完成struts和spring的整合

3、在struts2的action中注入service,保證service的名字和配置文件中的一致, 并生成get,set方法

4、Dao層繼承于SqlMapClientDaoSupport

5、在dao層的配置文件中注入sqlMapClient

SSH整合

1.首先在web.xml中通過ContextLoaderListener來融入spring,

并加載spring的相關(guān)配置文件

2.同樣配置sturts2的前端總控制器filterDispatcher來過濾相關(guān)的

請求并且加載struts.xml

3.action繼承ActionSupport,然后通過引入struts-spring-plugin.jar

包并且根據(jù)配置文件中service的id生成get,set方法來注入service層。

4.dao層繼承于HibernateDaoSupport,并且在dao的配置文件中注入sessionFactory.

5.通過spring中的配置文件加載hibernate.cfg.xml文件從而融入hibernate.

在ssh框架中是怎么整合spring?

首先在web.xml中通過ContextLoaderListener來融入spring,

并加載spring的相關(guān)配置文件

在ssh框架中是怎么整合hibernate?

通過spring中的配置文件加載hibernate.cfg.xml文件從而融入hibernate

dao層繼承于HibernateDaoSupport,并且在dao的配置文件中注入sessionFactory

在ssh框架中是怎么整合struts2?

配置sturts2的前端總控制器filterDispatcher來過濾相關(guān)的

請求并且加載struts.xml

如果你依然覺得有些茫然,不如加入我的Java架構(gòu)師之路:766529531 跟有多年Java開發(fā)經(jīng)驗的資深工程師聊一聊。也可獲取免費的視頻學(xué)習(xí)資料以及電子書學(xué)習(xí)資料喔!

Spring MVC整合

1.首先,要在web.xml里面配置SpringMVC的核心控制器,DispatcherServlet,對指定的后綴請求進行攔截。

2.Controller層要加 @Controller注解,表明該類是MVC的控制層。

3.創(chuàng)建Service接口,給接口加上注解 @Component或者 @Service 表明這是Service業(yè)務(wù)處理層

4.在Controller層聲明Service變量(屬性),給變量(屬性) 加上 @Autowired注解,通過自動綁定機制將Service注入到Controller。 ( 注 :@Autowired默認(rèn)是ByType,如果想根據(jù)屬性名注入,那么就再加上注解 @Resource(name="屬性名"))

5.在Controller層的方法上加上注解 @RequestMapping("requestAddress") 表明該方法的請求地址

6.Dao層要加上注解 @Repository 表明這是數(shù)據(jù)庫持久層

7.同樣將dao實例注入到service層中。

8.配置視圖解析器 "InternalResourceViewResolver",對處理后的跳轉(zhuǎn)進行統(tǒng)一配置。

H ibernate中g(shù)et 和 load的區(qū)別

加載方式:

    load為延遲加載(返回的是一個只有id屬性的代理,只有使用該對象屬性時,才 發(fā)出sql語句);

    get為立即加載(執(zhí)行時,會立即向數(shù)據(jù)庫發(fā)出sql語句)

返回結(jié)果:

    load檢索不到記錄時,會拋ObjectNotFoundException異常

    get檢索不到記錄時,會返回null

Hibernate、Ibatis、Jdbc三者的區(qū)別

Hibernate屬于全自動, Ibatis屬于半自動,Jdbc屬于手動,從開發(fā)效率上講hibernate較高,ibatis居中,jdbc較低,從執(zhí)行效率上講hibernate較低,ibatis居中,jdbc較高,因為jdbc是手工寫sql語句,程序員對sql的控制能力更大,可以根據(jù)業(yè)務(wù)需要進行優(yōu)化,而ibatis雖然也可以對sql進行優(yōu)化,但是他里面將resultset封裝為實體的過程中采用了反射機制所以一定程度上影響了性能,而hibernate因為高度封裝所以開發(fā)效率相對較高,但正因為這個原因,所以程序員在對sql語句的控制和優(yōu)化方面相對比較弱,而且在將resultset封裝成實體的過程中也采用了反射機制,所以在性能方面較低

Hibernate的運行原理

首先通過configuration去加載hibernate.cfg.xml這個配置文件,根據(jù)

配置文件的信息去創(chuàng)建sessionFactory,sessionFactory是線程安全的,

是一個session工廠,用來創(chuàng)建session,session是線程不安全的,相當(dāng)于

jdbc的connection,最后通過session去進行數(shù)據(jù)庫的各種操作,在進行操作

的時候通過transaction進行事務(wù)的控制。

Hibernate五大核心(類/接口)簡述

1 .Configuration接口的作用是對Hibernate進行配置,以及對它進行啟動。(加載 hibernate.cfg.xml)并創(chuàng)建一個SessionFactory對象。

2 .SessionFactory接口

SessionFactory接口負責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負責(zé)創(chuàng)建 Session對象。SessionFactory是線程安全的。

3 .Session接口

Session(會話)接口是Hibernate應(yīng)用使用的主要接口。Session接口負責(zé)執(zhí)行被持久化對象的CRUD操作(增刪改查)。Session對象是非線程安全的。Session 相當(dāng)于jdbc的connection

4 .Query與Criteria接口

總之Query和Criteria接口負責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。

5 .Transaction接口

Transaction(事務(wù))負責(zé)操作相關(guān)的事務(wù)。

Hibernate與JDBC的區(qū)別

[if !supportLists]1、[endif]hibernate和jdbc主要區(qū)別就是,hibernate先檢索緩存中的映射對象( 即hibernate操作的是對象),而jdbc則是直接操作數(shù)據(jù)庫.

[if !supportLists]2、[endif]Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。Hibernate可以用在任何JDBC可以使用的場合

[if !supportLists]3、[endif]Hibernate是一個和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的Java程序,和App Server沒有任何關(guān)系,也不存在兼容性問題。

4、如果正確的使用JDBC技術(shù),它的執(zhí)行效率一定比hibernate要好,因為hibernate是基于jdbc的技術(shù).

5、JDBC使用的是SQL語句,Hibernate使用的是HQL語句,但是HQL語句最終還會隱式轉(zhuǎn)換成SQL語句執(zhí)行。

Hibernate中的兩大配置文件

*.hbm.xml:主鍵生成策略,映射關(guān)系,一對多,一對一的關(guān)系。

Hibernate.cfg.xml:方言(用哪個數(shù)據(jù)庫),數(shù)據(jù)庫連接信息,包含*.hbm.xml內(nèi)容,映射 文件,也可以配事務(wù)。

Hibernate事務(wù)處理

開啟事務(wù)session.beginTransaction();

執(zhí)行相關(guān)的操作,如果成功則session.getTransaction().commit();

執(zhí)行操作失敗則session.getTransaction.rollback();

H ibernate的三種狀態(tài)以及狀態(tài)的轉(zhuǎn)換

Transient(臨時)

new一個初始化對象后,并沒有在數(shù)據(jù)庫里保存數(shù)據(jù),處于臨時狀態(tài);

Persistent(持久化)

當(dāng)執(zhí)行save()方法,調(diào)用session.close()方法之前,內(nèi)存中的對象與數(shù)據(jù)庫有           對應(yīng)關(guān)系處于持久化狀態(tài);

Detached(托管/游離)

   當(dāng)執(zhí)行session.close()之后,處于托管狀態(tài);

狀態(tài)的轉(zhuǎn)換

處于托管狀態(tài)下,調(diào)用update()方法后,轉(zhuǎn)換為持久化狀態(tài);

在持久化狀態(tài)下,執(zhí)行delete()方法后,轉(zhuǎn)換為臨時狀態(tài);

在未初始化對象之前,調(diào)用get(),load(),find(),iterate()之后,直接進入持久化   狀態(tài)。

分頁步驟

①前臺封裝一個顯示分頁的組件

②查詢總條數(shù)

③后臺封裝分頁工具類,計算開始位置、結(jié)束位置、總頁數(shù)

④后臺寫支持分頁的sql語句

⑤前臺包含分頁組件,實現(xiàn)分頁效果

注意:

查詢總條數(shù)的where和查詢列表信息的where條件要保證一致。

hibernate緩存概述

hibernate分為一級緩存即session緩存也叫事務(wù)級別的緩存以及

二級緩存sessionFactory即應(yīng)用級別的緩存,還有查詢緩存即三級緩存.

一級緩存的生命周期和session的生命周期保持一致,

hibernate默認(rèn)就啟用了一級緩存,

不能將其關(guān)閉,可以通過session.clear()和session.evict(object)來管理一級緩存。其中g(shù)et,load,iterate都會使用一級緩存,一級緩存緩存的是對象。

二級緩存的生命周期和sessionFactory的生命周期保持一致,可以跨session,被多個session共享,hibernate3默認(rèn)開啟二級緩存,也可以手動開啟并指定緩存插件如ehcache,oscache

等。二級緩存也只能緩存對象。

三級緩存也叫查詢緩存,查詢緩存是針對普通屬性結(jié)果集的緩存,

對實體對象的結(jié)果集只緩存id。對query.list()起作用,query.iterate不起作用,也就是query.iterate不使用查詢緩存

如果你依然覺得有些茫然,不如加入我的Java架構(gòu)師之路:766529531 跟有多年Java開發(fā)經(jīng)驗的資深工程師聊一聊。也可獲取免費的視頻學(xué)習(xí)資料以及電子書學(xué)習(xí)資料喔!

Ssh的概述:

ssh是web開發(fā)中常見的一種框架

s-struts2

s-spring

h-hibernate

其中struts2在框架中充當(dāng)控制器,實現(xiàn)MVC,主要用來處理用戶的請求,和跳轉(zhuǎn)頁面。使項目結(jié)構(gòu)清晰,開發(fā)者只需要關(guān)注業(yè)務(wù)邏輯的實現(xiàn)即可。

spring在ssh充當(dāng)粘合劑,粘合struts-sping-hibernate,主要用來進行事物的控制,

hibernate-充當(dāng)數(shù)據(jù)庫持久層,主要用它來與數(shù)據(jù)庫交互,提高開發(fā)效率,減輕程序員sql控制要求,而且hibernate通過反射機制,有靈活的映射性,還支持各種關(guān)系,一對一,一對多,多對多。

在進行ssh整合的時候,我們應(yīng)該注意:

1. Action繼承于ActionSupport

引入struts-spring-plugin.jar包,從而完成struts和spring的整合

在struts2的action中注入service,保證service的名字和配置文件中的一致,并生成get,set方法

Dao層繼承于hibernateDaoSupport

在dao層的配置文件中注入sessionFactory

防止表單重復(fù)提交

針對于重復(fù)提交的整體解決方案:

1.用redirect來解決重復(fù)提交的問題

2.點擊一次之后,按鈕失效

3.通過loading

4.自定義重復(fù)提交過濾器

5.解決struts2重復(fù)提交

可以結(jié)合s:token標(biāo)簽來解決重復(fù)提交問題

利用token的原理:

1.在前端的jsp頁面中加入s:token標(biāo)簽,在訪問該頁面時就會生成

隱藏域,該隱藏域中包含一個隨機生成的字符串,并把該字符串

存入session中

2.在struts2的配置文件中加入token攔截器后,當(dāng)正常訪問action

的時候,會從session中取出該字符串,然后和頁面隱藏域中提交

字符串做對比,如果一致則正常執(zhí)行并刪除session中存儲的字符串。

JSP標(biāo)簽:

1.JSP  include動作

jsp:include動作

以“<jsp: 動作名 ” 開始,以“</jsp:動作名>  ” 結(jié)束

比如:

2.JSP指令:<%@ include%><%@   %>

以“<%@ ” 開始,以“%> ” 結(jié)束。比如:

    <%@ include file = " Filename" %>

3.JSP輸出表達式:<%= %><%=Java表達式 %>

輸出變量的值,后邊不能加<%= ; %>

4.JSP Scriptlet【腳本】:<% ;%>  <% Java 代碼 %>

例子:

    <% Calendar now = Calendar.getInstance(); %>

5.JSP聲明:<%! %> <%! 函數(shù)或者方法 %>

例子:

   <%!

String getHello(String name) {

 return "Hi," + name + "!";

}

   %>

6.迭代標(biāo)簽:<c:foreach>

Jstl中的核心標(biāo)簽(core)

7.JSP注釋:

<%--這也是注釋,但客戶端不能查看到 --%>

el表達式:${}

jsp:include動作是在運行時動態(tài)包含。

  @include指令是在編譯時包含。

  它們兩個都只能包含本項目的相關(guān)文件,不能包含其他項目的。  

   如果要包含其他項目的文件可以使用c:import

過濾器

filter的概述:

filter是一個過濾器,用來在請求前和響應(yīng)后進行數(shù)據(jù)的處理。

 

filter的生命周期是:

實例化--->初始化(init)-->進行過濾(doFilter)--->銷毀(destroy)-->釋放資源

一個Filter必須實現(xiàn)javax.servlet.Filter接口

在項目中我們通常通過filter進行編碼轉(zhuǎn)換,

進行安全驗證,進行重復(fù)提交的判斷。

了解(不需要主動說)

filter 相當(dāng)于 攔截器 相當(dāng)于Spring AOP

servlet+jsp+javabean+jdbc+filter

<filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>org.leopard.filter.EncodingFilter</filter-class>

    <init-param>

      <param-name>encode</param-name>

      <param-value>utf-8</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>*</url-pattern>

</filter-mapping>

攔截器的理解

如果你依然覺得有些茫然,不如加入我的Java架構(gòu)師之路:766529531 跟有多年Java開發(fā)經(jīng)驗的資深工程師聊一聊。也可獲取免費的視頻學(xué)習(xí)資料以及電子書學(xué)習(xí)資料喔!

什么是攔截器:

攔截器是AOP中的概念,它本身是一段代碼,可以通過定義“織入點”,來指定攔截器的代碼在“織入點”的前后執(zhí)行,從而起到攔截的作用

正如上面Struts2的Reference中講述的,Struts2的Interceptor,其攔截的對象是Action代碼,可以定義在Action代碼之前或者之后執(zhí)行攔截器的代碼。

在項目中,我們經(jīng)常用來攔截通過非正常程序而進行的訪問

Struts2的攔截器和Servlet過濾器類似。在執(zhí)行Action的execute方法之前,Struts2會首先執(zhí)行在struts.xml中引用的攔截器,在執(zhí)行完所有引用的攔截器的intercept方法后,會執(zhí)行Action的execute方法。

其中intercept方法是攔截器的核心方法,所有安裝的攔截器都會調(diào)用之個方法。在Struts2中已經(jīng)在struts-default.xml中預(yù)定義了一些自帶的攔截器,如timer、params等。如果在<package>標(biāo)簽中繼承struts-default,則當(dāng)前package就會自動擁有struts-default.xml中的所有配置。代碼如下:

<package name="demo" extends="struts-default" > ... </package>

攔截器是Struts2框架的核心,它主要完成解析請求參數(shù)、將請求參數(shù)賦值給Action屬性、執(zhí)行數(shù)據(jù)校驗、文件上傳等工作

     在struts-default.xml中有一個默認(rèn)的引用,在默認(rèn)情況下(也就是<action>中未引用攔截器時)會自動引用一些攔截器。struts2中默認(rèn)的攔截器是defaultStack.  

自定義攔截器需要特別注意的是不要忘記引入struts2默認(rèn)的攔截器。為了實現(xiàn)某些操作,我們可以自定義攔截器,

自定義攔截器有三種方式定義。分別為實現(xiàn)Interceptor接口,繼承抽象類AbstractInterceptor,繼承MethodFilterInteceptor類。

攔截器在項目中的運用:

同時可以減輕代碼冗余,提高重用率。

如果要求用戶密碼、權(quán)限等的驗證,就可以用自定義的攔截器進行密碼驗證和權(quán)限限制。對符合的登入者才跳轉(zhuǎn)到正確頁面。

Spring融入框架

我們通過在web.xml中配置ContextLoaderListener這個監(jiān)聽器也加載

spring的配置文件,從而融入到項目框架中。

項目的部署方式

1、如果項目單獨部署到tomcat中的時候,應(yīng)該看tomcat中的server.xml;

2、如果和eclipse結(jié)合使用進行項目部署的時候,應(yīng)該看eclipse里面的server.xml.

網(wǎng)頁題目:Java個人技術(shù)知識點總結(jié)(框架篇)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://chinadenli.net/article16/ehsgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作網(wǎng)站維護Google自適應(yīng)網(wǎng)站品牌網(wǎng)站設(shè)計面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化