JSP基礎(chǔ)
- JSP是簡(jiǎn)化Servlet編寫(xiě)的一種技術(shù),它將Java代碼和HTML語(yǔ)句混合在同一個(gè)文件中編寫(xiě),只對(duì)網(wǎng)頁(yè)中的動(dòng)態(tài)產(chǎn)生的內(nèi)容采用Java代碼來(lái)編寫(xiě),而對(duì)固定不變的靜態(tài)內(nèi)容采用靜態(tài)HTML頁(yè)面的方式編寫(xiě)。
- helloworld
在eclipse中新建一個(gè)JSP頁(yè)面,在body節(jié)點(diǎn)內(nèi)的<% %>即可編寫(xiě)Java代碼.
<%
Date date = new Date();
System.out.println(date);
%>
- JSP可以放置在WEB應(yīng)用程序中的除了WEB-INF及其子目錄外的其他任何目錄中,JSP頁(yè)面的訪問(wèn)路徑與普通HTML頁(yè)面的訪問(wèn)路徑形式完全一樣。
JSP運(yùn)行原理
1)JSP本質(zhì)上是一個(gè)Servlet,WEB容器(Servlet引擎)收到以.jsp為擴(kuò)展名的URL的訪問(wèn)請(qǐng)求時(shí),它將把該訪問(wèn)請(qǐng)求交給JSP引擎去處理。
2) 每個(gè)JSP 頁(yè)面在第一次被訪問(wèn)時(shí),JSP引擎將它翻譯成一個(gè)Servlet源程序,接著再把這個(gè)Servlet源程序編譯成Servlet的class類(lèi)文件,然后再由WEB容器(Servlet引擎)像調(diào)用普通Servlet程序一樣的方式來(lái)加載和解釋執(zhí)行這個(gè)由JSP頁(yè)面翻譯成的Servlet程序。
3)JSP規(guī)范也沒(méi)有明確要求JSP中的腳本程序代碼必須采用Java語(yǔ)言,JSP中的腳本程序代碼可以采用Java語(yǔ)言之外的其他腳本語(yǔ)言來(lái)編寫(xiě),但是JSP頁(yè)面最終必須轉(zhuǎn)換成Java Servlet程序。
4)可以在WEB應(yīng)用程序正是發(fā)布之前,將其中所有的JSP頁(yè)面預(yù)先編譯成Servlet程序。
JSP隱含對(duì)象:沒(méi)有聲明的變量就可以使用,一共9個(gè)隱含對(duì)象
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
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;
//...
//使用<% %>編寫(xiě)的代碼在此位置,可以用到request,response,pageContext,session,application,
//config,out,page這8個(gè)隱含對(duì)象。(實(shí)際上還可以使用一個(gè)叫exception的隱含對(duì)象)。
1)request: HttpServletRequest的一個(gè)對(duì)象
2)response: HttpServletResponse的一個(gè)對(duì)象(JSP頁(yè)面中幾乎不會(huì)調(diào)用該對(duì)象任何方法)
3)pageContext:頁(yè)面的上下文,是PageContext的一個(gè)對(duì)象。可以從該對(duì)象中獲取到其他8個(gè)隱含對(duì)象,也可以從中獲取到當(dāng)前頁(yè)面的其他信息。(學(xué)習(xí)自定義標(biāo)簽時(shí),使用它。)
- session: 代表瀏覽器和服務(wù)器的一次會(huì)話,是HttpSession的一個(gè)對(duì)象。
- application:代表當(dāng)前應(yīng)用,是ServletContext對(duì)象。
- config:當(dāng)前JSP對(duì)應(yīng)的Servlet的ServletConfig 對(duì)象。若需要訪問(wèn)當(dāng)前JSP配置的初始化參數(shù),需要通過(guò)映射的地址才可以。
映射JSP:
<servlet>
<servlet-name>hellojsp</servlet-name>
<jsp-file>/hello.jsp</jsp-file>
<init-param>
<param-name>test</param-name>
<param-value>testvalue</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hellojsp</servlet-name>
<url-pattern>/hellojsp</url-pattern>
</servlet-mapping>
- out: JspWriter對(duì)象,調(diào)用out.println()可以直接把字符打印到瀏覽器上。
8)page:指向當(dāng)前JSP對(duì)應(yīng)的Servlet對(duì)象的引用,但為Object類(lèi)型,只能調(diào)用Object類(lèi)的方法(幾乎不用)。
9)exception:在聲明了page 指令的isErrorPage="true"時(shí)才可以使用。
<%@ page isErrorPage="true" %>
pageContext,request,session,application(對(duì)屬性的作用域范圍從小到大)
out, response,config, page, excpetion
JSP基本語(yǔ)法
1)JSP模板元素:JSP頁(yè)面中的靜態(tài)HTML內(nèi)容稱(chēng)之為模板元素。
2)JSP表達(dá)式(expression)提供了將一個(gè)java變量或表達(dá)式的計(jì)算結(jié)果輸出到客戶端的簡(jiǎn)化方式,它將要輸出的變量或表達(dá)式直接封裝在<%=和 %>之中。
3)JSP腳本片斷(scriptlet)是指嵌套在<%和%>之中的一條或多條Java程序代碼,多個(gè)腳本片斷中的代碼可以相互訪問(wèn)
- JSP聲明:JSP聲明將Java代碼封裝在<%!和%>之中,它里面的代碼將被插入進(jìn)Servlet的_jspService方法的外面。(在JSP頁(yè)面中幾乎從來(lái)不這樣使用)
- JSP注釋?zhuān)?br>
<%-- JSP注釋 --%>
JSP指令
- JSP指令是為JSP引擎而設(shè)計(jì)的,它們并不直接產(chǎn)生任何可見(jiàn)輸出而只是告訴引擎如何處理JSP頁(yè)面中的其余部分。
- 在目前的JSP 2.0中,定義了page、include和taglib三種指令。