程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 復習之Jsp詳解

復習之Jsp詳解

編輯:關於JSP

JSP簡介 JSP是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態技術標准。在傳統的網頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標簽,就構成了JSP網頁java程序片段可以操縱數據庫、重新定向網頁以及發送E-mail等,實現建立動態網站所需要的功能。所有程序操作都在服務器端執行,網絡上傳送給客戶端的僅是得到的結果,這樣大大降低了對客戶浏覽器的要求,即使客戶浏覽器端不支Java,也可以訪問JSP網頁。 JSP全名為java server page,其根本是一個簡化的Servlet設計,他實現了Html語法中的java擴張(以 <%, %>形式)。   執行過程 第一步、用戶發送請求,服務器接收到這個請求 第二步、服務器通過請求中的邏輯地址查找服務端的物理地址,檢查對應的JSP文件是否存在,如果存在則執行下一步操作,如果不存在,就返回一個      404錯誤 第三部、當服務器發現JSP文件存在後,會查看該文件是否被修改或者是新創建的,如果是就執行第四步操作,如果不是,則執行第六步操作,執行對      應的java字節碼 第四步、得到對應的JSP文件,調用JSP Parser(一種jSp分析程序),編譯成Servlet程序 第五步、調用jdk,將程序編譯對應的Servlet字節碼 第六步、執行已有的對應的字節碼。如果字節碼是未載入的,則先載入後在執行。 如果去掉中間層次的實現過程,JSP其實就是一個方便寫HTML的Servle文件罷了,其實現也是依賴於Servlet。當然其jsp轉化為Servlet的過稱是服務器(tomcat)實現的,我們不必去糾結於他的實現方式。   JSp語法概述 JSP的代碼包含了JSP元素和Template date兩類,前者是指將JSP引擎直接處理的部分,這一部分必須符合JAVA語法。否者會導致編譯錯誤(因為就是轉化為Servlet後,根據JDK執行java),後者指的是JSP引擎不處理的內容(這些數據會直接返回給客戶端) 例子:   JSP語法 注釋 1、html的一般注釋代碼:   [html]  <!-- 注釋-->    這種注釋發送到客戶端,但不直接顯示,在源代碼中可以查看到。 由JSP parse產生的的java代碼為: [java]  out.write("<!--注釋-->");     2、html有表達式的注釋 [java]   <!-- <%= new String("這是在注釋中使用java代碼")%> -->   這類注釋會編譯表達式裡面的java代碼。這種注釋發送到客戶端,但不直接顯示,在源代碼中可以查看到。 由jsp parse產生的java代碼為: [java]   <span style="font-size:14px;">out.write("<!--");   out.print(new java.util.String("這是在注釋中使用java代碼"));   out.write("-->");</span>   所以說後面不能加分號   3、jsp注釋 [java]   <%--這是JSP注釋--%>   <%--new String("這是在jsp注釋中使用java代碼");--%>   這類注釋不會以html形式發送到客戶端   編譯器指令 編譯器指令包括 “包含指令”, “頁指令” 和 “taglib指令” 它們包含在 “<%@  %>”卷標裡。  兩個主要的指令是page與include。    page指令 “<%@ page %>”指令作用於整個JSP頁面,同樣包括靜 態的包含文件。但是 “<%@ page %>”指令不能作用於動態的包含文件,可以在一個頁面中用上多個 “<%@ page %>”指令,但是其中的屬性只能用一次,不過也有例外,那就是import屬性。因為import屬性和Java中的import語句類似 (參照Java Language,import語句引入的是Java 語言中的類),所以此屬性就能用多次。  無論把 “<%@ page %>”指令放在JSP的文件的哪個地方,它的作用范圍都是整個JSP頁面。不過,為了JSP程序的可讀性,以及好的編程習慣,最好還是把它放在JSP文件的頂部。  [java]  <%@page import="java.io.File"%>   <%@page language="java" import="java.util.*",import="java.io.File" pageEncoding="UTF-8"%>   一般情況下我們使用jsp的話都是使用java的,所以language一般不會改動,當我們使用java包的時候需要import包,當然myeclipse在你使用相應包時會給你自動導入。 其中下列包已經被導入了,不需要我們顯示的導入: 自定義出現異常後的jsp [javascript]   <%@ page errorPage="error.jsp" %>    表達式 [java]   <% int a=3; %>   <%= a %>   腳本段 [javascript]   <%! int a = 10; %>   <%          switch(a){           case 10:               System.out.print("代碼塊輸出成功");               break;           default:               System.out.print("-----");       }       %>     JSP聲明 [java]   <%! int a=3; %>   <%= a %>   雖然說與表達式中的腳本段<% int a=3; %>從表象上看是一樣的,但是實際上卻有天壤之別,查看下列代碼: [java]   <%! int a=3; %>   <% int b=3; %>   <%= a-- %>   <%= b-- %>   多次輸出,你會發現b的值是一直不變的,但a一直在減少,要理解這個,我們必須去看生成的Servlet。當我們刷新一次浏覽器的時候,會調用一次_jspService(request,resp)方法(對於tomcat來說),jsp定義int所產生的a是一個成員變量(加載在內存中了),而腳本語言定義的b是存放在_jspService方法中的,當刷新一次浏覽器,b就會重新被int。最終還是由Servlet來體現的。 對於這兩種選擇,一般我們會使用腳本段,不使用聲明。因為我們的網站有很多人訪問,如果A訪問了,修改了,B訪問了,也修改了,這樣使我們的聲明的變量不可控制(Servlet是單實例的,成員變量只有一個)。 include指令 當你在實際編寫jsp時,你會發現有些頁面內容是一樣的,jsp為我們准備了include指令,可以去掉很多我們編碼的重復性。 代碼1(使用include,調用的jsp文件): [javascript]  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   <%= new Date().toString() %>   代碼2(使用include 調用代碼一的jsp文件) [javascript]  <body>       根目錄文件       <%@ include file="task.jsp" %>       <br>    </body>     forward 頁面轉向,當jsp執行到forward時,jsp會進行轉向。下面是一個帶數據傳輸的forward代碼 forward.jsp [html]     <body>       This is my forward page. <br>       <jsp:forward page="forwardTo.jsp">       <span style="white-space:pre">    </span><jsp:param value="Neal" name="userName"/>       </jsp:forward>             後面的代碼就不會再執行了     </body>     forwardTo,jsp [html]   <body>       This is my forwardTo page.       <br>       <%           String userName = request.getParameter("userName");           String outStr = "come in ";           outStr += userName;           out.println(outStr);       %>   </body>   提示:傳值方式在include也是一樣的 在tomcat產生的forward.java中,你會發現下圖的一些代碼,因為return,所以forwar後面的就不會執行了   jsp內置對象 JSP 有以下九種內置對象,包括: request,請求對象 ,response,響應對象 ,pageContext,頁面上下文對象 session,會話對象application,應用程序對象 out,輸出對象 ,config,配置對象 ,page,頁面對象 exception,異常對象 。          

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved