記錄自己的學習歷程---關於JSP的幾個面試點(新手學習筆記,並不能保證內容正確性,如有誤請指教)
阿新 • • 發佈:2018-12-10
僅作為新手在學習過程中的筆記,並不能保證正確性。
1)WEB專案的結構
META-INFWEB-INF
lib 放jar包
class 放生成的位元組碼檔案
index.jsp 預設主介面
2)JSP的執行過程(編譯,翻譯,執行)(為什麼第一次訪問JSP比後面訪問的時候要慢)
JSP如果第一次執行需要將jsp翻譯成.java檔案,在編譯為.class檔案,所以第一次執行較慢,後續執行已經有.class檔案,可直接生成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檔案,不會產生衝突,只是在產生網頁時將兩個檔案合併-。