下面是我整理下來的JSP知識點:html
圖上的知識點均可以在我其餘的文章內找到相應內容。java
jsp靜態包含和動態包含的區別
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> 我是頁頭 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> 我是頁尾 </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <%@include file="head.jsp" %> <%@include file="foot.jsp" %> </body> </html>
<jsp:include page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>包含頁頭和頁尾進來</title> </head> <body> <jsp:include page="head.jsp"/> <jsp:include page="foot.jsp"/> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁頭</title> </head> <body> <% String s = "zhongfucheng"; %> 我是頁頭呀 <br> <br> <br> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>頁尾</title> </head> <body> <% String s = "zhongfucheng"; %> 我是頁尾呀 </body> </html>
<%@include file="xxx.jsp"%>
爲jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">
是jsp中的動做指令,其文件的包含是發生在編譯時期,也就是將java文件編譯爲class文件的時期 jsp有哪些內置對象?做用分別是什麼?
九個內置對象:web
其中,request、response、session、application、config這五個對象和Servlet的API是同樣的。這5個對象我就不解釋了。面試
在JSP中,尤爲重要的是pageContext對象。設計模式
pageContext是內置對象中最重要的一個對象,它表明着JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!瀏覽器
pageContext對象
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>獲取八大內置對象</title> </head> <body> <% System.out.println(pageContext.getSession()); System.out.println(pageContext.getRequest()); System.out.println(pageContext.getResponse()); System.out.println(pageContext.getException()); System.out.println(pageContext.getPage()); System.out.println(pageContext.getServletConfig()); System.out.println(pageContext.getServletContext()); System.out.println(pageContext.getOut()); %> </body> </html>
pageContext做爲域對象
相似於request,session,ServletContext做爲域對象而言都有如下三個方法:緩存
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>使用page域對象</title> </head> <body> <% pageContext.setAttribute("name", "zhongfucheng"); %> <% String value = (String) pageContext.getAttribute("name"); System.out.println(value); %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>request域對象設置屬性</title> </head> <body> <% //這是request域對象保存的內容 request.setAttribute("name","zhongfucheng"); %> <%--跳轉到1.jsp中--%> <jsp:forward page="1.jsp"/> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>在page域對象獲取屬性</title> </head> <body> <% //企圖獲取request域對象存進的屬性 String value = (String) pageContext.getAttribute("name"); System.out.println(value); %> </body> </html>
上面的pageContext默認是page範圍的,但pageContext對象重載了set、get、removeAttribute這三個方法服務器
多了一個設置域範圍的一個參數,若是不指定默認就是page。固然了,pageContext把request、session、application、page這幾個域對象封裝着了靜態變量供咱們使用。微信
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>在page域對象獲取request域對象的屬性</title> </head> <body> <% //使用重載的方法獲取request域對象的屬性 String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE); System.out.println(value); %> </body> </html>
pageContexst還有這麼一個方法:session
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>使用findAttribute</title> </head> <body> <% //使用findAttribute查找2.jsp中request域對象的屬性 String value = (String) pageContext.findAttribute("name"); System.out.println(value); %> </body> </html>
out對象:
只有向out對象中寫入了內容,且知足以下任何一個條件時,out對象纔去調用ServletResponse.getWriter方法,並經過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中:
page對象
內置對象page是HttpJasPage對象,其實page對象表明的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象至關於普通java類的this
exception對象
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %> <html> <head> <title></title> </head> <body> <%--模擬空指針異常的錯誤--%> <% String sss = null; sss.length(); %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>錯誤頁面</title> </head> <body> <% out.println("程序拋出了異常:" + exception); %> </body> </html>
jsp和servlet的區別、共同點、各自應用的範圍?
屬性做用域範圍
應用場景:
寫出5種JSTL經常使用標籤
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
寫一個自定義標籤要繼承什麼類
咱們能夠有兩種方式來實現自定義標籤:
SimpleTagSupport類的執行順序(原理):
SimpleTagSupport,通常調用doTag方法或者實現SimpleTag接口
JSP是如何被執行的?執行效率比SERVLET低嗎?
如何避免jsp頁面自動生成session對象?爲何要這麼作?
可使用頁面指令顯式關掉,代碼以下:
<%@ page session="false" %>
jsp的缺點?
說出Servlet和CGI的區別?
簡述JSP的設計模式。
在Web開發模式中,有兩個主要的開發結構,稱爲模式一(Mode I)和模式二(Mode II)
首先咱們來理清一些概念吧:
模式一指的就是在開發中將顯示層、控制層、數據層的操做統一交給JSP或者JavaBean來進行處理!
模式一有兩種狀況:
徹底使用JSP作開發:
優勢:
缺點:
使用JSP+JavaBean作開發:
優勢:
缺點:
Mode II 中全部的開發都是以Servlet爲主體展開的,由Servlet接收全部的客戶端請求,而後根據請求調用相對應的JavaBean,並全部的顯示結果交給JSP完成!,也就是俗稱的MVC設計模式!
MVC設計模式:
若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章的同窗,能夠關注微信公衆號:Java3y