javaWeb-jsp知識點詳解
阿新 • • 發佈:2019-01-02
《一:jsp原理》
1:引擎: servlet引擎,支援servlet的執行環境;JSP引擎:支援jsp檔案翻譯成servlet和編譯成.class檔案的環境。
2: JSP翻譯成servlet,再被編譯成.class檔案,存放於:Tocat根路徑/work/Catalina/localhost/_log/apache/jsp,過程:
hello.jsp->hello_jsp.java->hello_jsp.class
3:繼承關係:
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {}
public final class hello_jsp extends org.apache.jsper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent{}
故jsp本質就是servlet.
1.4:當JSP內容改變時,會重新翻譯和編譯,生成的三個方法:
_jspInit對應init, _jspService對應service, _jspDestory對應Destory;
1.5:jsp如何對映是有jsp引擎處理的,如:
<servlet-mapping >
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
故jsp名字不可取為jsp,會造成衝突
1.6: 定義全域性的錯誤頁面:
<error-page>
<error-code>404</error-code>
<location >/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
《二:jsp語法》
1.靜態的網頁程式碼:HTML
2.動態的java程式碼,jsp的組成部分如下:
1.JSP的標準指令
2.JSP程式程式碼元素
3.JSP標準動作
4.標籤庫
3.jsp如何嵌入java程式碼:
3.1:jsp的java指令碼表示式
作用:向jsp輸出java程式碼內容
語法:<%=有返回的表示式%>,末尾向out.print()括號中的內容,末尾當然不加;
<%=new java.util.Date().toLocalString()%>翻譯成:out.print(“new java.util.Date().toLocalString()”);
3.2:jsp中的java指令碼片段:
作用:在JSP中編寫java程式碼,實現邏輯控制,相當於在service中寫程式碼:
語法:<%java程式碼;%>,末尾有分號;
<%String name=”will”%> :翻譯成servlet,_jspService方法中的程式碼:String name=”will”
3.3:jsp中jsp成員變數的宣告;
作用:在JSP(Servlet)中宣告servlet成員變數/方法
語法:<%!宣告語句%>
<%!private int age=17;%>翻譯成:private int age = 17;
4.jsp註釋:
html註釋: <!--註釋內容-->會被翻譯到servlet中;
jsp註釋: <!--註釋內容-->不會被翻譯到servlet中
5.jsp的標準指令:
5.1:特點:不向客戶端產生輸出;指令在整個JSP範圍內有效;為翻譯階段提供了全域性資訊。
5.2:語法:<%@標準指令 屬性=屬性值 %>
5.3: 三大指令:
1.page指令:
<%@page language=”java”(毫無爭議) import=”java.util.Date”(各種包用,分隔) contentType=”text/html;charset=”utf-8”(以此為準)
session=”true”(預設為true) errorPage=”相對路徑“(由本頁面跳轉到指定的頁面,不管全域性錯誤頁面了)%>
2.include指令(靜態包含):<%@include file=”top.jsp” %>在一個jsp中包含另一個jsp中的內容。
特點:只翻譯成一個servlet類,相當於把top.jsp原始碼整體拷貝,故此時top.jsp中只需要保留page指令和內容即可。
3.taglib,引入標籤庫
6.jsp的九大內建物件(翻譯在service中):
名稱 物件型別 備註
request HttpServletRequest
response HttpServletResponse
pageContext PageContext
session HttpSession 若要使用該物件,必須保證page指令中session屬性不能為false,預設為true
application ServletContext
config ServletConfig
out JspWriter
page Object(this)
exception Throwable 必須配置page指令isErrorPage=”true”
7.jsp中的四大作用域物件:
pageContext---PageContext 只在當前頁面有效
request---HttpServletRequest 在同一次請求中有效
session---HttpSession 在同一次會話中
application---ServletContext 在伺服器開啟時的任何時期
共同持有的方法:
void setAttrubute(String name, Object val)
Object getAttribute(String name)
void removeAttribute(String name)
8.JSP中常見的動作元素(WEB-INF中的資源通過請求轉發獲取):
1.請求轉發(也遵循相對路徑+不跨域原則)
<jsp:forward page=”/action/target.jsp”>
<jsp:param value=”17” name=”age” />
</jsp:forward>
2.請求包含(動態包含,在main.jsp中包含top.jsp):
<jsp:include page=”top.jsp” />
特點:會分別翻譯出兩份class位元組碼檔案。
9.常見筆試題:
1.jsp中的九大內建物件?
2.JSP中的四大作用域?
3.靜態包含和動態包含的區別:
3.1:在翻譯階段就在一個java檔案中;
3.2:後者包含檔案和被包含檔案都會翻譯成java檔案,編譯成class檔案,執行時才會動態地包含在一起。