亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

jsp詳解

2019-11-08 03:10:50
字體:
來源:轉載
供稿:網友

一、什么是jspjavaServer Pages),原來是沒有jsp的,只有severlet,后來為了方便開發,將頁面顯示從severlet中提取出來,通過Java程序段和jsp標記與severlet繼續關聯(Java Servlet是JSP的技術基礎),所以當Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序段,然后將執行結果連同JSP文件中的HTML代碼一起返回給客戶。

下面是對相關資料進行的整理:同時可以參考http://developer.51cto.com/art/200907/134623.htmJSP應用開發的背景及特點

由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet,即java腳本標簽,例如:<% %>)和JSP標記(tag,例如:<jsp: include="">),從而形成JSP文件(*.jsp),JSP可用一種簡單易懂的等式表示為:HTML+Java+JSP標記=JSP。。用JSP開發的Web應用是跨平臺的,JSP與severlet同屬于j2ee的組件,所以也是一次編寫,到處運行。

二、JSP將網頁邏輯(由java程序段和jap標記執行)與網頁設計和顯示(html標簽)分離,與JavaServlet一樣,是在服務器端執行的,就是在服務器端,JSP引擎解釋JSP標識和腳本,生成所請求的內容(生成內容的邏輯被封裝在標識和JavaBeans組件中,并且捆綁在腳本中,所有的腳本在服務器端運行。),并且將結果以HTML(或者xml)頁面的形式(返回給客戶端的就是一個HTML文本)發送回瀏覽器,因此客戶端只要有瀏覽器就能瀏覽。

三、不要將JSP于Javascript混淆:JSP屬于java的組件,使用的是java語言,所以JSP與JAVASCRIPT的區別就是JAVA與JAVASCRIPT的區別。

1.JavaScript是一種動態、弱類型、基于原型的語言,通過瀏覽器可以直接執行;而Java(JSP)是面向對象的編程語言,必須先進行編繹和連接等動作才可執行?! ?/p>

2.JavaScript編寫在HTML文件中,直接查看網頁的原始碼,就可以看到JavaScript程式,所以沒有保護,任何人都可以透過HTML文件復制程式;而Java應用在網頁的程式稱為Java Applet(Applet是[小程序]的意思),是和HTML文件分開的?! ?/p>

3.JavaScript的結構較為自由松散,而Java和正統的編程語言一樣,結構較為嚴謹?! ?/p>

4.JavaScript不具有讀寫檔案及網絡控制等功能,Java則提供了這些功能,但是JavaScript在網頁內容的控制和互動性方面,比較方便快捷的?! ?/p>

5.javascript多運行于客戶端,而java多運行于服務器端。

四、JSP有9個內置對象:

1、request對象:該對象封裝了用戶提交的信息,通過調用該對象相應的方法可以獲取封裝的信息,即使用該對象可以獲取用戶提交信息。它是HttpServletRequest的實例。實例:不必直接傳送參數到JavaBean,你可以藉由請求對象來取得參數的值: <% String name=request.getParameter("name"); out.PRintln(name); %>。

2、response對象:對客戶的請求做出動態的響應,向客戶端發送數據。

3、session對象

 ?。?)、什么是session:session對象是一個JSP內置對象,它在第一個JSP頁面被裝載時自動創建,完成會話期管理?! 囊粋€客戶打開瀏覽器并連接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱為一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間反復連接,反復刷新一個頁面,服務器應當通過某種辦法知道這是同一個客戶,這就需要session對象。  

    (2)、session對象的ID:當一個客戶首次訪問服務器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到客戶端,存放在Cookie中,這樣session對象和客戶之間就建立了一一對應的關系。當客戶再訪問連接該服務器的其他頁面時,不再分配給客戶新的session對象,直到客戶關閉瀏覽器后,服務器端該客戶的session對象才取消,并且和客戶的會話對應關系消失。當客戶重新打開瀏覽器再連接到該服務器時,服務器為該客戶再創建一個新的session對象?! ?/p>

    (3)、session對象存在一定時間過期問題,所以存在session中的名值對會在一定時間后失去,可以通過更改session有效時間來避免這種情況。同時編程時盡量避免將大量有效信息存儲在session中,request是一個不錯的替代對象。

4、application對象

 ?。?)、什么是application:  服務器啟動后就產生了這個application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象?! ?/p>

    (2)、application對象常用方法:

                A:public void setAttribute(String key,Object obj):將參數Object指定的對象obj添加到application對象中,并為添加的對象指定一個索引關鍵字?! ?/p>

           B:public Object getAttribute(String key):獲取application對象中含有關鍵字的對象。

5、out對象:是一個輸出流,用來向客戶端輸出數據。out對象用于各種數據的輸出。在頁面中例如:<%out.print("<a />")%>

6、Page對象:就是指向當前JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例。JSP網頁本身,page對象是當前JSP頁面轉換后的Servlet類的實例。從轉換后的Servlet類的代碼中,可以看到這種關系:Object page = this;在JSP頁面中,很少使用page對象。

7、config:jav  jsp validator相關的錯誤

ax.servlet. ServletConfig 的實例,該實例代表該JSP 的配置信息。常用的方法有getInitParameter(String paramNarne)及getInitParameternarnes()等方法。事實上, JSP頁面通常無須配置,也就不存在配置信息。因此,該對象更多地在Servlet中有效。很少會在jsp頁面中使用這個對象

8、exception:java.lang.Throwable的實例,該實例代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page的isErrorPage屬性為true時,該對象才可以使用。常用的方法有getMessage()和printStackTrace()等。

9、 pageContext:javax.servlet.jsp.PageContext的實例,網頁的屬性是在這里管理,該對象代表該JSP頁面上下文,使用該對象可以訪問頁面中的共享數據。常用的方法有getServletContext()和getServletConfig()等。

  //使用pageContext設置屬性,該屬性默認在page范圍內  pageContext. setAttribute("page" , "hello") ;

   //使用request設置屬性,該屬性默認在request范圍內  request. setAttribute ("request" , "hello");

  //使用pageContext將屬性設置在request范圍中  pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);

   //使用session將屬性設置在session范圍中  session.setAttribute("session" , "hello");

   //使用pageContext將屬性設置在session范圍中  pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);

   //使用application將屬性設置在application范圍中  application. setAttribute ("app" , "hello") ;

   //使用pageContext將屬性設置在application范圍中  pageContext.setAttribute("app2" , "hello" , pageContext.APPLICATION_SCOPE) ;

五、JSP的4個作用域:

               page對象的作用范圍僅限于用戶請求的當前頁面,對page對象的引用通常存儲在pageContext對象中。

           request作用域:一個HTTP請求(request請求)的處理可能需要多個Servlet合作,而這幾個Servlet之間可以通過某種方式傳遞信息,但這個信息在請求結束后就無效了(就是說request作用域是在請求未結束前有效,重定向跳轉不能使用request用域,服務器跳轉可以使用request作用域,這也很好的解釋了重定向跳轉和服務器跳轉的區別)。這幾個Servlet之間的信息共享是通過HttpServletRequest接口的兩個方法來實現的。

          session作用域,會話作用域,一個客戶端與服務器端建立的鏈接,只能當前用戶訪問,在另外一個客戶端上無法訪問,傳值與跳轉方式無關,一般用重定向跳轉session是通過HttpSession接口實現,

          application作用域,應用作用域,一個項目就是一個應用(程序),放置在服務器中,可以供每一個客戶端用戶訪問,application作用域上的信息傳遞是通過ServletContext實現

六、jsp標簽分三種:

   指示標簽(編譯器指示):<%@ page  %>指示當前頁面的屬性和運行時所需資源,屬于靜態操作

             例如:<%@ page import="java.util.*" %>導包

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

             其中:language表示所用的語言,

                   contentType規定內容的類型,所有文件都有,在編程里面叫做MIME類型:多文本網絡郵件擴充協議,負責對郵件管理,

                             現在逐漸衍生為對頁面類型的定義,可以去Tomcat下的conf文件夾下的web.xml文件中找

                   text/html這是文本類型中html格式的文件

                   charset=UTF-8表示使用的字符集

                   pageEncoding="UTF-8"專門定義當前頁面使用的字符集,與上面的重復,可以直接用上面的

                                         

            <%@ include  %/>:靜態包含,可以放在<body>和<head>任何位置,

                   <%@ include file="a.jsp" %>:把a.jsp引入到當前頁面中進行顯示,原理是將a.jsp頁面中的腳本引入(并不顯示腳本),編譯運行,在當前頁面顯示結果

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

    行為標簽:也可以說是jsp的動作

               <jsp:include page/>動態包含,和靜態包含的作用效果是一樣的

                 <jsp:include page="a.jsp"/>:把a.jsp引入,原理是程序在當前頁面中進行執行時,遇到引入a.jsp的語句,程序跳轉到a.jsp頁面中執行程序,

                                             然后把程序的執行結果帶到當前頁面中進行顯示,程序繼續向下執行當前頁面沒有執行完的程序

              <jsp:getProperty  />:從對象中取值并打印到頁面

              <jsp:setProperty  />:為類的屬性賦值

              <jsp:forward  >:實現服務器端跳轉: <jsp:forward  page="a.jsp"></jsp:forward >

               <jsp:attribute name=""></jsp:attribute>

               <jsp:params></jsp:params>

                     <jsp:param />傳參:<jsp:forward  page="a.jsp"><jsp:param name="name" value="admin"/></jsp:forward >,

                                 接收方面:String name=(String)request.getParameter("name");

                     <jsp:useBean ></jsp:useBean>就是為了使用要引入的類,格式如下:id相當于類的對象,class代表類,scope代表所使用的作用域

 

                    例子:<jsp:useBean id="stu" class="net.cstp.vo.Student" scope="page"></jsp:useBean>

                          <jsp:setProperty property="userName" name="stu" value="john"/>

                          <jsp:getProperty property="userName" name="stu"/>

     腳本標簽:<%腳本 %>     <%!聲明全局變量  %>        <%=表達式(屬性名) %>用于輸出到頁面,注釋 <%--注釋 --%>(這種注釋通過頁面看源碼是看不到的)

七、JSP跳轉方式與區別:

重定向跳轉:客戶端訪問了一個服務器,這個服務器中有跳轉請求,服務器告訴客戶端,重新發送一個請求,去訪問另一個頁面,實現頁面的跳轉,重新定向訪問跳轉

                 response.sendRedirect("success.jsp");

                 response.sendRedirect("success.jsp?name=admin");跳轉并傳參

 

 

服務器跳轉:客戶端訪問了一個服務器,這個服務器中有跳轉請求,服務器會直接發送一個新請求,去訪問另一個頁面,實現一個服務器跳轉到另一個服務器,實現頁面跳轉

            效率比較高,避免二次請求

                 RequestDispatcher rd=request.getRequestDispatcher("success.jsp?name=admin");跳轉并傳參

                    rd.forward(request,response);//里面的值是對象

                    //或者:

                    request.getRequestDispatcher("success.jsp").forward(request,response);

            還有用jsp行為標簽也可以實現服務器端跳轉

                 <jsp:forward  >:實現服務器端跳轉: <jsp:forward  page="a.jsp"></jsp:forward >

                                                     <jsp:forward  page="a.jsp"><jsp:param name="name" value="admin"/></jsp:forward >跳轉并傳參

        服務器端跳轉與重定向跳轉的區別:

 

                服務器端跳轉:跳轉時地址欄的地址不會跟隨跳轉頁面變化,請求會向下一直傳遞,request作用域適用                     

                重定向跳轉:跳轉時地址欄的地址會跟隨跳轉頁面地址變化,值傳遞一次請求,適用session作用域

八、表單提交方式:post 和get

      get/post區別:

             get:顯示傳參,請求中傳輸的內容大小有明確的規定不大于2k,顯示結果http://localhost/jsp12.19.1/login.jsp?username=scott&userpwd=tiger,

              get 在地址欄里面直接敲回車訪問,是get請求方式,超鏈接也是get請求,重定向跳轉<a></a>  

             post:隱式傳參,請求沒有大小限制,顯示結果http://localhost/jsp12.19.1/login.jsp,

九、jsp的三個常用配置:

    1、如何顯示目錄列表:我們在本機測試程序時,一般都習慣在瀏覽器中就能遍歷到某個目錄下都有哪些文件,這就需要web服務器支持目錄列表:

       打開文件conf/web.xml,找到以下代碼:<param-name>listings</param-name>  <param-value>false</param-value>  將其中的false改成true

   2、配置error-page:(指定處理錯誤的頁面)打開文件D:/demo/WEB-INF/web.xml:在<web-app>…</web-app>中間加入:

   <error-page>

           <error-code>404</error-code>

           <location>/NotFound.jsp</location>

   </error-page>(錯誤代碼為404的錯誤導向到NotFound.jsp)

   <error-page>

          <error-code>500</error-code>

          <location>/error.jsp</location>

   </error-page>  (當系統發生500錯誤即服務器內部錯誤時,跳轉到錯誤處理頁面error.jsp)

   <error-page>

          <exception-type>java.lang.NullException</exception-type>

          <location>/error.jsp</location>

   </error-page> ?。ó斚到y發生java.lang.NullException(即空指針異常)時,跳轉到錯誤處理頁面error.jsp)

   提醒:  以上頁面都需要做大一點(>=2kB),否則不起作用?! ≡颍簍omcat把這樣的頁面字節限制在不少于多少字節。

   3、jsp頁面出現亂碼如何解決?  在頁頭加上:  <%@ page contentType=“text/html; charset=gb2312″%>

十、JSP的自定義標簽:

基本概念:

  1.標簽(Tag):標簽是一種XML元素,通過標簽可以使JSP網頁變得簡潔并且易于維護,還可以方便地實現同一個JSP文件支持多種語言版本。由于標簽是XML元素,所以它的名稱和屬性都是大小寫敏感的  

    2.標簽庫(Tag library):  由一系列功能相似、邏輯上互相聯系的標簽構成的集合稱為標簽庫。

  3.標簽庫描述文件(Tag Library Descriptor):標簽庫描述文件是一個XML文件,這個文件提供了標簽庫中類和JSP中對標簽引用的映射關系。它是一個配置文件,和Web.xml是類似的。

  4.標簽處理類(Tag Handle Class):  標簽處理類是一個Java類,這個類繼承了TagSupport或者擴展了SimpleTag接口,通過這個類可以實現自定義JSP標簽的具體功能。  

自定義JSP標簽的格式:

   1.  <% @ taglib prefix=”someprefix” uri=”/sometaglib” %>

   為了使到JSP容器能夠使用標簽庫中的自定義行為,必須滿足以下兩個條件:

         1)從一個指定的標簽庫中識別出代表這種自定義行為的標簽

         2)找到實現這些自定義行為的具體類

         解釋:第一個必需條件:找出一個自定義行為屬于那個標簽庫,是由標簽指令的前綴(Taglib Directive's Prefix)屬性完成,所以在同一個頁面中使用相同前綴的元

                                素都屬于這個標簽庫。每個標簽庫都定義了一個默認的前綴,用在標簽庫的文檔中或者頁面中插入自定義標簽。

                                所以,你可以使用除了諸如jsp,jspx,java,Servlet,sun,sunw(它們都是在JSP白皮書中指定的保留字)之類的前綴。

             第二個要求是uri屬性滿足的。為每個自定義行為找到對應的類。這個uri包含了一個字符串,容器用它來定位TLD文件。在TLD文件中可以找到標簽庫中所有標簽

                                處理類的名稱。

   2.當web應用程序啟動時,容器從WEB-INF文件夾的目錄結構的META-INF搜索所有以.tld結尾的文件。也就是說它們會定位所有的TLD文件。

        對于每個TLD文件,容器會先獲取標簽庫的URI,然后為每個TLD文件和對應的URI創建映射關系。

      在JSP頁面中,我們僅需通過使用帶有URI屬性值的標簽庫指令來和具體的標簽庫匹配

自定義JSP標簽的處理過程:

   1.在JSP中引入標簽庫:  <% @ taglib prefix=”taglibprefix” uri=”tagliburi” %>

   2.在JSP中使用標簽庫標簽

   3.Web容器根據第二個步驟中的prefix,獲得第一個步驟中聲明的taglib的uri屬性值

   4.Web容器根據uri屬性在web.xml找到對應的元素

   5.從元素中獲得對應的元素的值

   6.Web容器根據元素的值從WEB-INF/目錄下找到對應的.tld文件

   7.從.tld文件中找到與tagname對應的元素

   8.湊元素中獲得對應的元素的值

   9.Web容器根據元素的值創建相應的tag handle class的實例

   10. Web容器調用這個實例的doStartTag/doEndTag方法完成相應的處理

 創建和使用Tag Library的基本步驟:

   1.創建標簽的處理類(Tag Handler Class)

   2.創建標簽庫描述文件(Tag Library Descrptor File)

   3.在web.xml文件中配置元素(加載tld文件,此步也可以省略,直接有第四步加載tld)

   4.在JSP文件中引人標簽庫

感謝原文作者的用心編寫

原文鏈接:http://blog.csdn.net/javaloveiphone/article/details/7937170


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品狼人色视频一区| 国产精品久久久久7777婷婷| 亚洲区在线播放| 热久久这里只有| 久久久久这里只有精品| 国产精品美女www爽爽爽视频| 日本中文字幕成人| 黄色精品一区二区| 亚洲日韩中文字幕在线播放| 亚洲国产精彩中文乱码av| 91在线高清视频| 亚洲女人被黑人巨大进入al| 国产成人精品久久二区二区| 欧美精品中文字幕一区| 亚洲片在线资源| 川上优av一区二区线观看| 午夜精品理论片| 亚洲欧美一区二区激情| 欧美激情综合亚洲一二区| 久久成人这里只有精品| 国模精品视频一区二区三区| 成人黄色免费片| 欧美国产日韩一区二区在线观看| 日韩毛片在线观看| 国产精品黄色av| 欧美另类在线观看| 91精品综合视频| 动漫精品一区二区| 97av在线影院| 美女扒开尿口让男人操亚洲视频网站| 有码中文亚洲精品| 欧美激情精品久久久久| 精品国产欧美成人夜夜嗨| 亚洲欧美资源在线| 国产亚洲欧洲高清| 欧美日韩亚洲系列| 国产成人精品国内自产拍免费看| 国产精品大陆在线观看| 日韩成人中文电影| 亚洲**2019国产| 国产精品视频99| 中文字幕视频在线免费欧美日韩综合在线看| 欧美激情一区二区三区在线视频观看| 中文字幕亚洲在线| 久久天天躁狠狠躁老女人| 国产97人人超碰caoprom| 欧美亚洲免费电影| 国产成人综合av| 日韩av在线网页| 2019中文字幕在线| 国产精品九九久久久久久久| 日产日韩在线亚洲欧美| 国产噜噜噜噜噜久久久久久久久| 欧美一级电影免费在线观看| 亚洲欧美日韩一区二区在线| 亚洲视频免费一区| 一区二区三欧美| 免费99精品国产自在在线| 国产亚洲精品一区二555| 欧美日韩第一视频| 亚洲日本欧美中文幕| www.xxxx欧美| 97在线观看免费| 日韩久久精品电影| 国产日韩综合一区二区性色av| 日韩一区二区久久久| 91po在线观看91精品国产性色| 久久精品人人做人人爽| 欧美激情乱人伦一区| www.美女亚洲精品| 亚洲精品成人免费| 国产深夜精品福利| 久久久久久国产| 国产欧美精品xxxx另类| 色噜噜久久综合伊人一本| 九九精品视频在线| 亚洲国内精品在线| 国产精品黄页免费高清在线观看| 欧美电影在线观看高清| 国产香蕉97碰碰久久人人| 91国产高清在线| 欧美大成色www永久网站婷| 视频一区视频二区国产精品| 自拍偷拍亚洲一区| 亚洲日本欧美中文幕| 成人有码视频在线播放| 欧美久久精品午夜青青大伊人| 国产一区二区在线免费视频| 亚洲欧美日韩爽爽影院| 欧美成人免费va影院高清| 91久久精品美女高潮| 久久久久久91香蕉国产| 日本精品视频网站| 亚洲国产天堂久久综合| 清纯唯美亚洲综合| 亚洲人成在线电影| 欧美激情极品视频| www.久久久久久.com| 亚洲片国产一区一级在线观看| 一区二区三区在线播放欧美| 色老头一区二区三区在线观看| 久久精品国产v日韩v亚洲| 亚洲欧美另类自拍| 久久精品免费电影| 亚洲人成欧美中文字幕| 国产精品国产自产拍高清av水多| 美日韩精品视频免费看| 在线观看欧美视频| 亚洲欧美日韩精品久久亚洲区| 亚洲大胆人体在线| 奇米4444一区二区三区| 国产精品男女猛烈高潮激情| 亚洲国产日韩欧美在线动漫| 蜜臀久久99精品久久久无需会员| 久久久精品免费视频| 7777精品视频| 欧美视频在线免费看| 色偷偷91综合久久噜噜| 亚洲三级av在线| 中文字幕av一区| 久久综合九色九九| 日韩欧美亚洲范冰冰与中字| 欧美精品第一页在线播放| 国内精品小视频| 国产午夜精品久久久| 精品偷拍各种wc美女嘘嘘| 亚洲第一av网| 欧美有码在线视频| 日本不卡免费高清视频| 成人黄色av播放免费| 久久香蕉国产线看观看av| 欧美成人激情视频| 69视频在线免费观看| 亚洲天堂av综合网| 亚洲第一页中文字幕| 成人激情视频在线播放| 欧美三级xxx| 欧美影院在线播放| 久久久久久亚洲| 欧美性xxxx极品hd欧美风情| 久久精品国产电影| 九九热这里只有精品6| 国产精品成人va在线观看| 97久久精品人人澡人人爽缅北| 成人免费淫片视频软件| 欧美久久久精品| 欧美肥臀大乳一区二区免费视频| 亚洲精品视频播放| 亚洲成人久久电影| 亚洲精品欧美日韩专区| 精品视频在线播放| 精品一区二区三区电影| www.亚洲天堂| 超在线视频97| 亚洲热线99精品视频| 日韩视频欧美视频| 亚洲成人黄色在线| 在线看日韩av| 欧美日韩在线观看视频| 欧美性理论片在线观看片免费| 国产在线播放91| 精品国产欧美成人夜夜嗨| 久久影视电视剧免费网站| 日韩激情在线视频|