精品欧美一区二区三区在线观看 _久久久久国色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)

亚洲激情一区| 精品国产麻豆| 国产精品久久午夜| 147欧美人体大胆444| 日韩经典在线观看| 精品中文一区| 欧美一区二区精品在线| 欧美 丝袜 自拍 制服 另类| av中文资源在线| 国产v综合v亚洲欧| 国产精品久久久久久一区二区| 久久国产美女视频| 精品一区在线| 欧美r级电影在线观看| 人妻无码视频一区二区三区| fc2ppv国产精品久久| www国产精品av| 91香蕉嫩草影院入口| 日韩一区二区视频在线| 综合视频在线| 一本久久综合亚洲鲁鲁| 亚洲一区二区在线免费| 色综合一区二区日本韩国亚洲| 五月激情六月综合| 日韩国产精品毛片| av网站在线免费观看| 99视频超级精品| 147欧美人体大胆444| 亚洲 国产 日韩 欧美| 亚洲黄色精品| 欧美老妇交乱视频| 污污视频网站在线免费观看| 亚欧洲精品视频在线观看| 日韩欧美你懂的| 亚洲综合色在线观看| 亚洲精品中文字幕| 五月综合激情日本mⅴ| 男人天堂新网址| 欧美13一16娇小xxxx| 国产亚洲欧美日韩日本| 欧美激情论坛| 欧美午夜黄色| 91在线观看污| 极品尤物一区二区三区| www.四虎在线观看| 国产乱码精品一区二区三| 在线观看日韩精品| 男人添女人下面高潮视频| 高清电影在线观看免费| 一区二区三区在线视频观看| 99久re热视频精品98| 快射视频在线观看| 亚洲欧洲精品天堂一级| 亚洲制服中文| 亚洲1卡2卡3卡4卡乱码精品| 国产精品网站在线观看| 亚洲.欧美.日本.国产综合在线| 青青青手机在线视频观看| fc2成人免费人成在线观看播放| 成人精品一二区| 国产精品无码久久久久成人app| 奇米精品一区二区三区在线观看| 国产精品露脸av在线| 99re热视频| 美腿丝袜在线亚洲一区| 成人精品一区二区三区| 国产精品无码免费播放| 国产成人精品1024| 国产视色精品亚洲一区二区| 亚洲av电影一区| 91麻豆国产福利精品| 欧美国产综合视频| 日本在线视频网| 亚洲视频免费在线| 超碰成人免费在线| 久久sese| 在线不卡a资源高清| 亚洲天堂网2018| 一区二区三区亚洲变态调教大结局| 日韩欧美亚洲另类制服综合在线| 国产免费一区二区三区最新6| 欧美影院天天5g天天爽| 中文日韩在线观看| 久久久99精品| 欧美资源在线| 成人淫片在线看| 欧美 日韩 国产 成人 在线 | 少妇网站在线观看| 国产中文欧美日韩在线| 亚洲精品xxx| 亚洲综合第一区| 欧美精品aa| 日韩美女视频免费看| 国产精品久久久午夜夜伦鲁鲁| 国产精品一品视频| 欧美日韩一区在线播放| 操你啦视频在线| 欧美性色19p| 天天操天天干天天做| 国产三级精品三级在线观看国产| 国产一区二区三区日韩欧美| 国产精品久久久精品四季影院| 国产毛片一区| 91夜夜揉人人捏人人添红杏| 色视频在线看| 亚洲精品乱码久久久久久日本蜜臀| 黄色一级视频在线播放| 免费一级欧美在线观看视频| 亚洲国产精品成人va在线观看| 亚洲精品91在线| 在线播放不卡| 91美女高潮出水| 蝌蚪视频在线播放| 亚洲国产另类精品专区| 三上悠亚在线一区| 国产精品一区高清| 久久免费精品视频| 99国产精品欲| 中文字幕不卡在线播放| 男人靠女人免费视频网站| 久久亚洲精精品中文字幕| 亚洲欧美制服丝袜| 97超碰人人干| 国产98色在线|日韩| 一区精品视频| 97欧美成人| 亚洲色图50p| 亚洲欧美日韩激情| av在线一区二区| 91成人综合网| 一区二区三区视频播放| 欧美精品日韩三级| 国产又粗又猛又爽又黄91| 国产欧美日韩亚州综合 | 女海盗2成人h版中文字幕| 日韩欧美国产高清| 久久中文免费视频| 久久国产生活片100| 青青草成人激情在线| 小早川怜子影音先锋在线观看| 欧美成人精品高清在线播放| 999精品在线视频| 日韩不卡在线观看日韩不卡视频| 久久国产手机看片| 瑟瑟视频在线看| 精品视频一区在线视频| 精品欧美一区二区三区免费观看 | 欧美xxxxhdvideosex| 欧美一区二区免费| 欧美成人免费看| 国产成人综合自拍| 国产爆乳无码一区二区麻豆| 91麻豆精品国产综合久久久| x99av成人免费| 国产精品国产精品国产专区| 成人免费在线播放视频| 一级黄色片在线免费观看| 午夜精品久久久久久久四虎美女版| 国产欧美一区二区| 精产国品自在线www| 欧美一区二区三区影视| 久久精品一区二区三| 波多野结衣在线一区| 国产精品无码av在线播放| 亚洲精品国产动漫| 国产精品久久久久久久久久新婚 | 中文字幕日本乱码精品影院| 亚洲男人天堂av在线| 仙踪林久久久久久久999| 91入口在线观看| 黄色视屏在线免费观看| 亚洲色图13p| 一级片在线免费观看视频| 亚洲欧美日韩国产手机在线 | 国产精品chinese在线观看| 性色av一区二区三区红粉影视| 欧美777四色影视在线| 欧美午夜在线一二页| caoporn91| 99riav久久精品riav| 美女网站视频黄色| 午夜精品久久| 麻豆视频成人| 亚洲伊人精品酒店| 国内伊人久久久久久网站视频 | 国产女同互慰高潮91漫画| 在线视频观看一区二区| 日韩亚洲精品在线| 亚洲精品乱码久久久久久蜜桃91 | 久久99久久久| 久久精品欧美日韩精品| 杨幂一区二区国产精品| 日一区二区三区| 久久免费视频2| 天天做夜夜做人人爱精品| 91精品久久久久久久| 日本不卡1234视频| 麻豆一区二区在线观看| 你懂的视频在线| 欧美大片免费久久精品三p| 日韩黄色片网站| 亚洲国产日韩av| 亚洲欧美综合7777色婷婷| 成人av电影在线| 精品亚洲视频在线| 天堂蜜桃91精品| 国产日产欧美精品| www.综合| 久久精品国产精品| 精品电影在线| 精品动漫一区二区三区在线观看 | 日韩欧美一区二区免费| 销魂美女一区二区| 亚洲成av人影院| 破处女黄色一级片| 中文字幕一区视频| 在线观看日本中文字幕| www.66久久| 老司机av网站| 精品一区二区三区不卡| 538在线视频观看| 久久亚洲不卡| 波多野结衣之无限发射| 欧美三级不卡| 中文字幕色呦呦| 天天综合国产| 亚洲精品一区二区三区四区五区 | 国产精品亚洲综合在线观看| 国产精品福利网| 天天综合网天天| 日本欧美国产在线| 无遮挡在线观看| 亚洲18私人小影院| 黄视频网站在线观看| 久久久久久久久爱| 欧美xxxx少妇| 久久久久亚洲精品| jizz一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 麻豆网站视频在线观看| 在线观看国产精品日韩av| 国产专区在线| 在线看日韩av| 在线免费看黄网站| 色先锋资源久久综合5566| 中文字幕欧美人妻精品| 精品久久久视频| 成人免费区一区二区三区| 午夜视频一区二区三区| 欧美激情亚洲综合| 狠狠爱在线视频一区| 黄色大片网站在线观看| 色噜噜狠狠成人中文综合| 青青操免费在线视频| 精品日本高清在线播放| 69国产精品视频免费观看| 欧美视频在线观看 亚洲欧| 亚洲欧美综合另类| 在线观看视频一区二区 | 国产超碰精品| 国产精品久久久久久久美男 | a在线视频v视频| 69影院欧美专区视频| 伊伊综合在线| 国产欧美精品一区二区三区介绍| 日本午夜免费一区二区| 97超碰人人看人人 | 777久久久精品| 公侵犯人妻一区二区三区| 91免费国产在线| 国产精品无码网站| 国产女人aaa级久久久级| 蜜桃av免费观看| 一区二区在线看| 国产精品久久久久久久妇| 色综合久久综合中文综合网| 中文在线a天堂| 日韩视频不卡中文| 欧美男男同志| 北条麻妃一区二区三区中文字幕| 影音先锋在线视频| 欧美一区二区三区…… | 国产乡下妇女做爰视频| 91精品综合| 国产激情片在线观看| 国产精品久久久久久模特| 久久黄色免费看| 国产一区二区久久| 久久午夜夜伦鲁鲁片| 国产精品免费aⅴ片在线观看| 男女免费视频网站| 色视频欧美一区二区三区| 国产毛片在线视频| 国产视频精品在线| 18av在线播放| 国产精品国产三级国产aⅴ浪潮| 国产精品成人**免费视频| 欧美精品一区二区三区久久| 亚洲第一偷拍| 另类小说色综合| www.色精品| 国产稀缺精品盗摄盗拍| 色婷婷狠狠综合| 丰满少妇被猛烈进入| xxav国产精品美女主播| 吉吉日韩欧美| 国产精品有限公司| 看黄在线观看| 成人精品久久久| 精品国产精品国产偷麻豆| 欧美这里只有精品| 久久成人精品无人区| 人妻精品久久久久中文字幕 | 九九热视频精品| 欧美色男人天堂| 欧美91精品久久久久国产性生爱| 欧美日韩成人在线播放| 另类一区二区| 色涩成人影视在线播放| 宅男噜噜噜66一区二区| 亚洲av无码成人精品区| 国产精品电影一区二区三区| 99精品在线播放| 亚洲成av人片在线观看香蕉| av网站在线免费| 国产日韩欧美视频| 欧美综合视频| 亚洲精品一品区二品区三品区 | 亚洲免费福利一区| 日韩精品一区在线视频| 国产99一区视频免费| 成人免费精品动漫网站| 欧美麻豆精品久久久久久| av网站在线播放| 国产精品狼人色视频一区| 欧美日韩中字| 爆乳熟妇一区二区三区霸乳| 久久久久一区二区三区四区| 五月婷婷亚洲综合| 日韩高清免费观看| 久久影院午夜精品| 欧美福利一区二区三区| 国产免费成人| 欧美做受高潮6| 欧美亚洲一区二区在线观看| 福利视频在线看| 国产精品久久久久久久9999| 成人羞羞在线观看网站| 孩娇小videos精品| 成人欧美一区二区三区| 国产欧美日韩成人| 欧美日本精品在线| 91精品国产自产在线丝袜啪| 久久99久久99精品| av影院午夜一区| 亚洲va在线观看| 一区二区在线视频播放| 欧美天堂在线| 最新av在线免费观看| 国产成人丝袜美腿| 黄色片视频网站| 亚洲人高潮女人毛茸茸| 粉嫩91精品久久久久久久99蜜桃| 一区精品视频| 国产91丝袜在线观看| 中文字幕免费在线观看视频| 一本色道久久综合亚洲精品小说| 欧美午夜三级| 男人添女人下部视频免费| 91小视频在线观看| 成人黄色免费网| 欧美成aaa人片在线观看蜜臀| 999久久精品| 国产激情在线观看视频| 国产精品理伦片| 黑人精品一区二区| 国产成人啪精品视频免费网| 欧美3p在线观看| 在线观看免费视频黄| 日本精品视频一区二区| 国产美女在线观看| 精品一区二区视频| 六月丁香婷婷久久| 你懂的国产视频| zzijzzij亚洲日本成熟少妇| 九九热hot精品视频在线播放| 国产精品无码av无码| 一区二区三区中文字幕精品精品| 台湾av在线二三区观看| 成人黄在线观看| 国产婷婷精品| 破处女黄色一级片| 亚洲午夜性刺激影院| 日本精品国产| 爆乳熟妇一区二区三区霸乳| 亚洲观看高清完整版在线观看| yw193.com尤物在线| 国产偷久久久精品专区| 狠狠色综合日日| 久久精品无码av|