1. 程式人生 > >記錄自己的學習歷程---關於JSP的幾個面試點(新手學習筆記,並不能保證內容正確性,如有誤請指教)

記錄自己的學習歷程---關於JSP的幾個面試點(新手學習筆記,並不能保證內容正確性,如有誤請指教)

僅作為新手在學習過程中的筆記,並不能保證正確性。

1)WEB專案的結構

META-INF
WEB-INF
    lib 放jar包
    class 放生成的位元組碼檔案
index.jsp 預設主介面

2)JSP的執行過程(編譯,翻譯,執行)(為什麼第一次訪問JSP比後面訪問的時候要慢)

JSP如果第一次執行需要將jsp翻譯成.java檔案,在編譯為.class檔案,所以第一次執行較慢,

後續執行已經有.class檔案,可直接生成jsp頁面,不用再進行翻譯和編譯,所以速度快。


3)JSP頁面中的組成部分(靜態內容,指令,小指令碼,表示式,註釋,宣告,動作)

靜態內容:HTML靜態文字
指令:以"<%@"開頭,以"%>"結尾
小指令碼:<%java程式碼%>
表示式:<%=java表示式%>
註釋:<!-- --> <%----%>兩種註釋
宣告:<%!方法%>
動作:<jsp:xxxxx/>

3)<!-- --><%----%>兩種註釋的區別
<!-- -->註釋在客戶端原始碼中可見,不安全,會增加網路傳輸量,降低頁面載入速度;
<%-- --%>註釋在客戶端原始碼中不可見,安全,降低了網路傳輸量,相比而言,<%-- --%>這種註釋更好。

4)<%%>  <%!%> 中宣告變數的區別

<% java程式碼 %>小指令碼中的程式碼定義在在_jspservice方法中,為區域性變數,不能在方法中再次宣告方法;

<%! %>這裡宣告的變數是全域性變數,方法也是類裡的成員方法。

<%! int num1=0 %> num1=<%=++num1 %>全域性變數,只初始化一次,每次重新整理頁面num1都會+1;
<% int num2=0 %> num2=<%=++num2 %>區域性變數位於_jspservice方法中,每次重新整理頁面,都會呼叫_jspservice方法初始化num2,值不變。

5)include  指令和動作的區別

<%@include file="head.jsp" %>
 使用include指令時,翻譯機將兩個JSP頁面翻譯為一個.java檔案,如果head.jsp中有String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";將會和index中的String path變數衝突,出現編譯錯誤 。

<jsp:include page="foot.jsp"></jsp:include>
使用include動作時,翻譯機會產生兩個獨立的java檔案,編譯產生兩個獨立的class檔案,不會產生衝突,只是在產生網頁時將兩個檔案合併-。