整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JSP JavaBean

          JSP JavaBean

          JavaBean是特殊的Java類,使用J ava語言書寫,并且遵守JavaBean API規范。

          接下來給出的是JavaBean與其它Java類相比而言獨一無二的特征:

          • 提供一個默認的無參構造函數。

          • 需要被序列化并且實現了Serializable接口。

          • 可能有一系列可讀寫屬性。

          • 可能有一系列的"getter"或"setter"方法。

          JavaBean屬性

          一個JavaBean對象的屬性應該是可訪問的。這個屬性可以是任意合法的Java數據類型,包括自定義Java類。

          一個JavaBean對象的屬性可以是可讀寫,或只讀,或只寫。JavaBean對象的屬性通過JavaBean實現類中提供的兩個方法來訪問:

          方法描述
          getPropertyName()舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也稱為訪問器。
          setPropertyName()舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也稱為寫入器。

          一個只讀的屬性只提供getPropertyName()方法,一個只寫的屬性只提供setPropertyName()方法。

          JavaBean 程序示例

          這是StudentBean.java文件:

          package com.runoob;

          public class StudentsBean implements java.io.Serializable

          {

          private String firstName=null;

          private String lastName=null;

          private int age=0;

          public StudentsBean() {

          }

          public String getFirstName(){

          return firstName;

          }

          public String getLastName(){

          return lastName;

          }

          public int getAge(){

          return age;

          }

          public void setFirstName(String firstName){

          this.firstName=firstName;

          }

          public void setLastName(String lastName){

          this.lastName=lastName;

          }

          public void setAge(int age) {

          this.age=age;

          }

          }

          編譯 StudentBean.java 文件(最后一個實例會用到):

          $ javac StudentsBean.java

          編譯后獲得 StudentBean.class 文件,將其拷貝到 <JSP 項目>/WebContent/WEB-INF/classes/com/runoob,如下圖所示:

          訪問JavaBean

          <jsp:useBean> 標簽可以在JSP中聲明一個JavaBean,然后使用。聲明后,JavaBean對象就成了腳本變量,可以通過腳本元素或其他自定義標簽來訪問。<jsp:useBean>標簽的語法格式如下:

          <jsp:useBean id="bean 的名字" scope="bean 的作用域" typeSpec/>

          其中,根據具體情況,scope的值可以是page,request,session或application。id值可任意只要不和同一JSP文件中其它<jsp:useBean>中id值一樣就行了。

          接下來給出的是 <jsp:useBean> 標簽的一個簡單的用法:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%>

          <html>

          <head>

          <title>useBean 實例</title>

          </head>

          <body>

          <jsp:useBean id="date" class="java.util.Date" />

          <p>日期為:<%=date %>

          </body>

          </html>

          它將會產生如下結果:

          日期為:Tue Jun 28 15:22:24 CST 2016

          訪問 JavaBean 對象的屬性

          <jsp:useBean> 標簽主體中使用 <jsp:getProperty/> 標簽來調用 getter 方法,使用 <jsp:setProperty/> 標簽來調用 setter 方法,語法格式如下:

          <jsp:useBean id="id" class="bean 編譯的類" scope="bean 作用域">

          <jsp:setProperty name="bean 的 id" property="屬性名"

          value="value"/>

          <jsp:getProperty name="bean 的 id" property="屬性名"/>

          ...........

          </jsp:useBean>

          name屬性指的是Bean的id屬性。property屬性指的是想要調用的getter或setter方法。

          接下來給出使用以上語法進行屬性訪問的一個簡單例子:

          <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%>

          <html>

          <head>

          <title>get 和 set 屬性實例</title>

          </head>

          <body>

          <jsp:useBean id="students"

          class="com.runoob.StudentsBean">

          <jsp:setProperty name="students" property="firstName"

          value="小強"/>

          <jsp:setProperty name="students" property="lastName"

          value="王"/>

          <jsp:setProperty name="students" property="age"

          value="10"/>

          </jsp:useBean>

          <p>學生名字:

          <jsp:getProperty name="students" property="firstName"/>

          </p>

          <p>學生姓氏:

          <jsp:getProperty name="students" property="lastName"/>

          </p>

          <p>學生年齡:

          <jsp:getProperty name="students" property="age"/>

          </p>

          </body>

          </html>

          訪問以上 JSP,運行結果如下:

          學生名字: 小強

          學生姓氏: 王

          學生年齡: 10

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          源 | 愚公要移山(ID:fdd_sxu_nwpu)

          jsp技術作為曾經一度火爆的技術,在最近幾年確實使用率越來越低了,這篇文章帶你一塊探究一下jsp的從生到死。

          jsp技術的誕生

          在很久很久以前,那時候我們的開發都是通過servlet來完成的,這個servlet是什么呢?我們先來認識一下:

          servlet用Java語言編寫的服務器端程序。主要功能是和瀏覽器進行交互,生成頁面展示。

          長下面這個樣子:

          public class HelloWorld extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  response.setContentType("text/html");  PrintWriter out=response.getWriter;  out.println("<html>");  out.println("<head>");  out.println("<title>Hello World</title>");  out.println("</head>");  out.println("<body>");  out.println("<h1>Hello World!</h1>");  out.println("</body>");  out.println("</html>");  }  }

          我們可以看到前端所展示的頁面,需要我們servlet去一個標簽一個標簽去生成,如果一個頁面超級復雜,動不動幾千行代碼,那這個servlet效率也就太低了。而且整個servlet代碼也會十分臃腫而且可讀性非常差。

          這時候怎么辦呢?sun公司很早就意識到了這個問題,于是便倡導很多公司一塊來創建了一種能夠動態生成html的新技術,不久之后jsp便誕生了。有效率的解決了上面servlet所出現的問題。

          jsp的發展

          既然jsp技術能夠解決剛剛servlet代碼里面所出現的技術,我們來看一下是如何解決的:在這里我們舉一個小例子,就是前端jsp向服務器servlet發送請求圖書頁面的功能。

          首先我們看一下servlet:

          public class List_book extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  //聲明一個ArrayList.用來存放Book類中的數據  ArrayList<Book> list=new ArrayList<Book>;  for(int i=0;i<10;i++){ Book book=new Book;  book.setName(res.getString("name"+i));  book.setAuthor(res.getString("author"+i));  list.add(book);  } //將list數據發送到.jap文件中  request.getRequestDispatcher("ListBook.jsp").forward(request, response);  } }

          我們會發現,現在的servlet沒有一點html代碼了。我們只需要把數據交給jsp。此時我們的頁面展示就交給jsp來做了。現在我們來看一下jsp長什么樣子:

          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path=request.getContextPath;%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head>  <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="description" content="This is my page"> <script></script>  </head>  <body>  <% ArrayList list=(ArrayList) request.getAttribute("list"); %>  <h2 align="center">圖書列表</h2>  <table border=1px align="center">  <tr><th>圖書名稱</th><th>圖書作者</th></tr>  <!-- 繼續使用jsp語句 循環放入存放于list中的Book實體類中的數據 -->  <%  for(int i=0;i<list.size;i++){  Book book=(Book)  list.get(i);%>  <tr><th><%=book.getName %></th><th><%=book.getAuthor%></th><tr> } %> </table>  </body> </html>

          這就是jsp,我們可以在html頁面中寫一些java代碼。對于我們程序員來說,在開發當中靜態的頁面我們只需要用html和css寫一些標簽來展示即可,對于那些動態的部分我們就可以使用java代碼。

          那么jsp和servlet是不是就是這種協作的關系,本質上有什么區別呢?

          其實jsp只是servlet的一種特殊形式,每一個jsp頁面就是一個servlet實例,通俗一點的話來說:jsp就是servlet,只不過servlet把一些業務功能剝離開來交給了或者是形成了jsp。明白了吧。在我們的項目編譯的時候就是把jsp編譯成了servlet。

          你們會發現,這樣做其實挺好的,市場也驗證了一切,很快jsp技術流行開來,可是隨著時間的流逝,業務越來越復雜,jsp也開始跟不上時代了。

          jsp的危機

          我們先看一個對話場景:

          java程序員:終于寫完了功能,是時候在界面上展示了。

          前端程序員:你功能寫完了,我沒有數據,在頁面什么沒法展示呀

          java程序員:數據我寫好了,你在jsp中調用XX方法就能獲取了,

          前端程序員:我已經在jsp中寫好了這個方法,你為什么自己寫了?

          于是乎,無窮無盡的爭吵還在繼續當中。

          這就是jsp的弊端,為什么呢?我們可以來總結一下:

          (1)動態和靜態資源放在一起,一旦服務器出現狀況,前后臺一起玩完,用戶體驗極差。

          (2)一旦jsp出現了問題,就需要前端后端發開人員一塊來分析解決,效率低。

          (3)jsp無法使用nginx等。

          (4)jsp頁面復雜,難以修改。

          (5)第一次加載jsp需要編譯成servlet,時間久,而且業務量大的時候,jsp負擔太大。

          (6)jsp對于開發人員簡直就是一個揮之不去的痛,太難了!!!

          鑒于以上缺點,于是另外一套機制橫空出世了,這就是前后端分離。什么是前后端分離呢?

          前后端分離其實就是后端工程師只關注于后端頁面的開發,不再處理前端問題。前端工程師只關注于自己的頁面開發。需要數據交互的時候,兩者會有一份接口文檔。

          就這樣這種思想架構很快的流行開來,這也就是為什么jsp落寞的真正原因。從此java從jsp轉向了restful結構,springMCV也開始流行開來,并逐漸占領了市場。前后端分離有什么優點呢?我們來總結一下:

          (1)動態和靜態資源分開存儲。

          (2)出現bug能很快定位是前端還是后端。

          (3)支持nginx。在高并發狀態下極其優秀。

          (4)直接請求頁面,不用編譯,速度效率都提上來了。

          (5)從此前端和后端是相親相愛的一家人了!!!!

          jsp的落幕

          又隨著時間的推移,jsp的時代基本上一去不復返了,因為我們又走入了移動互聯時代,這時候的客戶端可不是前端頁面了,還包括手機、汽車、電視等等各種設備,這種情況下,前后端必須要分離了。jsp基本上徹底告別了它的舞臺。

          培養代碼搬運工哦,想了解更多加:qq:116 159 0055

          1、Tip:什么是JSP?

          a、JSP全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用于開發動態web資源的技術。JSP/Servlet規范。JSP實際上就是Servlet。

          b、JSP這門技術的最大的特點在于,寫jsp就像在寫html,但它相比html而言,html只能為用戶提供靜態數據,而Jsp技術允許在頁面中嵌套java代碼,為用戶提供動態數據。

          2、Tip:JSP原理

          3、JSP最佳實踐

          不管是JSP還是Servlet,雖然都可以用于開發動態web資源。但由于這2門技術各自的特點,在長期的軟件實踐中,人們逐漸把servlet作為web應用中的控制器組件來使用,而把JSP技術作為數據顯示模板來使用。

          其原因為,程序的數據通常要美化后再輸出:

          讓JSP既用java代碼產生動態數據,又做美化會導致頁面難以維護。

          讓servlet既產生數據,又在里面嵌套html代碼美化數據,同樣也會導致程序可讀性差,難以維護。

          因此最好的辦法就是根據這兩門技術的特點,讓它們各自負責各得,servlet只負責響應請求產生數據,并把數據通過轉發技術帶給jsp,數據的顯示jsp來做。

          4、Tip:JSP語法

          JSP模版元素

          JSP表達式

          JSP腳本片斷

          JSP注釋

          JSP指令

          JSP標簽

          JSP內置對象

          如何查找JSP頁面中的錯誤

          5、Tip: JSP模版元素

          JSP頁面中的HTML內容稱之為JSP模版元素。

          JSP模版元素定義了網頁的基本骨架,即定義了頁面的結構和外觀。

          6、Tip: JSP腳本表達式

          JSP腳本表達式(expression)用于將程序數據輸出到客戶端

          語法:<%=變量或表達式 %>

          舉例:當前時間:<%=new java.util.Date() %>

          JSP引擎在翻譯腳本表達式時,會將程序數據轉成字符串,然后在相應位置用out.print(…) 將數據輸給客戶端。

          JSP腳本表達式中的變量或表達式后面不能有分號(;)。

          看一下源文件

          7、Tip: JSP腳本片斷(1)

          JSP腳本片斷(scriptlet)用于在JSP頁面中編寫多行Java代碼。語法:

          <%

          多行java代碼

          %>

          注意:JSP腳本片斷中只能出現java代碼,不能出現其它模板元素,JSP引擎在翻譯JSP頁面中,會將JSP腳本片斷中的Java代碼將被原封不動地放到Servlet的_jspService方法中。

          JSP腳本片斷中的Java代碼必須嚴格遵循Java語法,例如,每執行語句后面必須用分號(;)結束。

          8、Tip: JSP腳本片斷(2)

          在一個JSP頁面中可以有多個腳本片斷,在兩個或多個腳本片斷之間可以嵌入文本、HTML標記和其他JSP元素。

          舉例:

          <%

          int x=10;

          out.println(x);

          %>

          <p>這是JSP頁面文本</p>

          <%

          int y=20;

          out.println(y);

          %>

          多個腳本片斷中的代碼可以相互訪問,猶如將所有的代碼放在一對<%%>之中的情況。如:out.println(x);

          正規開發中的JSP中不應出現java腳本:標簽封裝

          9、Tip: JSP腳本片斷(3)

          單個腳本片斷中的Java語句可以是不完整的,但是,多個腳本片斷組合后的結果必須是完整的Java語句,例如:

          <%

          for (int i=1; i<5; i++)

          {

          %>

          <H1>www.it315.org</H1>

          <%

          }

          %>

          練習:一張表格,打印100行

          10、Tip: JSP聲明

          JSP頁面中編寫的所有代碼,默認會翻譯到servlet的service方法中, 而Jsp聲明中的java代碼被翻譯到_jspService方法的外面。語法:

          <%!

          java代碼

          %>

          所以,JSP聲明可用于定義JSP頁面轉換成的Servlet程序的靜態代碼塊、成員變量和方法 。

          多個靜態代碼塊、變量和函數可以定義在一個JSP聲明中,也可以分別單獨定義在多個JSP聲明中。

          JSP隱式對象的作用范圍僅限于Servlet的_jspService方法,所以在JSP聲明中不能使用這些隱式對象。

          11、Tip: JSP聲明?案例

          <%!

          static

          {

          System.out.println("loading Servlet!");

          }

          private int globalVar=0;

          public void jspInit()

          {

          System.out.println("initializing jsp!");

          }

          %>

          <%!

          public void jspDestroy()

          {

          System.out.println("destroying jsp!");

          }

          %>

          12、Tip: JSP注釋

          JSP注釋的格式:

          <%-- 注釋信息 --%>

          JSP引擎在將JSP頁面翻譯成Servlet程序時,忽略JSP頁面中被注釋的內容。HTML中的注釋有什么不同,查看源文件解決。

          13、Tip: JSP指令

          JSP指令(directive)是為JSP引擎而設計的,它們并不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其余部分。在JSP 2.0規范中共定義了三個指令:

          page指令

          Include指令

          taglib指令

          14、Tip: JSP指令簡介

          JSP指令的基本語法格式:

          <%@ 指令 屬性名="值" %>

          舉例:<%@ page contentType="text/html;charset=utf-8"%>

          如果一個指令有多個屬性,這多個屬性可以寫在一個指令中,也可以分開寫。

          例如:

          <%@ page contentType="text/html;charset=gb2312"%>

          <%@ page import="java.util.Date"%>

          也可以寫作:

          <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>

          15、Tip: Page指令

          page指令用于定義JSP頁面的各種屬性,無論page指令出現在JSP頁面中的什么地方,它作用的都是整個JSP頁面,為了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。

          JSP 2.0規范中定義的page指令的完整語法:

          <%@ page

          [ language="java" ]

          [ extends="package.class" ]

          [ import="{package.class | package.*}, ..." ]

          [ session=“true | false” ]//true創建session對象

          [ buffer="none | 8kb | sizekb" ]

          [ autoFlush="true | false" ]

          [ isThreadSafe=“true | false” ] false才繼承SingleThreadModel接口

          [ info="text" ]

          [ errorPage="relative_url" ]

          [ isErrorPage="true | false" ]

          [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]

          [ pageEncoding="characterSet | ISO-8859-1" ]

          [ isELIgnored="true | false" ]

          errorPage屬性的設置值為一路徑(相對或絕對),如果以“/”開頭,表示相對于當前WEB應用程序的根目錄(注意不是站點根目錄),否則,表示相對于當前頁面。

          可以在web.xml文件中使用<error-page>元素為整個WEB應用程序設置錯誤處理頁面,其中的<exception-type>子元素指定異常類的完全限定名,<location>元素指定以“/”開頭的錯誤處理頁面的路徑。

          如果設置了某個JSP頁面的errorPage屬性,那么在web.xml文件中設置的錯誤處理將不對該頁面起作用。

          16、Tip:使用page指令解決JSP中文亂碼

          JSP程序存在有與Servlet程序完全相同的中文亂碼問題

          輸出響應正文時出現的中文亂碼問題

          讀取瀏覽器傳遞的參數信息時出現的中文亂碼問題

          JSP引擎將JSP頁面翻譯成Servlet源文件時也可能導致中文亂碼問題

          JSP引擎將JSP源文件翻譯成的Servlet源文件默認采用ISO8859-1編碼,而JSP開發人員可以采用各種字符集編碼來編寫JSP源文件,因此,JSP引擎將JSP源文件翻譯成Servlet源文件時,需要進行字符編碼轉換。

          如果JSP文件中沒有說明它采用的字符集編碼,JSP引擎將把它當作默認的ISO8859-1字符集編碼處理。

          如何解決JSP引擎翻譯JSP頁面時的中文亂碼問題

          通過page指令的contentType屬性說明JSP源文件的字符集編碼

          page指令的pageEncoding屬性說明JSP源文件的字符集編碼

          17、Tip: include指令

          include指令用于引入其它JSP頁面,如果使用include指令引入了其它JSP頁面,那么JSP引擎將把這兩個JSP翻譯成一個servlet。所以include指令引入通常也稱之為靜態引入。

          語法:

          <%@ include file=“被包含組件的絕對URL或相對URL"%>

          其中的file屬性用于指定被引入文件的路徑。路徑以“/”開頭,表示代表當前web應用。

          細節:

          被引入的文件必須遵循JSP語法。

          被引入的文件可以使用任意的擴展名,即使其擴展名是html,JSP引擎也會按照處理jsp頁面的方式處理它里面的內容,為了見明知意,JSP規范建議使用.jspf(JSP fragments)作為靜態引入文件的擴展名。

          由于使用include指令將會涉及到2個JSP頁面,并會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能沖突(除了pageEncoding和導包除外)。

          18、Tip: taglib指令

          Taglib指令用于在JSP頁面中導入標簽庫,講自定義標簽技術時講。

          19、Tip:JSP運行原理和九大隱式對象

          每個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程序)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,然后按照servlet的調用方式進行調用。

          由于JSP第一次訪問時會翻譯成servlet,所以第一次訪問通常會比較慢,但第二次訪問,JSP引擎如果發現JSP沒有變化,就不再翻譯,而是直接調用,所以程序的執行效率不會受到影響。

          JSP引擎在調用JSP對應的_jspServlet時,會傳遞或創建9個與web開發相關的對象供_jspServlet使用。JSP技術的設計者為便于開發人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變量,開發人員在JSP頁面中通過這些變量就可以快速獲得這9大對象的引用。

          這9個對象分別是哪些,以及作用也是筆試經常考察的知識點。

          20、Tip:JSP九大隱式對象

          request

          response

          config

          application

          exception

          Session

          page

          out

          pageContext

          21、Tip: out隱式對象

          out隱式對象用于向客戶端發送文本數據。

          out對象是通過調用pageContext對象的getOut方法返回的,其作用和用法與ServletResponse.getWriter方法返回的PrintWriter對象非常相似。

          JSP頁面中的out隱式對象的類型為JspWriter,JspWriter相當于一種帶緩存功能的PrintWriter,設置JSP頁面的page指令的buffer屬性可以調整它的緩存大小,甚至關閉它的緩存。

          只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,并通過該方法返回的PrintWriter對象將out對象的緩沖區中的內容真正寫入到Servlet引擎提供的緩沖區中:

          設置page指令的buffer屬性關閉了out對象的緩存功能

          out對象的緩沖區已滿; 整個JSP頁面結束

          22、Tip: out隱式對象的工作原理圖

          <% out.println("aaa"); response.getWriter().write("bbb") %>

          23、Tip: out隱式對象的注意事項

          同時使用out和response.getwriter()輸出數據。

          用JSP實現文件下載。

          24、Tip: pageContext對象

          pageContext對象是JSP技術中最重要的一個對象,它代表JSP頁面的運行環境,這個對象不僅封裝了對其它8大隱式對象的引用,它自身還是一個域對象,可以用來保存數據。并且,這個對象還封裝了web開發中經常涉及到的一些常用操作,例如引入和跳轉其它資源、檢索其它域對象中的屬性等。

          25、Tip:通過pageContext獲得其他對象

          getException方法返回exception隱式對象

          getPage方法返回page隱式對象

          getRequest方法返回request隱式對象

          getResponse方法返回response隱式對象

          getServletConfig方法返回config隱式對象

          getServletContext方法返回application隱式對象

          getSession方法返回session隱式對象

          getOut方法返回out隱式對象

          pageContext封裝其它8大內置對象的意義,思考:如果在編程過程中,把pageContext對象傳遞給一個普通java對象,那么這個java對象將具有什么功能?

          25、Tip:pageContext作為域對象

          pageContext對象的方法

          public void setAttribute(java.lang.String name,java.lang.Object value)

          public java.lang.Object getAttribute(java.lang.String name)

          public void removeAttribute(java.lang.String name)

          pageContext對象中還封裝了訪問其它域的方法

          public java.lang.Object getAttribute(java.lang.String name,int scope)

          public void setAttribute(java.lang.String name, java.lang.Object value,int scope)

          public void removeAttribute(java.lang.String name,int scope)

          代表各個域的常量

          PageContext.APPLICATION_SCOPE

          PageContext.SESSION_SCOPE

          PageContext.REQUEST_SCOPE

          PageContext.PAGE_SCOPE

          findAttribute方法 (*重點,查找各個域中的屬性) EL表達式

          26、Tip:引入和跳轉到其他資源

          PageContext類中定義了一個forward方法和兩個include方法來分別簡化和替代RequestDispatcher.forward方法和include方法。

          方法接收的資源如果以“/”開頭, “/”代表當前web應用。

          27、Tip: JSP標簽

          JSP標簽也稱之為Jsp Action(JSP動作)元素,它用于在Jsp頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java代碼,造成jsp頁面難以維護。

          28、Tip: JSP常用標簽

          <jsp:include>標簽

          <jsp:forward>標簽

          <jsp:param>標簽

          28、Tip: <jsp:include>標簽

          <jsp:include>標簽用于把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之為動態引入。

          語法:

          <jsp:include page="relativeURL | <%=expression%>" flush="true|false" />

          page屬性用于指定被引入資源的相對路徑,它也可以通過執行一個表達式來獲得。

          flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端。

          29、Tip: <jsp:include>與include指令的比較

          <jsp:include>標簽是動態引入, <jsp:include>標簽涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合并。

          而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在源文件級別進行合并。

          不管是<jsp:include>標簽,還是include指令,它們都會把兩個JSP頁面內容合并輸出,所以這兩個頁面不要出現重復的HTML全局架構標簽,

          否則輸出給客戶端的內容將會是一個格式混亂的HTML文檔。

          30、Tip: <jsp:forward>標簽

          <jsp:forward>標簽用于把請求轉發給另外一個資源。

          語法:

          <jsp:forward page="relativeURL | <%=expression%>" />

          page屬性用于指定請求轉發到的資源的相對路徑,它也可以通過執行一個表達式來獲得。

          31、Tip: <jsp:param>標簽

          當使用<jsp:include>和<jsp:forward>標簽引入或將請求轉發給其它資源時,可以使用<jsp:param>標簽向這個資源傳遞參數。

          語法1:

          <jsp:include page="relativeURL | <%=expression%>">

          <jsp:param name="parameterName" value="parameterValue|<%=expression %>" />

          </jsp:include>

          語法2:

          <jsp:forward page="relativeURL | <%=expression%>">

          <jsp:param name="parameterName" value="parameterValue|<%=expression %>" />

          </jsp:include>

          <jsp:param>標簽的name屬性用于指定參數名,value屬性用于指定參數值。在<jsp:include>和<jsp:forward>標簽中可以使用多個<jsp:param>標簽來傳遞多個參數。

          32、Tip:映射JSP

          <servlet>

          <servlet-name>SimpleJspServlet</servlet-name>

          <jsp-file>/jsp/simple.jsp</jsp-file>

          <load-on-startup>1</load-on-startup >

          </servlet>

          ……

          <servlet-mapping>

          <servlet-name>SimpleJspServlet</servlet-name>

          <url-pattern>/xxx/yyy.html</url-pattern>

          </servlet-mapping>

          33、Tip:如何查找JSP頁面中的錯誤

          JSP頁面中的JSP語法格式有問題,導致其不能被翻譯成Servlet源文件,JSP引擎將提示這類錯誤發生在JSP頁面中的位置(行和列)以及相關信息。

          JSP頁面中的JSP語法格式沒有問題,但被翻譯成的Servlet源文件中出現了Java語法問題,導致JSP頁面翻譯成的Servlet源文件不能通過編譯,

          JSP引擎也將提示這類錯誤發生在JSP頁面中的位置(行和列)以及相關信息。

          JSP頁面翻譯成的Servlet程序在運行時出現異常,這與普通Java程序的運行時錯誤完全一樣,Java虛擬機將提示錯誤發生在Servlet源文件中的位置(行和列)以及相關信息。

          34、Tip:重點

          到此為止,web開發接觸到了4個域對象,這4個域對象是學習web的重點,也是筆試經常考察的知識點

          pageContext(稱之為page域)

          request(稱之為request域)

          session(稱之為session域)

          servletContext(稱之為application域)

          明確如下問題:

          什么是域?

          這4個對象的生命周期?

          哪種情況下用哪種域對象。

          1、request:如果客戶向服務器發請求,產生的數據,用戶看完就沒用了,像這樣的數據就存在request域,像新聞數據,屬于用戶看完就沒用的

          2、session:如果客戶向服務器發請求,產生的數據,用戶用完了等一會兒還有用,像這樣的數據就存在session域中,像購物數據,用戶需要看到自己購物信息,并且等一會兒,還要用這個購物數據結帳

          3、servletContext:如果客戶向服務器發請求,產生的數據,用戶用完了,還要給其它用戶用,像這樣的數據就存在servletContext域中,像聊天數據。


          主站蜘蛛池模板: 成人国产一区二区三区| 久久久久久人妻一区精品| 一区二区三区电影网| 中文字幕一区二区三区在线观看| 琪琪see色原网一区二区| 国产精品制服丝袜一区| 国产一区视频在线| 一区二区在线播放视频| 国模无码视频一区| 激情无码亚洲一区二区三区| 精品人无码一区二区三区| 国产一区二区三区高清在线观看| 国产成人AV区一区二区三| 精品日韩一区二区| 无码人妻精品一区二区三区久久久| 夜色福利一区二区三区| 日韩电影一区二区三区| 亚洲熟妇av一区二区三区漫画| 无码人妻精品一区二区蜜桃百度| 成人精品一区二区三区电影| 国产精品无码一区二区三区毛片| 亚洲av无码一区二区三区四区 | 四虎一区二区成人免费影院网址| 极品少妇一区二区三区四区| 波多野结衣一区视频在线| 无码av人妻一区二区三区四区| 2022年亚洲午夜一区二区福利 | 中文字幕亚洲一区二区va在线| 精品乱码一区内射人妻无码| 国产在线无码视频一区| 亚洲一区二区精品视频| 一区二区三区无码视频免费福利| 国产一区二区三区高清视频| 秋霞午夜一区二区| 国产精品夜色一区二区三区| 亚洲综合av一区二区三区| 国产一区二区三区美女| 香蕉视频一区二区三区| 人妻无码视频一区二区三区| 亚洲国产欧美国产综合一区| 国产一区二区三区在线|