1. 程式人生 > >百戰程序員——JSP

百戰程序員——JSP

跟蹤 但是 obj java服務器 問題 cati 規模 引入 inf

技術分享圖片

  1. JSP全稱是什麽?它相比servlet有什麽優勢?有什麽劣勢?
    • JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計。

      JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在於服務端的資源的應用邏輯。

      JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。

      JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。

    • JSP優點:

      一次編寫,到處運行。除了系統之外,代碼不用做任何更改。

      系統的多平臺支持。基本上可以在所有平臺上的任意環境中開發,在任意環境中進行系統部署,在任意環境中擴展。相比ASP的局限性JSP的優勢是顯而易見的。

      強大的可伸縮性。從只有一個小的Jar文件就可以運行Servlet/JSP,到由多臺服務器進行集群和負載均衡,到多臺Application進行事務處理,消息處理,一臺服務器到無數臺服務器,Java顯示了一個巨大的生命力。

      多樣化和功能強大的開發工具支持。這一點與ASP很像,Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,並且其中許多已經可以順利的運行於多種平臺之下。

      支持服務器端組件。web應用需要強大的服務器端組件來支持,開發人員需要利用其他工具設計實現復雜功能的組件供web頁面調用,以增強系統性能。JSP可以使用成熟的JAVA BEANS 組件來實現復雜商務功能。

    • JSP缺點:

      正是由於為了跨平臺的功能,為了極度的伸縮能力,所以極大的增加了產品的復雜性。

      Java的運行速度是用class常駐內存來完成的,所以它在一些情況下所使用的內存比起用戶數量來說確實是“最低性能價格比”了。

    • servlet優點:

      Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。

      功能強大

      在Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕松地完成。例如,Servlet能夠直接和Web服務器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。

      可移植性好

      Servlet用Java編寫,Servlet API具有完善的標準。因此,為IPlanet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務器都直接或通過插件支持Servlet。

      節省投資  

      不僅有許多廉價甚至免費的Web服務器可供個人或小規模網站使用,而且對於現有的服務器,如果它不支持Servlet的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。

      缺點:

         

  2、JSP的本質是servlet,為什麽這麽說?

    

    Servlet是一個特殊的Java程序,它運行於服務器的JVM中,能夠依靠服務器的支持向瀏覽器提供顯示內容。

    JSP本質上是Servlet的一種簡易形式, JSP會被服務器處理成一個類似於Servlet的Java程序,可以簡化頁面內容的生成。

  3、我們訪問a.jsp就是訪問我們寫好的a.jsp文件,這種說法對嗎?為什麽?

    不對,JSP頁面執行過程

  4、【上機】畫圖說明訪問a.jsp的整個流程。

技術分享圖片

  5、<% %>是Java代碼塊的語法。如果在JSP文件中寫多個代碼塊,它們都是位於_jspService方法裏嗎?

  6、看代碼解決問題:

<%

int c = 10;

%>

<%

int d = c+10; //這個代碼塊能引用上個代碼塊的變量嗎?說出理由。

%>

可以。

  7、page指令的contenttype,import分別對應Java源碼中什麽代碼?

  8、靜態導入和動態導入的區別是?

    

靜態導入語法

<%@include file="scriptlet.jsp"%>

動態導入語法

<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="patameterValue">
</jsp:include>


    靜態導入是完全融入,兩個頁面融合成一個Servlet

    動態導入是在Servlet中,使用include方法來引入被引導頁面內容

    靜態導入被編譯頁面指令會起作用

    動態導入只是插入被導入頁面的body內容

    .動態導入可以增加額外的參數

  9、說出這三種註釋的區別:HTML註釋、Java註釋、JSP註釋。

  10、<jsp:include>是JSP標簽,他是在什麽時機執行?

    

  • jsp:include標簽中引入的資源是在運行時才包含,而且只包含運行結果。而include指令引入的資源是在編譯時期包含,包含的是源代碼。

  A . 瀏覽器解析HTML

   B. Java編譯器生成class文件時

   C. JSP引擎將JSP代碼轉譯Java源代碼

  11、表達式:<%=request.getParameter("a")%>, Java源代碼中對應代碼是什麽?

    < %=request.getParameter(“username”)% > 等價於 ${ param.username }

  12、<%! %>中可以定義成員變量和方法。 能否在<% %>中引用呢? 並用代碼測

    可以

  13、session對象,我不想在JSP頁面中預先定義。怎麽做?

    

如何使用Session:

  1 得到session

在servlet中:HttpSession hs=request.getSession(true);

JSP中,session是一個內置對象,可以直接使用、

  2 向session添加屬性

servlet中:hs.setAttribute(String name,Object o)

   JSP中 session.setAttribute(String name,Object o)

  3 從session得到某個屬性

servlet中:hs.getAttribute(String name);

JSP中: session.getAttribute(String name);

  4 從session刪除某個屬性

servlet中:hs.removeAttribute(String name);

JSP中:session.removeAttribute(String name);

  14、pageContext、request,session,application四個作用域的區別? 

    一、 生命周期:

    1.   page:存在page中的變量,只作用於當前的jsp頁面,當發生跳轉、重定向、定時刷新時,將隨之銷毀;
    2.   request:存在request中的變量,作用於一次HTTP請求到服務器處理結束,返回響應的整個過程,該變量可以隨著forward的方式跳轉到多個jsp中,一但刷新頁面,它們將重新計算;
    3.   session:存在Session中的變量,作用於一次會話中,從打開瀏覽器到關閉瀏覽器過程中,將一直累加;(若想在再次打開瀏覽器時,變量仍然存在,則可以將session的JSESSIONID存到Cookie中,在給cookie一個存活時間)
    4.   application:存在application中的變量,作用於整個應用中,即從應用啟動到應用結束,如果不進行手工刪除,它們將一直可以使用,而且這些變量所有用戶均可使用。

    二、 作用範圍:

    1.   page:用戶請求的當前頁面;
    2.   request:用戶請求訪問的當前組件,以及和當前web組件共享同一用戶請求的web組件;
    3.   session:同一個Http會話中的web組件共享;
    4.   application:整個web應用的所有web組件共享,即只要是同一個服務器下的均可使用。

  15、JavaBean是什麽?用來做什麽的? JavaBean定義時,必須要無參的構造方法嗎?

    

  JavaBean是一個遵循特定寫法的Java類,它通常具有如下特點:

  • 這個Java類必須具有一個無參的構造函數
  • 屬性必須私有化。
  • 私有化的屬性必須通過public類型的方法暴露給其它程序,並且方法的命名也必須遵守一定的命名規範。

  

  優點:1.實現界面和Java代碼分離,便於日後維護和擴展

2.可解決代碼重復編寫,減少代碼冗余。

  原則上類可以沒有無參數構造器。但是你就不能在許多地方使用這個類啦!

  因為他們都需要先調用new BeanClass();然後才能被設置屬性或者賦值給其他的需要的類。

  16、<jsp:forward>定義請求轉發後,在它後面的代碼會不會被執行,為什麽?

    

  redirect 後,確認了要跳轉的頁面的 url,繼續執行 redirect 下面的代碼;執行完後,斷開當前的與

用戶所發出的請求連接,即斷開 request 的引用指向,因此 request 裏存放的 username 信息也會丟失

;然後再與用戶建立新的請求連接,即創建新的 request 對象,這樣 false 頁面的通過

request.getAttribute("user") 就會得到一個 null 值;最終顯示的是頁面是 false 頁面,所以地址欄

的 url 內容會發生變化。

  forward 後,確認了要跳轉的頁面的 url,現在停止繼續執行後面的代碼,而是先執行 success

(servlet) 裏的代碼,執行完後再回來繼續執行 check 後面的代碼;在這期間 check 和 success 共享

一個 request 和 response 對象,所以 success 頁面通過 request.getAttribute("user") 便可以取到

值;這個過程最後執行的還是 check 頁面(即使 forward 後面沒有任何代碼),所以地址欄的 url 內容

不會發生變化。

  17、下面這個異常可能是什麽原因引起的:

org.apache.jasper.JasperException: /4.jsp(5,27) Expecting "jsp:param" standard action with "name" and "value" attributes

  18、<jsp:include>是靜態導入還是動態導入?

    動態導入

  19、MVC模式各個字母分別指的是什麽意思?

    

MVC的概念,即M-model-模型:JavaBean;V-view-表現:JSP頁面;C-control-控制和處理:Servlet。

  20、查資料解釋JSP開發中,model-1和model-2是什麽意思?

  看這裏

  1. model-1有什麽劣勢?有什麽優勢?
  1. model-2有什麽優勢?它符合MVC模式嗎?

  21、【上機】使用model-1,完成登錄項目

http://www.itkeyword.com/doc/063899862555715059/JSP-JavaBean-JavaWeb

  22、上機】使用model-2,完成登錄項目

http://blog.csdn.net/suneqing/article/details/46277313

百戰程序員——JSP