精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

版本歷史&代碼示例之Servelt、JSP、EL表達(dá)式

開發(fā) 前端
Servlet是一種基于Java的動(dòng)態(tài)Web資源動(dòng)態(tài)Web資源技術(shù),類似的技術(shù)還有ASP、PHP等。Servlet規(guī)范由Sun Microsystems公司創(chuàng)建,1.0版于1997年6月完成。從2.3版開始,該規(guī)范是在JCP下開發(fā)。

[[423628]]

正文

Servlet

Servlet是一種基于Java的動(dòng)態(tài)Web資源動(dòng)態(tài)Web資源技術(shù),類似的技術(shù)還有ASP、PHP等。

  1. <!-- javax命名空間版本(Tomcat 9.x及以下版本支持) --> 
  2. <dependency> 
  3.     <groupId>javax.servlet</groupId> 
  4.     <artifactId>javax.servlet-api</artifactId> 
  5.     <version>4.0.1</version> 
  6.     <scope>provided</scope> 
  7. </dependency> 
  8.  
  9. <!-- jakarta命名空間版本(Tomcat 10.x及以上版本支持) --> 
  10. <dependency> 
  11.     <groupId>jakarta.servlet</groupId> 
  12.     <artifactId>jakarta.servlet-api</artifactId> 
  13.     <version>5.0.0</version> 
  14.     <!-- <version>4.0.4</version> 此版本命名空間同javax --> 
  15.     <scope>provided</scope> 
  16. </dependency> 

版本歷史

Servlet規(guī)范由Sun Microsystems公司創(chuàng)建,1.0版于1997年6月完成。從2.3版開始,該規(guī)范是在JCP下開發(fā)。

版本 發(fā)布日期 隸屬于 JSR版本 焦點(diǎn)說明
1.0 1997.06 - - 首個(gè)版本,由Sun公司發(fā)布
2.0 1997.08 - -  
2.1 1998.11 - - 新增了RequestDispatcher, ServletContext等
2.2 1999.08 J2EE 1.2 - 成為J2EE的一部分。在.war文件中引入了self-contained Web applications的概念
2.3 2001.08 J2EE 1.3 JSR 53 增加了Filter,增加了關(guān)于Session的Listener(如HttpSessionListener)
2.4 2003.08 J2EE 1.4 JSR 154 沒增加大的新內(nèi)容,對不嚴(yán)格的地方加了些校驗(yàn),如:對web.xml使用XML Schema
2.5 2005.09 Java EE 5 JSR 154 最低要求JDK 5。注解支持(如@WebService、@WebMethod等,注意不是@WebServlet這種哦)
3.0 2009.12 Java EE 6 JSR 315 史上最大變革。動(dòng)態(tài)鏈接庫和插件能力(Spring MVC利用此能力通過ServletContainerInitializer進(jìn)行全注解驅(qū)動(dòng)開發(fā))、模塊化開發(fā)、異步Servlet、安全性、新的文件上傳API、支持WebSocket,新的注解(@WebServlet、@WebFilter、@WebListener),可脫離web.xml全注解驅(qū)動(dòng),此版本功能已經(jīng)很完整了,應(yīng)用的主流
3.1 2013.5 Java EE 7 JSR 340 新增非阻塞式IO。Spring的Web Flux若要運(yùn)行在Servlet容器,至少需要此版本,因?yàn)閺拇税姹酒鸩庞蟹亲钄噍斎胼敵龅闹С?/td>
4.0 2017.09 Java EE 8 JSR 369 支持Http/2。從而支持服務(wù)器推技術(shù),新的映射發(fā)現(xiàn)接口HttpServletMapping可用來提高內(nèi)部的運(yùn)行效率
5.0 2020.11 Jakarta EE 9 JSR 369 同Servlet 4.0(只是命名空間從javax.*變?yōu)榱?code style="margin: 0px; padding-top: 0px; padding-right: 5px !important; padding-bottom: 0px; padding-left: 5px !important; outline: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; background-color: rgb(248, 248, 248) !important; color: rgb(255, 131, 110) !important; display: inline !important; border-radius: 3px !important;">jakarta.*而已)

Spring Boot相關(guān):

  • 2.0.0.RELEASE版本(2018.05):正式內(nèi)置Servlet 3.1,畢竟Spring Web Flux從此版本開始(Spring 5)
  • 2.1.0.RELEASE版本(2018.10):升級(jí)到Servlet 4.x,直到現(xiàn)在(2.6.x)也依舊是4.x版本
  • 2.2.0.RELEASE版本(2019.10):開始支持jakarta.servlet這個(gè)GAV,(和javax.servlet)二者并行
  • 2.5.0/2.6.0版本(2021.05):無變化
  • 3.0.0版本(預(yù)計(jì)2022.12):基于Spring 6.x、Jakarta EE 9,基于GraalVM全面擁抱云原生的新一代框架

說明:Spring Boot 2.6和2.7都還會(huì)基于Spring Framework 5.3.x內(nèi)核。Spring Framework 6.0版本在2021年9月正式拉開序幕,將基于全新的Jakarta EE 9(命名空間為jakarta.*,不向下兼容)平臺(tái)開發(fā),相應(yīng)的Spring Boot 3也會(huì)基于此內(nèi)核

生存現(xiàn)狀

隨著Spring 5的發(fā)布推出WebFlux,Servlet技術(shù)從之前的必選項(xiàng)變?yōu)榭蛇x項(xiàng)。

但考慮到業(yè)務(wù)開發(fā)使用WebFlux收益甚微但開發(fā)調(diào)試成本均增加,因此實(shí)際情況是基于Servlet的Spring MVC技術(shù)依舊是主流,暫時(shí)地位不可撼動(dòng),依舊非常活躍。

實(shí)現(xiàn)(框架)

由于Servlet由Web容器負(fù)責(zé)創(chuàng)建并調(diào)用,因此只要實(shí)現(xiàn)了Servlet規(guī)范的Web容器均可作為它的實(shí)現(xiàn)(框架),如Tomcat、Jetty、Undertow、JBoss、Glassfish等。

代碼示例

導(dǎo)入依賴包:

scope一般provided即可,因?yàn)閃eb容器里會(huì)自帶此Jar

Spring Boot場景下無需顯示導(dǎo)入,因?yàn)門omcat已內(nèi)嵌(相關(guān)API)

  1. servlet-api的GAV 

繼承HttpServlet寫一個(gè)用于處理Http請求的Servlet處理器

  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/9/12 06:23 
  7.  * @since 0.0.1 
  8.  */ 
  9. @WebServlet(urlPatterns = {"/hello"}) 
  10. public class HelloServlet extends HttpServlet { 
  11.  
  12.     @Override 
  13.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  14.         resp.getWriter().write("hello servlet..."); 
  15.     } 

IDEA添加(外置)Tomcat 9.x版本,以war包形式部署到Tomcat(小提示: war ),并啟動(dòng)Tomcat

瀏覽器http://localhost:8080/hello即可完成正常訪問。

說明:自Servlet 3.0之后,web.xml部署描述符并非必須(全注解即可搞定)

工程源代碼:https://github.com/yourbatman/BATutopia-java-ee

JSP

Java Server Page的簡稱。那么,有了Servlet為何還需要JSP?其實(shí)它倆都屬于動(dòng)態(tài)Web技術(shù),只是Servlet它用于輸出頁面簡直太繁瑣了(每一句html都需要用resp.getWriter()逐字逐句的輸出),所以才出現(xiàn)了JSP技術(shù)來彌補(bǔ)其不足。

它使用JSP標(biāo)簽在HTML網(wǎng)頁中插入Java代碼。語法格式為:<% Java代碼 %>。它有九大內(nèi)置對象這么一說:

  1. 1、request:請求對象。javax.servlet.http.HttpServletRequest 
  2. 2、response:響應(yīng)對象。javax.servlet.http.HttpServletResponse 
  3. 3、session:會(huì)話對象。javax.servlet.http.HttpSession 
  4. 4、application:應(yīng)用程序?qū)ο蟆avax.servlet.ServletContext 
  5. 5、config:配置對象。javax.servlet.ServletConfig 
  6. 6、page:頁面對象。當(dāng)前jsp程序本身,相當(dāng)于this 
  7. 7、pageContext:頁面上下文對象。javax.servlet.jsp.PageContext 
  8. 8、out:輸出流對象,用于輸出內(nèi)容到瀏覽器。javax.servlet.jsp.jspWriter 
  9. 9、exception:異常對象,只有在包含isErrorPage=”true”的頁面中才可以被使用。java.lang.Throwable 

除了Servlet。與JSP 強(qiáng)相關(guān) 的技術(shù)還有EL表達(dá)式和JSP標(biāo)簽(JSTL),下面會(huì)接著介紹。

  1. <!-- javax命名空間版本(Tomcat 9.x及以下版本支持) --> 
  2. <dependency> 
  3.     <groupId>javax.servlet.jsp</groupId> 
  4.     <artifactId>javax.servlet.jsp-api</artifactId> 
  5.     <version>2.3.3</version> 
  6.     <scope>provided</scope> 
  7. </dependency> 
  8.  
  9. <!-- jakarta命名空間版本(Tomcat 10.x及以上版本支持) --> 
  10. <dependency> 
  11.     <groupId>jakarta.servlet.jsp</groupId> 
  12.     <artifactId>jakarta.servlet.jsp-api</artifactId> 
  13.     <version>3.0.0</version> 
  14.     <!-- <version>2.3.6</version> 此版本命名空間同javax --> 
  15.     <scope>provided</scope> 
  16. </dependency> 

版本歷史

由于JSP的本質(zhì)就是Servlet,它的的版本號(hào)需要與Servlet對應(yīng)看待。

版本 發(fā)布日期 JSR版本 對應(yīng)Servlet版本
JSP 1.1 2000.07 JSR 906 Servlet 2.2
JSP 1.2 2002.06 JSR 53 Servlet 2.3
JSP 2.0 2003.11 JSR 152 Servlet 2.4
JSP 2.1 2005.09 JSR 245 Servlet 2.5
JSP 2.2 2009.12 JSR 245(升級(jí)版) Servlet 3.0
JSP 2.3 2013.05 JSR 372(升級(jí)版) Servlet 3.1
JSP 3.0 2020.11 ----(Jakarta旗下) Servlet 5.x

Spring Boot相關(guān):Spring Boot從1.x版本開始就一直沒有“帶”JSP一起玩,若要Spring Boot支持JSP需要特殊開啟。

JSP 2.0是個(gè)重要版本,最重要的特性就是開始支持EL表達(dá)式了,可以用它來訪問應(yīng)用程序數(shù)據(jù)。JSP 2.3版本可斷定是最后一個(gè)版本,因?yàn)镴SP已走到盡頭,成為歷史。

生存現(xiàn)狀

JSP誕生之后,程序員寫頁面寫得確實(shí)很爽了。但是,它帶來了壞處:很多程序員同學(xué)將業(yè)務(wù)邏輯、頁面展示邏輯都往JSP塞,耦合在一起,導(dǎo)致JSP扛不住了,更重要的是程序員扛不住了,非常凌亂。

雖然后面出現(xiàn)了EL表達(dá)式和JSTL標(biāo)簽來幫助程序員不要在JSP里寫Java代碼,但只要不是強(qiáng)制的你能限制住自由的程序員么?然后呢,后來出現(xiàn)了Freemarker和Velocity這種模板引擎,使得程序員沒有辦法在頁面上寫Java代碼了,達(dá)到了分離的效果。

模板引擎出現(xiàn)后,JSP的地位已經(jīng)岌岌可危了。但真正殺死它的還是前端的崛起,從而進(jìn)入前后端完全分離的狀態(tài),至此基本可以宣布JSP(甚至包括模板引擎)的死亡。

所以JSP目前的生存狀態(tài)是:基本死亡狀態(tài)。你看,這不Spring Boot(默認(rèn))都不帶他玩了嘛~

實(shí)現(xiàn)(框架)

與Servlet相同的Web容器。

代碼示例

導(dǎo)包。由于我們不可能直接使用JSP的API,因此99.9999%情況下無需導(dǎo)包。

  1. 無需導(dǎo)包 

創(chuàng)建webapp內(nèi)容文件夾。這點(diǎn)很重要,因?yàn)槭且獎(jiǎng)?chuàng)建一個(gè)web文件夾,以IDEA為例:在jsp-demo工程下添加web模塊圖片圖片完成后工程目錄結(jié)構(gòu)如下:

完成后工程目錄結(jié)構(gòu)如下:

值得一提的是:web目錄名稱叫什么無所謂(只是很多喜歡叫webapp、webroot等),重要的是要有這個(gè)小圓點(diǎn)。不乏聽見不少小伙伴說這個(gè)目錄名必須叫webapp,其實(shí)它名字叫什么、甚至位置放在哪都無所謂,重要是找得到就行。掌握原理,一通百通。

這里附上HelloJsp的內(nèi)容:

  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/9/12 06:26 
  7.  * @since 0.0.1 
  8.  */ 
  9. @WebServlet(urlPatterns = {"/hellojsp"}) 
  10. public class HelloJsp extends HttpServlet { 
  11.  
  12.     @Override 
  13.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  14.         RequestDispatcher requestDispatcher = request.getRequestDispatcher("hello.jsp"); 
  15.         // 放在WBE-INF下面的.jsp頁面必須通過Servlet轉(zhuǎn)發(fā)才能訪問到,更加安全 
  16.         // RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/hello.jsp"); 
  17.         requestDispatcher.forward(request, response); 
  18.     } 

以war包形式部署至Tomcat圖片瀏覽器訪問下面兩個(gè)路徑均可得到響應(yīng)結(jié)果:

  • http://localhost:8080/hellojsp:請求 -> Servlet轉(zhuǎn)發(fā) -> jsp頁面(即使jsp頁面放到WEB-INF目錄下依舊可訪問)
  • http://localhost:8080/hello.jsp:請求 -> jsp頁面(此直接方式只能訪問非WEB-INF目錄下的jsp文件)

頁面響應(yīng):

再強(qiáng)調(diào)一遍:自Servlet 3.0之后,web.xml部署描述符并非必須。即使有jsp頁面也是一樣~~~

工程源代碼:https://github.com/yourbatman/BATutopia-java-ee

EL表達(dá)式

Expression Language表達(dá)式語言。EL表達(dá)式語言的靈感來自于ECMAScript和XPath表達(dá)式語言(表達(dá)式語言當(dāng)然還有比較著名的Spring的SpEL,以及OGNL),它提供了在 JSP 中簡化表達(dá)式的方法,目的是替代掉在Jsp里寫Java代碼,讓Jsp的代碼更加簡化。

基本語法為:${EL表達(dá)式 },只能讀取數(shù)據(jù)不能設(shè)置數(shù)據(jù)(設(shè)置數(shù)據(jù)用JSP內(nèi)或者Servlet里的Java代碼均可)

請務(wù)必注意,基本語法中右邊的}的前面有個(gè)空格,使用時(shí)請務(wù)必注意

在EL中有四大域?qū)ο蠛?1大內(nèi)置對象這么一說:

  • 請求參數(shù)
  1. 1、param 包含所有的參數(shù)的Map,可以獲取參數(shù)返回String。其底層實(shí)際調(diào)用request.getParameter() 
  2.  - name=${param.name } 
  3. 2、paramValues 包含所有參數(shù)的Map,可以獲取參數(shù)的數(shù)組返回String[]。其底層實(shí)際調(diào)用request.getParameterValues() 
  4.  - hobby[0]=${paramValues.hobby[0] } 
  • 頭信息
  1. 3、header 包含所有的頭信息的Map,可以獲取頭信息返回String。 
  2.  - ${header.Connection } 
  3. 4、headerValues 包含所有的頭信息的Map,可以獲取頭信息數(shù)組返回String[]。 
  4.  - ${headerValues["user-agent"][0] } 
  • Cookie
  1. 5、cookie包含所有cookie的Map,key為Cookie的name屬性值 
  2.  - ${cookie.JSESSIONID.name } 
  • 初始化參數(shù)
  1. 6、iniParam 包含所有的初始化參數(shù)(一般配在web.xml里)的Map,可以獲取初始化的參數(shù) 
  2.  - ${initParam.username} ${initParam.password
  • 四大作用域(重點(diǎn))
  1. 7、pageScope 包含page作用域內(nèi)的Map 
  2.  - ${pageScope.name } 
  3. 8、requestScope 包含request作用域內(nèi)的Map 
  4.  - ${requestScope.name } 
  5. 9、 包含session作用域內(nèi)的Map 
  6.  - ${sessionScope.name } 
  7. 10、applicationScope 包含application作用域內(nèi)的Map 
  8.  - ${applicationScope.name } 
  • 頁面上下文
  1. 11、pageContext 包含頁面內(nèi)的變量的Map,可獲取JSP中的九大內(nèi)置對象 
  2.  - ${pageContext.request.scheme } 
  3.  - ${pageContext.session.id} 
  1. <!-- javax命名空間版本(Tomcat 9.x及以下版本支持) --> 
  2. <dependency> 
  3.     <groupId>javax.el</groupId> 
  4.     <artifactId>javax.el-api</artifactId> 
  5.     <version>3.0.0</version> 
  6. </dependency> 
  7.  
  8. <!-- jakarta命名空間版本(Tomcat 10.x及以上版本支持) --> 
  9. <dependency> 
  10.     <groupId>jakarta.el</groupId> 
  11.     <artifactId>jakarta.el-api</artifactId> 
  12.     <version>4.0.0</version> 
  13.     <!-- <version>3.0.3</version> 此版本命名空間同javax --> 
  14. </dependency> 
  15.  
  16. 除此之外,還可以通過Tomcat的GAV直接導(dǎo)入,版本號(hào)同Tomcat 
  17. <dependency> 
  18.     <groupId>org.apache.tomcat</groupId> 
  19.     <artifactId>tomcat-el-api</artifactId> 
  20.     <version>Tomcat版本號(hào)</version> <!-- 9.x版本是javax.*,10.x以及后面是jakarta.* --> 
  21. </dependency> 
  22. 嵌入式Tomcat提供的實(shí)現(xiàn) 
  23. <dependency> 
  24.     <groupId>org.apache.tomcat.embed</groupId> 
  25.     <artifactId>tomcat-embed-el</artifactId> 
  26.     <version>Tomcat版本號(hào)</version> <!-- 9.x版本是javax.*,10.x以及后面是jakarta.* --> 
  27. </dependency> 
  28.  
  29. 另外,還有二合一的GAV:3.x版本的API和impl實(shí)現(xiàn)都在一個(gè)jar里。 
  30. 4.x使用jakarta.*命名空間,并且API分離(依賴于)jakarta.el-api 
  31. <dependency> 
  32.     <groupId>org.glassfish</groupId> 
  33.     <artifactId>jakarta.el</artifactId> 
  34.     <version>4.0.2</version> 
  35.     <!-- <version>3.0.3</version> 此版本命名空間同javax --> 
  36. </dependency> 

值得注意的是,EL并非Web獨(dú)享而是可獨(dú)立使用,因此它的scope用默認(rèn)的即可。另外,這只是API,并非Impl實(shí)現(xiàn),是不能直接運(yùn)行的,否則會(huì)遇到類似如下異常:

  1. Caused by: javax.el.ELException: Provider com.sun.el.ExpressionFactoryImpl not found 
  2.  at javax.el.FactoryFinder.newInstance(FactoryFinder.java:101) 
  3.  ... 

版本歷史

EL從JSP 2.0版本開始引入,用于在JSP頁面獲取數(shù)據(jù)的簡單方式。因此它是隨著JSP的發(fā)展而出現(xiàn)的,只是可獨(dú)立使用而已。

版本 發(fā)布日期 JSR版本 對應(yīng)JSP版本 對應(yīng)Servlet版本
EL 2.0 2003.11 JSR 152 JSP 2.0 Servlet 2.4
EL 2.2 2009.12 JSR 245 JSP 2.2 Servlet 2.5
EL 3.0 2013.05 JSR 341 JSP 2.3 Servlet 3.1
EL 4.0 2020.10 納入Jakarta JSP 3.0 Servlet 5.0

EL表達(dá)式3.0于2013年4月份發(fā)布(可認(rèn)為是最后一次功能升級(jí)),它的新特性包括:字符串拼接操作符、賦值(以前只能讀取,現(xiàn)在可以賦值啦)、分號(hào)操作符、對象方法調(diào)用(以前只能用JavaBean屬性導(dǎo)航)、Lambda表達(dá)式、靜態(tài)字段/方法調(diào)用、構(gòu)造器調(diào)用、Java8集合操作。具體就不一一舉例了,詳細(xì)情況可閱讀我收錄的JSR文檔。

生存現(xiàn)狀

隨著JSP的消亡,EL的存在感越來越弱。

好在它可以作為單獨(dú)的表達(dá)式語言使用,有Hibernate Validator對它是強(qiáng)依賴,所以生命力還行。但由于Hibernate Validator里使用得簡單,所以EL并沒有必要再更新(動(dòng)力不足)。

實(shí)現(xiàn)(框架)

EL大部分情況下伴隨著JSP一起使用,所以交由Web容器去解析實(shí)現(xiàn)。

另外,EL作為一種表達(dá)式語言,也可以作為”工具“供以使用,比如著名的Hibernate Validator內(nèi)部就依賴于EL表達(dá)式語言來書寫校驗(yàn)規(guī)則(所以它在編譯期就強(qiáng)依賴于EL的API)。

代碼示例

在JSP中使用EL是由org.apache.tomcat:tomcat-jasper-el或者org.apache.tomcat.embed:tomcat-embed-jasper完成和JSP的整合,以及解析支持的。在JSP頁面里使用方式由于已經(jīng)過時(shí)(主要是使用示例一搜一大把),這里為了節(jié)約篇幅,就略了哈。

如果把EL當(dāng)做工具使用的話(比如Hibernate Validator用來錯(cuò)誤消息里插值用),需要了解一些API和常見用法,演示一下:

導(dǎo)包:

  1. 上面的GAV隨便選一個(gè)(記得太impl實(shí)現(xiàn),推薦org.glassfish:jakarta.el) 

直接使用API書寫Demo

  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/9/12 10:12 
  7.  * @since 0.0.1 
  8.  */ 
  9. public class ElDemo { 
  10.  
  11.     public static void main(String[] args) { 
  12.         ExpressionFactory factory = ELManager.getExpressionFactory(); 
  13.         StandardELContext elContext = new StandardELContext(factory); 
  14.  
  15.         // 將instance轉(zhuǎn)為對應(yīng)類型 
  16.         ValueExpression valueExpression = factory.createValueExpression("18"Integer.class); 
  17.         System.out.println(valueExpression.getValue(elContext)); 
  18.  
  19.         // 計(jì)算表達(dá)式的值 
  20.         valueExpression = factory.createValueExpression(elContext, "${1+1}"Integer.class); 
  21.         System.out.println(valueExpression.getValue(elContext)); 
  22.  
  23.         // 方法調(diào)用 
  24.         // MethodExpression methodExpression = factory.createMethodExpression(elContext, "${Math.addExact()}"Integer.class, new Class[]{Integer.class, Integer.class}); 
  25.         // System.out.println(methodExpression.invoke(elContext, new Object[]{1, 2})); 
  26.     } 
  27.  
  28.  
  29. 運(yùn)行,結(jié)果輸出: 
  30. 18 

工程源代碼:https://github.com/yourbatman/BATutopia-java-ee

總結(jié)

現(xiàn)在越來越卷的IT行業(yè),衡量一個(gè)求職者的專業(yè)能力,深度往往比廣度更為重要。

正所謂這輩子聽過很多大道理,卻依舊過不好這一生;技術(shù)也一樣,聽過/知道過/使用過很多技術(shù),但依舊寫不出好的代碼。究其原因,就是理解不深刻。 

自上而下的用,自底向上的學(xué),這是我個(gè)人一直秉承的一個(gè)觀念。知道一門技術(shù)、使用一門技術(shù)一般幾個(gè)小時(shí)or幾天就能大概搞定(畢竟如果一門技術(shù)入門很難的話也幾乎不太可能大眾化的流行起來),而理解一門技術(shù)的單位可能就是月、甚至是年了,這需要靜下心來學(xué)習(xí)和研究。

 

責(zé)任編輯:武曉燕 來源: BAT的烏托邦
相關(guān)推薦

2009-08-13 09:47:57

調(diào)用JSP EL表達(dá)式帶參數(shù)方法

2009-07-06 15:20:30

JSP表達(dá)式

2021-10-19 08:23:43

JMXJava 管理擴(kuò)展

2021-09-15 18:54:22

BATutopia-JWebSocket

2009-07-03 17:52:17

JSP2.0

2009-07-03 18:31:04

JSP表達(dá)式

2009-08-07 14:24:31

.NET正則表達(dá)式

2019-03-13 08:56:07

JavaSpEL表達(dá)式注入

2021-10-11 08:51:50

JavaMailJDBCJava

2009-12-14 11:33:59

Ruby正則表達(dá)式

2021-10-08 06:50:32

版本歷史代碼

2021-10-25 08:16:20

Java JAX-RS Java 基礎(chǔ)

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2009-11-30 17:22:24

PHP正則表達(dá)式多行匹

2015-08-04 09:16:20

JavaLambda表達(dá)式

2014-01-05 17:41:09

PostgreSQL表達(dá)式

2009-06-08 16:49:05

Java正則表達(dá)式group

2009-08-10 10:06:10

.NET Lambda

2024-06-27 00:36:06

2012-04-28 15:22:46

PHP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美一乱一性一交一视频| 日韩一卡二卡三卡| 一区二区精品在线| www.五月天激情| 美女精品一区| 理论片在线不卡免费观看| 日本一区二区在线免费观看| 日本精品裸体写真集在线观看| 亚洲摸摸操操av| 久久综合九色99| jizz国产视频| 欧美a级理论片| 久久久久久久久久国产精品| 农村老熟妇乱子伦视频| 久久亚州av| 欧美一区午夜视频在线观看| aaaaaa亚洲| 国语对白在线刺激| 国产精品区一区二区三| 精品国产综合久久| 99久久国产免费| 视频一区中文字幕国产| 亚洲青青一区| 欧美资源在线| 欧美另类第一页| 亚洲国产av一区| av自拍一区| 欧美久久久久中文字幕| 日韩手机在线观看视频| 都市激情国产精品| 一区二区三区四区av| 亚洲精品自在在线观看| 天堂资源中文在线| 久久久久99精品成人片我成大片| 国产成人tv| 欧美一级二级在线观看| 日本久久久久久久久久久久| 伊人成综合网站| 亚洲成人动漫av| 好吊色视频988gao在线观看| 麻豆tv免费在线观看| 国产欧美日韩另类视频免费观看 | 亚洲成人av免费| 亚洲xxx视频| 97在线播放免费观看| 日韩激情一二三区| 国产va免费精品高清在线| 五月婷婷中文字幕| 一区二区高清| 97在线观看视频国产| 日本学生初尝黑人巨免费视频| 亚洲综合中文| 久久久国产精品免费| 精品无码一区二区三区蜜臀| 91成人超碰| 精品少妇v888av| 麻豆成人在线视频| 欧美色一级片| 88国产精品欧美一区二区三区| 日本三级黄色大片| 国产日韩欧美三区| 青青久久aⅴ北条麻妃| av片免费观看| 九色|91porny| 国产91aaa| 亚洲aⅴ乱码精品成人区| 激情av在线| 亚洲国产岛国毛片在线| 亚洲欧美日韩国产成人综合一二三区| 精品国产一区二区三区麻豆小说| 国产在线拍揄自揄拍| 18成人免费观看视频| 91av在线不卡| 在线视频免费观看一区| 国产在线播精品第三| 成人免费观看网站| 日本午夜在线视频| 亚洲国产精品成人综合 | 国产免费中文字幕| 日本高清久久| 亚洲美女久久久| 亚洲色图27p| 激情久久五月| 国产精品高清网站| www.色播.com| 国产肉丝袜一区二区| 日本xxxxx18| 三级在线看中文字幕完整版| 欧美久久一区二区| 国产极品一区二区| 久久免费av| 韩日精品中文字幕| 国产裸体美女永久免费无遮挡| 国产精品18久久久久久久网站| 久久久久网址| 成人黄色在线电影| 色婷婷综合久久久久中文一区二区| 亚洲美女爱爱视频| 免费日韩一区二区三区| xxxxx成人.com| 五月婷婷亚洲综合| 国产一区二区不卡老阿姨| 蜜桃视频日韩| 日韩三级免费| 欧美精选午夜久久久乱码6080| 国产精品久久不卡| 欧美.www| 国产在线观看91精品一区| 亚洲欧美日韩综合在线| 中文字幕在线不卡国产视频| 日韩 欧美 高清| 亚洲一区网址| 久久精品国产亚洲一区二区| 精品人妻无码一区二区性色| 国产成人自拍网| 中文一区一区三区免费| 成人va天堂| 精品久久国产字幕高潮| 综合五月激情网| 麻豆成人av在线| 日韩国产伦理| 中文字幕在线中文字幕在线中三区| 日韩精品影音先锋| 99久久久免费精品| 蜜臀av一区二区三区| 欧洲精品码一区二区三区免费看| 91探花在线观看| 欧美成人a在线| 亚洲不卡在线播放| 韩国一区二区三区| 五月天亚洲综合| 欧美中文字幕精在线不卡| 日韩成人中文电影| 日韩成人免费在线观看| 成人午夜av电影| 日韩久久久久久久久久久久| 精品午夜av| 麻豆成人在线看| 中文 欧美 日韩| 欧美韩日一区二区三区| 久久黄色免费看| 国产99亚洲| 日韩女优在线播放| 日本韩国一区| 色婷婷精品大视频在线蜜桃视频| 亚洲av无码一区二区二三区| 午夜在线视频一区二区区别| 久久久久久亚洲精品不卡4k岛国 | 婷婷丁香激情综合| av天堂一区二区| 亚洲精品1234| 精品欧美一区二区久久久伦| 中文在线中文资源| 亚洲午夜小视频| 伊人成人在线观看| 亚洲色大成网站www久久九九| 激情成人在线观看| 欧美日韩一卡| 国产一区免费观看| 国产日韩电影| 视频在线观看一区二区| 国产精品伦一区二区三区| 亚洲精品日韩综合观看成人91| 中文字幕乱妇无码av在线| 精品福利电影| 欧美精品亚洲| julia一区二区三区中文字幕| 日韩在线视频一区| 亚洲第一页视频| 懂色av中文一区二区三区天美| 国产综合精品在线| 国精产品一区一区三区mba桃花 | 青春草视频在线| 亚洲第一区中文99精品| 午夜精品一区二| 最好看的中文字幕久久| 国产污在线观看| 日韩av一二三| 欧美另类videosbestsex日本| 久久亚洲黄色| 国产精品综合久久久| 青草在线视频| 中文字幕欧美日韩精品| 精品人妻一区二区三区麻豆91 | 欧美激情性做爰免费视频| 天天操天天干天天插| 欧美色老头old∨ideo| 久久久无码一区二区三区| 久久精品一级爱片| 免费观看黄网站| 肉肉av福利一精品导航| 欧美做受777cos| 天堂一区二区三区四区| 成人午夜黄色影院| 英国三级经典在线观看| 欧美精品午夜视频| 久久久久久久久亚洲精品| 日韩一级片网址| 免费看一级视频| 亚洲综合免费观看高清完整版在线| 91网站免费视频| 国产成人精品免费在线| 日本肉体xxxx裸体xxx免费| 日韩一区二区免费看| dy888午夜| 日韩av有码| 开心色怡人综合网站| 日韩在线精品强乱中文字幕| 国产精品日韩久久久久| 精品众筹模特私拍视频| 日韩中文字幕在线观看| 欧美偷拍视频| 亚洲成人精品视频在线观看| 国产精品久久免费| 欧美性大战xxxxx久久久| 国偷自拍第113页| 亚洲综合一区二区三区| 欧美肥妇bbwbbw| 欧美激情一区三区| 波多野结衣办公室33分钟| 国产成人精品一区二区三区网站观看| 国产高潮免费视频| 蜜桃av一区| 欧美变态另类刺激| 在线综合亚洲| 97视频在线免费| 欧美黄色精品| 男人的天堂视频在线| 欧美oldwomenvideos| 少妇免费毛片久久久久久久久| 亚洲制服一区| 蜜桃精品久久久久久久免费影院 | 26uuu精品一区二区| 午夜影院福利社| 豆国产96在线|亚洲| 杨幂一区二区国产精品| 国产又粗又猛又爽又黄91精品| 97超碰成人在线| 国产综合色产在线精品| 日本一二三区在线| 国产真实乱子伦精品视频| 一级黄色片在线免费观看| 国产一区二区三区高清播放| 国产精品嫩草影视| 国产凹凸在线观看一区二区| 国产精品成人免费一区久久羞羞| 国产裸体歌舞团一区二区| 久草福利在线观看| 国产91精品一区二区麻豆网站| 夜夜爽久久精品91| 成人av电影免费观看| 日韩aaaaa| 久久久99免费| 欧美激情久久久久久久| 一色屋精品亚洲香蕉网站| 国产色无码精品视频国产| 亚洲欧美一区二区三区极速播放 | 日本中文在线视频| 亚洲综合激情网| 日韩三级小视频| 色哟哟国产精品| 亚洲中文字幕在线观看| 欧美一区在线视频| 天天干天天爽天天操| 亚洲老头同性xxxxx| 97电影在线| 色综合色综合久久综合频道88| av在线不卡免费| 日本精品视频在线| 婷婷久久综合九色综合99蜜桃| 亚洲影院污污.| 美国一区二区| 亚洲春色在线视频| 欧美.www| 日韩中文字幕二区| 国产精品一区二区无线| 深爱五月激情网| 亚洲天堂免费看| 国产精品7777777| 欧美男生操女生| 日韩中文字幕免费观看| 国产香蕉精品视频一区二区三区| 国产原创精品视频| 51精品国产黑色丝袜高跟鞋 | 国产精选在线观看91| 国产成人ay| 成人免费在线网| 老司机精品视频一区二区三区| 亚洲精品久久一区二区三区777| 久久久久久久久一| 欧美另类视频在线观看| 色噜噜夜夜夜综合网| 国内精品久久久久久久久久| 亚洲欧美日韩精品| 在线电影福利片| 国产精品免费一区二区三区都可以| 99久久香蕉| 一区二区三区的久久的视频| 日韩香蕉视频| 熟妇无码乱子成人精品| 久久久高清一区二区三区| 久久一区二区三| 欧美日韩另类一区| 91大神精品| 精品国产乱码久久久久| 日韩精品免费一区二区在线观看 | 久久精品日产第一区二区| 涩多多在线观看| 中文字幕免费一区| 久草视频在线观| 精品国产髙清在线看国产毛片| 永久免费av片在线观看全网站| 91a在线视频| 一区二区三区四区高清视频 | 国产日韩在线一区二区三区| 欧美hd在线| www.欧美日本| 久久综合色天天久久综合图片| 黄色一级视频免费| 91精品国产高清一区二区三区 | 日本亚洲欧洲色α| www国产精品| 免费观看亚洲视频| 黄页视频在线91| 精品无码一区二区三区蜜臀| 欧美在线观看18| 毛片免费在线播放| 欧美孕妇毛茸茸xxxx| 日韩精品免费一区二区夜夜嗨| 国产女主播自拍| 精品一区二区久久久| 黄色一级片播放| 成人精品视频.| 久久久久久久9999| 日韩免费在线观看| 欧美激情黑人| 国产剧情久久久久久| 成人羞羞动漫| 手机视频在线观看| 国产欧美一区二区精品久导航 | 国产一二三av| 欧美在线制服丝袜| www.亚洲免费| 国产精品免费电影| 久久精品高清| 亚洲高清视频免费| 亚洲精品美腿丝袜| 成人激情四射网| 韩国一区二区电影| 日韩欧美影院| 国产97免费视| 亚洲成人久久精品| 欧美俄罗斯乱妇| 国产精品中文字幕制服诱惑| 日本午夜激情视频| 91麻豆精品在线观看| av一级在线观看| 中文字幕精品—区二区| 日日夜夜精品| 久久香蕉视频网站| www.成人在线| 亚洲大片免费观看| 久久精品电影网站| 亚洲国产一区二区三区网站| 无码专区aaaaaa免费视频| 久久久噜噜噜久噜久久综合| 国产成人精品777777| 日韩亚洲成人av在线| 日韩中文字幕一区二区高清99| 久久亚洲精品无码va白人极品| 99r国产精品| 中文字幕第2页| 九九热精品在线| 欧美调教在线| 三级在线免费看| 亚洲精品日韩综合观看成人91| 五十路在线视频| 国产美女精彩久久| 国产精品v欧美精品v日本精品动漫| 朝桐光av一区二区三区| 欧美少妇性性性| 超清av在线| 污视频在线免费观看一区二区三区| 狠狠色狠狠色综合系列| 国产精品久久久久久99| 日韩视频免费看| 图片婷婷一区| 毛片毛片毛片毛片毛| 色婷婷综合五月| 午夜伦理在线视频| 日韩偷拍一区二区| 成人网男人的天堂| 在线观看国产小视频| 97国产精品免费视频| 2023国产精品久久久精品双| 午夜理伦三级做爰电影| 日韩欧美专区在线| 国产精品久久久久久吹潮| 国产美女在线一区| 中文字幕一区二区三区不卡|