JSP

JSP
    1.jsp技術
        jsp是sun提供動態web資源開發技術。爲了解決在Servlet中拼寫html內容css、js內容十分不方便的問題,sun提供了這樣一門技術。如果說Servlet是在java中嵌套HTML,則jsp就是在HTML中嵌套java代碼,從而十分便於組織html頁面
        
        jsp頁面在第一次被訪問到時會被jsp翻譯引擎翻譯成一個Servlet,從此對這個jsp頁面的訪問都是由這個Servlet執行後進行輸出
        
    2.jsp語法
        (1)JSP模版元素 :jsp頁面中書寫的HTML內容稱作JSP的模版元素,在翻譯過來的Servlet中直接被out.write()輸出到瀏覽器頁面上了
            
        (2)JSP表達式 <%= java表達式 %> 在翻譯過來的Servlet中,計算java表達式的值後,被out輸出到瀏覽器上
        
        (3)JSP腳本片斷 <% 若干java語句 %> 在翻譯過來的Servlet中,直接被複制粘貼到了對應的位置執行.
            在一個JSP頁面中可以有多個腳本片斷,在兩個或多個腳本片斷之間可以嵌入文本、HTML標記和其他JSP元素
            多個腳本片斷中的代碼可以相互訪問,猶如將所有的代碼放在一對<%%>之中的情況
            單個腳本片斷中的Java語句可以是不完整的,但是,多個腳本片斷組合後的結果必須是完整的Java語句
        (4)JSP聲明  <%! 若干java語句 %> 在翻譯過來的Servlet中會被放置到和Service方法同級的位置,變成了類的一個成員
            
        (5)JSP註釋 
         <%-- 註釋的內容 --%> 被jsp註釋註釋掉的內容,在jsp翻譯引擎將jsp翻譯成Servlet的過程中會被丟棄,在翻譯過來的Servlet中沒有這些信息
         <%//java註釋%> java註釋被當作jsp腳本片段被翻譯到了Servlet中,在.java文件被翻譯成.class文件的時候註釋信息被丟棄
         <!-- HTML註釋 --> html註釋被當作模版元素輸出到了瀏覽器上,瀏覽器認識html註釋不予顯示
       
        (6)JSP指令<%@ 指令名稱 屬性=... ...%>
           JSP指令(directive)是爲JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其餘部分
           
            page指令
            
            
            Include指令:
                include指令用於引入其它JSP頁面,如果使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet
                只有include指令進行的包含是靜態包含,其他的包含都是動態包含
            
            taglib指令


        
        (7)JSP九大隱式對象:在翻譯過來的Servlet中Service方法自動幫我們前置定義的九個對象,可以在jsp頁面中直接使用
          page
          confing
          application
          response
          request
          session
          out
          exception
          pageContext
          
          
          out
            相當於是response.getWriter得到PrintWriter
            out和response.getWriter獲取到的流不同在於,在於這個out對象本身就具有一個緩衝區.利用out寫出的內容,會先緩衝在out緩衝區中,直到out緩衝區滿了或者整個頁面結束時out緩衝區中的內容纔會被寫出到response緩衝區中,最終可以帶到瀏覽器頁面進行展示
            page指令中的
             [buffer="none | 8kb | sizekb" ]可以用來禁用out緩衝區或設置out緩衝區的大小,默認8kb 
             [ autoFlush="true | false"]用來設置當out緩衝區滿了以後如果在寫入數據時out如何處理,如果是true,則先將滿了的數據寫到response中後再接受新數據,如果是false,則滿了再寫入數據直接拋異常 


            在jsp頁面中需要進行數據輸出時,不要自己獲取response.getWriter,而是要使用out進行輸出,防止即用out又用response.getWriter而導致輸出順序錯亂的問題
          
          pageContext
            (1)可以作爲入口對象獲取其他八大隱式對象的引用
                getException方法返回exception隱式對象 
                getPage方法返回page隱式對象
                getRequest方法返回request隱式對象 
                getResponse方法返回response隱式對象 
                getServletConfig方法返回config隱式對象
                getServletContext方法返回application隱式對象
                getSession方法返回session隱式對象 
                getOut方法返回out隱式對象
            (2)域對象,四大作用域的入口,可以操作四大作用域中的域屬性
                
                作用範圍: 當前jsp頁面
                生命週期: 當對jsp頁面的訪問開始時,創建代表當前jsp的PageContext,當對當前jsp頁面訪問結束時銷燬代表當前jsp的pageContext
                作用:在當前jsp中共享數據
                
                    public void setAttribute(java.lang.String name,java.lang.Object value)
                    public java.lang.Object getAttribute(java.lang.String name)
                    public void removeAttribute(java.lang.String name)


                    public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
                    public java.lang.Object getAttribute(java.lang.String name,int scope)
                    public void removeAttribute(java.lang.String name,int scope)
                    
                    PageContext.APPLICATION_SCOPE
                    PageContext.SESSION_SCOPE
                    PageContext.REQUEST_SCOPE
                    PageContext.PAGE_SCOPE 


                    findAttribute方法 -- 搜尋四大作用域中的屬性,如果找到則返回該值,如果四大作用域中都找不到則返回一個null,搜尋的順序是從最小的域開始向最大的域開始尋找
                    
            (3)提供了請求轉發和請求包含的快捷方法
                pageContext.include("/index.jsp");
         pageContext.forward("/index.jsp");
    3.零散知識
        (1)jsp映射
            <servlet>
        <servlet-name>index</servlet-name>
        <jsp-file>/index.jsp</jsp-file>
        </servlet>
        <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/jsp/*</url-pattern>
        </servlet-mapping>
            
 
        
        (2)域的總結
            servletContext (application)
            session (session)
            request (request)
            pageContext
            
            如果一個數據只在當前jsp頁面使用,可以使用pageContext域存儲
            如果一個數據,除了在當前Servlet中使用,還要在請求轉發時帶到其他Servlet處理或jsp中顯示,這個時候用request域
            如果一個數據,除了現在我自己要用,過一會我自己還要用,存在session域
            如果一個數據,除了現在我自己要用過一會其他人也要用,存在ServletContext域中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章