1. 程式人生 > >javaWeb-jsp知識點詳解

javaWeb-jsp知識點詳解

《一: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檔案,執行時才會動態地包含在一起。