一文把Servlet整的明明白白!2??

      網(wǎng)友投稿 878 2025-04-01

      五、JSP

      5.1、JSP的作用

      JSP——Java Server Page運(yùn)行在服務(wù)器端的 Java 頁面,以前學(xué)習(xí)的 HTML 運(yùn)行在瀏覽器端。JSP 是運(yùn)行在服務(wù)器上,最終還是解析成靜態(tài)的HTML,運(yùn)行在瀏覽器。我們在瀏覽器上看到的HTML頁面,其實(shí)是 JSP 在服務(wù)器上運(yùn)行的結(jié)果。

      JSP 的主要作用是代替 Servlet 程序回傳 html 頁面的數(shù)據(jù)。因?yàn)?Servlet 程序回傳 html 頁面數(shù)據(jù)是一件非常繁鎖的事情。開發(fā)成本和維護(hù)成本都極高。

      5.2、JSP的優(yōu)勢

      5.3、JSP的原理

      **JSP頁面本質(zhì)上是一個(gè) Servlet 程序。**當(dāng)我們第一次訪問 jsp 頁面的時(shí)候。Tomcat 服務(wù)器會幫我們把 jsp 頁面翻譯成為一個(gè) java 源文件。并且對它進(jìn)行編譯成為.class 字節(jié)碼程序。我們打開 java 源文件不難發(fā)現(xiàn)其里面的內(nèi)容是:

      我們跟蹤原代碼發(fā)現(xiàn),HttpJspBase 類。它直接地繼承了 HttpServlet 類。也就是說。jsp 翻譯出來的 java 類,它間接了繼承了 HttpServlet 類。也就是說,翻譯出來的是一個(gè) Servlet 程序。

      翻譯出來的 Servlet 程序的源代碼,不難發(fā)現(xiàn)。其底層實(shí)現(xiàn),也是通過輸出流。把 html 頁面數(shù)據(jù)回傳

      給客戶端。

      out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write(" Title\r\n"); out.write("\r\n"); out.write("\r\n"); out.write(" a.jsp 頁面\r\n"); out.write("\r\n"); out.write("\r\n");

      5.4、JSP運(yùn)行過程

      JspServlet 首先會將 jsp 文件代碼翻譯成 Servlet 的 Java 代碼,然后再編譯成字節(jié)碼文件執(zhí)行,其底層就是一個(gè) Servlet。

      瀏覽器請求 JSP 頁面,Tomcat 中的 JspServlet 會先 JSP 文件翻譯成 Servlet 文件:xxx_jsp.java。

      將 xxx_jsp.java 文件編譯產(chǎn)生字節(jié)碼文件:xxx_jsp.class。

      加載字節(jié)碼文件 xxx_jsp.class 并創(chuàng)建 xxx_jsp 對象。

      調(diào)用 xxx_jsp 的 service 方法處理請求并響應(yīng)數(shù)據(jù)。

      瀏覽器第一次訪問 JSP 的時(shí)候,由 Tomcat 將 JSP 翻譯成了 Servlet,并且編譯成字節(jié)碼文件,只生成1次。如果這期間修改了JSP內(nèi)容,就會重新翻譯。

      六、轉(zhuǎn)發(fā)和重定向

      6.1、轉(zhuǎn)發(fā)和重定向的作用

      用于 web 組件的跳轉(zhuǎn),從A 組件跳到另一個(gè)組件B。

      6.2、轉(zhuǎn)發(fā)

      6.2.1、跳轉(zhuǎn)位置

      請求轉(zhuǎn)發(fā)是指,服務(wù)器收到請求后,從一次資源跳轉(zhuǎn)到另一個(gè)資源的操作叫請求轉(zhuǎn)發(fā)。在服務(wù)器端進(jìn)行的組件(資源)的跳轉(zhuǎn)。

      6.2.2、轉(zhuǎn)發(fā)的方法

      request.getRequestDispatcher("/要跳轉(zhuǎn)到的地址").forward(request, response);

      6.3、重定向

      6.3.1、跳轉(zhuǎn)的位置

      在瀏覽器端進(jìn)行的頁面(組件/資源)跳轉(zhuǎn)。

      6.3.2、重定向的方法

      response.sendRedirect("要跳轉(zhuǎn)的地址")

      6.4、轉(zhuǎn)發(fā)和重定向的區(qū)別

      6.5、注意

      無論是重定向還是轉(zhuǎn)發(fā),后續(xù)代碼都會執(zhí)行,但一般轉(zhuǎn)發(fā)或重定向后面不會有代碼,沒有執(zhí)行的意義了,因?yàn)椴还苁寝D(zhuǎn)發(fā)還是重定向?yàn)g覽器最終顯示的都是跳轉(zhuǎn)后頁面的數(shù)據(jù)。

      如果需要保留請求域中的數(shù)據(jù),必須使用轉(zhuǎn)發(fā)。

      如果需要跳轉(zhuǎn)到WEB-INF目錄中的資源,必須使用轉(zhuǎn)發(fā)。

      如果需要跨域,必須使用重定向。

      七、三大作用域

      7.1、什么是作用域

      用于 Servlet 之間數(shù)據(jù)共享的服務(wù)器內(nèi)存區(qū)域,作用域結(jié)構(gòu)是一個(gè)Map

      7.2、作用域類型

      7.3、作用域方法

      7.4、如何選擇作用域

      先考慮作用范圍小的作用域,如果小作用范圍的作用域能滿足需求就使用小作用范圍的作用域。

      八、EL表達(dá)式

      8.1、什么是EL表達(dá)式

      EL 表達(dá)式的全稱是:Expression Language。是表達(dá)式語言。

      EL 表達(dá)式主要是代替 jsp 頁面中的表達(dá)式腳本在 jsp 頁面中進(jìn)行數(shù)據(jù)的輸出。因?yàn)?EL 表達(dá)式在輸出數(shù)據(jù)的時(shí)候,要比 jsp 的表達(dá)式腳本要簡潔很多。

      8.2、EL表達(dá)式運(yùn)算

      8.2.1、算數(shù)運(yùn)算

      一文把Servlet整的明明白白!2??

      8.2.2、邏輯運(yùn)算

      8.2.3、關(guān)系運(yùn)算

      8.2.4、三元運(yùn)算

      表達(dá)式 1?表達(dá)式 2:表達(dá)式 3

      如果表達(dá)式 1 的值為真,返回表達(dá)式 2 的值,如果表達(dá)式 1 的值為假,返回表達(dá)式 3 的值。

      8.2.5、判空運(yùn)算

      判空:判斷的是內(nèi)容是否為空,不是對象是否為空。

      8.3、EL 從四個(gè)作用域中取值

      EL 獲取數(shù)據(jù)的方式是從 4 個(gè)作用域?qū)ο笾校瑥男〉酱蟮娜カ@取,如果需要指定作用域獲取數(shù)據(jù),可使用以下 EL 的內(nèi)置對象來指定。

      8.3.1、PageContext 對象

      JSP 本質(zhì)是 Servlet,但比 Servlet 多了一個(gè)作用域:頁面域,在 JSP 中有四大作用域。頁面域是只在一個(gè)JSP頁面中起作用,不同的JSP之間不能實(shí)現(xiàn)數(shù)據(jù)的共享,比請求域范圍還要小。

      <% //向頁面域中添加一個(gè)字符串 pageContext.setAttribute("name","我是頁面域"); %>

      8.3.2、 EL 指定域獲取數(shù)據(jù)

      <%@ page contentType="text/html;charset=UTF-8" language="java" %> EL指定域獲取數(shù)據(jù) <% // 向頁面域中添加一個(gè)字符串 pageContext.setAttribute("name", "頁面域"); // 請求域 request.setAttribute("name", "請求域"); // 會話域 session.setAttribute("name", "會話域"); // 上下文域 application.setAttribute("name", "上下文域"); %> 從頁面域獲取:${pageScope.name}


      從請求域獲取:${requestScope.name}
      從會話域獲取:${sessionScope.name}
      從上下文域獲取:${applicationScope.name}
      自動查找作用域獲取:${name}

      九、JSTL 標(biāo)簽庫

      JSTL 標(biāo)簽庫 全稱是指 JSP Standard Tag Library JSP 標(biāo)準(zhǔn)標(biāo)簽庫。是一個(gè)不斷完善的開放源代碼的 JSP 標(biāo)簽庫。EL 表達(dá)式主要是為了替換 jsp 中的表達(dá)式腳本,而標(biāo)簽庫則是為了替換代碼腳本。這樣使得整個(gè) jsp 頁面變得更佳簡潔。JSTL 由五個(gè)不同功能的標(biāo)簽庫組成。

      9.1、使用步驟

      9.1.1、導(dǎo)入jar包

      taglibs-standard-impl-1.2.1.jar taglibs-standard-spec-1.2.1.jar

      9.1.2、引入標(biāo)簽庫

      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

      9.1.3、使用標(biāo)簽

      9.2、核心標(biāo)簽庫常用標(biāo)簽

      9.2.1、

      用于頁面上單條件判斷。

      <%-- ii. if 標(biāo)簽用來做 if 判斷。 test 屬性表示判斷的條件(使用 EL 表達(dá)式輸出) --%>

      如果a等于b

      如果a不等于b

      9.2.2、

      用于多分支判斷(多條件判斷),類似于跟 switch … case … default 。

      9.2.3、

      用于遍歷集合或數(shù)組(最為常用)。

      varStatus屬性表:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 學(xué)生信息表

      <%-- forEach標(biāo)簽:用于JSP頁面遍歷集合和數(shù)組 items屬性:設(shè)置要遍歷的集合或數(shù)組:一般從作用域中獲取 var屬性:設(shè)置一個(gè)變量名:用來接收遍歷到的每一個(gè)元素 varStatus屬性:設(shè)置一個(gè)變量名:記錄當(dāng)前遍歷元素的狀態(tài)(狀態(tài)對象) index 屬性:當(dāng)前遍歷元素的在集合中的索引值:從0開始 count 屬性:遍歷到當(dāng)前元素為止已經(jīng)遍歷了多少個(gè)元素,從 1 開始 --%>
      學(xué)生信息列表
      序號 學(xué)號 姓名 性別 成績
      ${status.count} ${stu.id} ${stu.name} ${stu.gender? "男":"女"} ${stu.score}

      9.3、格式化標(biāo)簽庫常用標(biāo)簽

      9.3.1、

      用于對日期進(jìn)行格式化。

      Java JSP Servlet

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:項(xiàng)目管理實(shí)施規(guī)劃,成功實(shí)現(xiàn)項(xiàng)目目標(biāo)的關(guān)鍵步驟
      下一篇:在wps表格中怎樣使用自動求和功能(怎樣將wps表格自動求和)
      相關(guān)文章
      狠狠综合久久综合88亚洲| 国产亚洲高清不卡在线观看| 亚洲最大成人网色| 伊人久久大香线蕉亚洲| 亚洲国产成人五月综合网 | 亚洲人成电影福利在线播放 | 亚洲AV日韩AV天堂久久| 亚洲色无码专区在线观看| 中文字幕亚洲综合久久菠萝蜜 | 97se亚洲国产综合自在线| 亚洲 欧洲 视频 伦小说| 亚洲高清一区二区三区| 亚洲人成77777在线播放网站不卡| 久久精品国产亚洲AV忘忧草18| 亚洲一区中文字幕在线观看| 久久狠狠爱亚洲综合影院| 激情五月亚洲色图| 亚洲人成未满十八禁网站| 亚洲AV综合色区无码一二三区 | 国内成人精品亚洲日本语音 | 亚洲最大中文字幕| 国产精品久久亚洲不卡动漫| 亚洲精品天堂无码中文字幕| 欧美亚洲国产SUV| 亚洲国产午夜福利在线播放| 亚洲午夜无码AV毛片久久| 亚洲人成人无码网www电影首页| 国产精品亚洲成在人线| 亚洲第一区香蕉_国产a| 亚洲精品在线免费观看视频| 激情亚洲一区国产精品| 亚洲欧美日韩中文无线码 | 男人的天堂亚洲一区二区三区 | 亚洲国产日韩一区高清在线| 亚洲高清无在码在线无弹窗 | 国产亚洲?V无码?V男人的天堂| 欧洲亚洲国产清在高| 亚洲精品资源在线| 亚洲中文字幕一二三四区苍井空 | 久久精品国产亚洲| 亚洲日本国产精华液|