深入理解JSP和Servlet

開始編寫比較復雜的jsp啦。

全稱:javaserver pages
在傳統(tǒng)的網頁HTML文件(.htm,.html)中加入java程序片段(Scriptlet)和jsp標簽,就構成了jsp網頁。

1、因為可以嵌入java代碼,由此具備動態(tài)特性。
java程序段可以操縱數(shù)據(jù)庫、重新定向網頁以及發(fā)送E-mail等,實現(xiàn)建立動態(tài)網站所需要的功能。

2、所有程序操作都是在服務器端執(zhí)行,網絡上傳送給客戶端的僅是得到的結果,這樣大大降低了對客戶瀏覽器的要求,即使客戶瀏覽器端并不支持java也可以訪問jsp網頁。

3、在里面嵌入的標簽是<%%>

4、強大的組件(java Bean)支持功能。

比如下面就是在頁面循環(huán)輸出兩個你好。

<%
for(;i<2;) {
%>
你好</br>
<%
}
%>

jsp的一般執(zhí)行過程:接受request后,就先把jsp文件經過jsp parser轉換為java文件(即Servlet文件),然后該文件被被jsdk(Servlet分析器)編譯成class文件,然后被執(zhí)行,再response回客戶端。執(zhí)行過程都是在服務器上執(zhí)行的。

圖片.png

其中 查找jsp文件后還會發(fā)生以下檢查:jsp是否是修改或創(chuàng)建后的第一次調用。

jsp查找過程

jsp原始代碼包含jsp元素和模板(Template)Data兩類。

template data值得是jsp引擎不處理的部分,即<% %>以外的部分。例如代碼的HTML部分,這些數(shù)據(jù)會直接送到客戶端。

jsp元素是指<% %>部分。由jsp引擎直接處理,這部分必須符合java語法,否則會出現(xiàn)編譯錯誤。



jsp的語法:
1、編譯器指令(directive)
例如<%@page import = "java.io."%>
該指令無論在jsp的哪一個地方,它的作用范圍都是整個jsp文件。
編譯器指令包含“包含指令”,“頁指令”和“taglib指令”
他們包含在<%@ page [import] [pageEncoding]%>卷標里。
兩個主要的指令是page與include。
例:import = "java.io.
"
已經默認import了
java.lang.*
javax.serlet.jsp.*
javax.servlet.http.*

就是jsp中用的request、out等tomcat已經定義好了。內置了的。

taglib指令:
<%@taglib uri = "URITOTagLibrary" prefix="tagPrefix"%>
用于引入定制標簽庫。

2、腳本語法(scripting)
html注釋
(jsp)隱藏注釋<%--comments--%>

jsp表達式<%=comments%>

jsp聲明:<%!declaration,declaration%>
如:<%! int a = 3;%> 和<% int a = 3;%>這兩個是有差別的。轉換為servlet后編譯的class文件是不一樣的哦。
第一句話是把a聲明為成員變量額,而第二句話則是把定義 為_jspService方法里面的局部變量。
一般定義為腳本段,而不是聲明。。。。比較穩(wěn)。
因為Servlet是單實例的,單實例的,單實例。。。

包含:<%@include file="相對位置"%>

3、動作語法(Action)
例如<jsp:forwward>,<jsp:getProperty>,<jsp:include>
(1)<jsp: forward page={"relativeURL" | "<%=expression %>" } />
(2)<jsp:param name="paramterName" value="{parameterValue | <%= expression %> }" />
[ <jsp:param...../> ]

page屬性是指轉到某一個頁面中。
page=“value”,value可以i一個表達式或是一個字符串用于說明你將要定向的文件或者URL。這個文件可以是jsp,或者是程序段。
同時在轉時,可以發(fā)送多個參數(shù)。
[ <jsp:param...../> ]
例子:轉到forwardto.jsp,并傳去參數(shù)名為username的值為winney的參數(shù)。

<jsp:forward page="forwardto.jsp">
<jsp:param name="username" value="winney" />
</jsp:forward/>

注:轉到頁面后,原本的那個頁面剩下的代碼是不會被執(zhí)行的。因為頁面的流程都已經轉到另外一個頁面里去了。

本質原因: 在jsp被翻譯為class文件后的源碼是在轉頁面的代碼后直接加一個return語句。

(2)<jsp: include>
包含一個靜態(tài)或者動態(tài)文件
<jsp:include page="{relativeURL |<%=expression%>}" flush="true" />

<jsp:include page="{relativeURL |<%=expression%>}" flush="true" />
<jsp: param name="parameterName" value="{parameterValue} | <%= expression %/>" />
[<jsp: param.../>]指可以有多個“<jsp:param/>”標記、

param可以將參數(shù)傳到被包含的靜態(tài)或者動態(tài)文件中。

關于servlet:
Servlet的框架是由兩個java包組成的:
javax.servlet包:定義了所有的Servlet類都必須實現(xiàn)或拓展的通用接口類。
javax.servlet.http包:定義了采用HTTP協(xié)議通信的HttpServlet類。

每一個servlet都必須實現(xiàn)javax.servlet.Servlet接口,GenericServlet是個通用的,不特定于任何協(xié)議的Servlet,它實現(xiàn)了Servlet接口,而HttpServlet繼承于GenericServlet,因此HttpServlet也實現(xiàn)了servlet接口,因此我們定義的servlet只需要繼承HttpServlet父類即可。

Servlet接口中定義了service方法,HttpServlet對該方法進行實現(xiàn):
將servletRequest和ServletReaponse轉換為HttpServletRequest和HttpServletResponse。
轉換完畢后,會調用HttpServlet自己定義的service方法;
在service方法中,首先獲得請求方法名,然后根據(jù)方法名調用對應的Do方法。
在HttpServlet類中調用的doGet、doPost方法都是返回錯誤信息,所以我們自定義的servlet要override HttpServlet里面的doGet、doPost方法。

圖片.png

Servlet的啟動:
在下列時刻Servlet容器裝載Servlet:
--Servlet容器啟動時自動裝載某些Servlet
--在Servlet容器啟動后,客戶首次向Servlet發(fā)出請求
--Servlet的類文件被更新后,重新裝載Servlet

Servlet被裝載后,Servlet容器創(chuàng)建一個Servlet實例并且調用Servlet的init()方法進行初始化。在Servlet的整個生命周期中,init方法只會被調用一次。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,017評論 0 11
  • jsp(Java Server Pages)技術 簡介 JSP是一種建立在Servlet規(guī)范功能之上的動態(tài)網頁技術...
    清楓_小天閱讀 1,502評論 0 12
  • 這部分主要是與Java Web和Web Service相關的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,504評論 0 10
  • 前面講了servlet入門實踐現(xiàn)在開始介紹jsp入門實踐,開發(fā)環(huán)境的搭建請參考我前面的tomcat的文章,jsp入...
    伊豚wall閱讀 3,435評論 2 56

友情鏈接更多精彩內容