標籤: javawebhtml
[TOC]java
JSP:Java Server Pages,一種動態web資源的開發技術git
API文檔github
JSP本質是一個servlet.apache
每一個JSP頁面在第一次被訪問時,WEB容器會把請求交給JSP引擎(即一個JAVA程序)處理。JSP引擎先將JSP翻譯成一個_jspServlet
(實質也是一個servlet),而後按照servlet的調用方式進行調用。api
work
目錄,這jsp類的父類是org.apache.jasper.runtime.HttpJspBase
,這個HttpJspBase
類繼承自HttpServlet
_jspService
方法。_jspService
方法中經過out.write()
寫出來;JSP中的Java代碼會原封不動的搬到_jspService
方法中。_jspService
方法中提早準備好了一些對象供JSP調用,如:out,page,application,request,response
等等。下面以demo1.jsp
爲例,展現對應的類%CATALINA_HOME%\work\Catalina\localhost\hello\org\apache\jsp\demo1_jsp.java
中的部分代碼瀏覽器
示例1:demo1.jsp
緩存
<%@ page import="java.util.Date" %><%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/1/27 Time: 16:45 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>demo1</title> </head> <body> 當前時間時: <% Date date = new Date(); out.write(date.toGMTString()); %> </body> </html>
示例2:_jspService
方法中代碼片斷tomcat
out.write("\r\n"); out.write("\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>demo1</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("當前時間時:\r\n"); Date date = new Date(); out.write(date.toGMTString()); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n");
示例3:_jspService
方法中一些定義的對象
final javax.servlet.jsp.PageContext pageContext; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null;
<%=變量或表達式 %>
腳本表達式(無分號),用於輸出數據。<% %>
中同樣),單個片斷可不完整。_jspService
方法外。語法:<%! java代碼 %>
。<%-- 註釋 --%>
,註釋的內容不會發給瀏覽器。<%@ 指令 屬性名="值" %>
。
request,response,session,application,config,page,exception,out,pageContext
關於上述語法的一些說明
page指令語法:
<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %>
errorPage
:錯誤提示頁面。也可在web.xml
的<error-page>
標籤配置,異常處理頁面。在page指令設置的優先級高於在web.xml
配置。pageEncoding
:JSP引擎以何種碼錶翻譯JSP,該值需和JSP文件的保存編碼一致,且若要在瀏覽器正確顯示,還要和contentType
一致。動態包含(運行時包含):request.getRequestDispatcher("/public/head.jsp").include(request,response)
,涉及到的jsp會生成單獨的servlet,即有多個servlet,在瀏覽器訪問時包含。靜態包含性能優於動態包含
JSP經常使用標籤
<jsp:include>
:pageContext.include(),動態包含<jsp:forward>
<jsp:param>
JSP引擎在調用JSP對應的_jspServlet
時,會傳遞和建立9個web開發相關的對象供使用。後二者(out
和pageContext
)爲JSP獨有
out隱式對象:用於向客戶端發送文本數據。經過調用pageContext
對象的getOut
方法返回,類型爲JspWriter
,做用和ServletResponse.getWriter
返回的PrintWriter
對象類似。
JspWriter
至關於自帶緩存功能的PrintWriter
,設置page指令的buffer屬性課調整緩存大小。知足以下條件之一,out對象才調用ServletResponse.getWriter
方法,並經過返回的PrintWriter
對象將out對象的緩衝區的內容真正寫入到servlet引擎提供的緩衝區中:
例子:
<% out.write("out.write<br/>"); response.getWriter().write("response.getWriter.write<br/>"); %>
瀏覽器顯示:
response.getWriter.write out.write
可見,因爲out有緩衝,因此後顯示。
pageContext對象:是JSP技術中最重要的一個對象,它表明JSP頁面的運行環境
Class PageContext的API文檔
javaweb中的四個域:
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
findAttribute(java.lang.String name)
查找各個域中的屬性,是PageContext
從父類javax.servlet.jsp.JspContext
繼承的,實現了父類的抽象方法。會依次從page,request,session,application
域中尋找相應的屬性,找到爲止。
jsp映射
在webxml
的<servlet>
標籤中加<jsp-file>
標籤,其餘的和servlet映射同樣
查找jsp頁面中的錯誤
JavaBean是一個遵循特定寫法的java類,JavaBean經常使用於封裝數據,具備以下熱點:
JSP中提供了三個關於JavaBean的標籤:
<jsp:useBean>
:用於在JSP頁面中查找或實例化一個JavaBean組件<jsp:setProperty>
:用於在JSP頁面中設置一個JavaBean組件的屬性<jsp:getProperty>
:用於在JSP頁面中獲取一個JavaBean組件的屬性一些細節
<jsp:useBean>
標籤的標籤體只在實例化bean時才執行<jsp:setProperty>
可用請求參數給bean屬性賦值,支持8種基本數據類型的轉換(把客戶機提交的字符串轉成相應的8種基本類型賦到bean的屬性上)property="*"
,用全部請求參數爲bean賦值,請求參數名稱和bean屬性名稱必需要一致<jsp:getProperty>
標籤輸出結果爲**"null"字符串**