1、JSP瞭解html
JSP(java server pages,服務器頁面),可理解爲HTML+ Java = = JSP,它可生成動態的HTML(拼標籤)。是以.jsp爲後綴的文件,java
內容是以標籤爲主體,能夠內聯java代碼,本質上是servlet。web
2、JSP文件建立數組
第一步:建立一個web項目,步驟見:http://www.javashuo.com/article/p-kvquzmlz-d.html瀏覽器
第二步:在項目文件夾下的webRoot下建立.jsp結尾的文件
服務器
第三步:jsp文件的默認編碼爲:ISO-8859-1,需修改成utf-8,步驟以下:session
點擊Window->點擊Preference->在搜索框中輸入jsp->找到JSP並點擊->在右側的Encoding下拉框中向上翻選中UTF-8
app
3、JSP引擎jsp
大概瞭解編碼
JSP引擎和JSP容器指的同同樣東西,他們都指用來統一管理和容許Web應用程序的軟件,常見的JSP引擎有Tomcat、JRun等,最經常使用的就是Tomcat。
安裝JSP引擎的計算機,其實就是Web服務器。當瀏覽器要訪問一個JSP文件時,JSP文件會通過JSP引擎轉換爲一個Servlet,被編譯成class,而後經過class
生成的的對象給用戶進行響應。
JSP執行流程
首先請求JSP引擎,將文件生成java文件,再將java文件編譯成class文件,再經過class建立對象,而後給用戶響應
4、JSP頁面組成部分
1.靜態內容
2.指令
JSP指令用來設置整個JSP頁面相關的屬性,指令能夠有多個屬性,以鍵值對的形式表示,並用空格隔開
1)與頁面相關的page指令:設置頁面相關的屬性
<%@page 屬性1 = "屬性值1" 屬性2 = "屬性值2" 屬性3 = "屬性值3" ...%>
2)與文件引入相關的include指令:將一個外部文件嵌入到另外一個JSP或HTML文件,同時解析這個頁面中的JSP語句
<%@include file = "hh.html"%>
3)與標籤相關的taglib指令:使用標籤庫定義新的自定義標籤
<%@taglib url = "tablibburl" prefix = "tagpre"%>
這裏對於以JSTL標籤庫爲例的使用可看:http://www.javashuo.com/article/p-avctvebk-eo.html
3.表達式
提供的是一種特殊的JSP語法格式,用來將java中的變量輸出到頁面上,是出如今__jspService方法中的
在Servlet中所生成的代碼爲:
out.print(變量名);
在JSP文件中使用以下:
<%=變量名或是有返回值的方法%>
4.小腳本
在JSP文件中編寫的java代碼,在引擎解析後,也是出如今__jspService方法中的
在JSP文件中使用以下:
<%
<%--寫任何的java代碼(能夠是定義的變量,編寫的java語句,不能定義方法)--%>
show();
System.out.println("這就是小腳本的做用");
%>
5.聲明
其實就是Java程序中的成員聲明,能夠用來聲明成員變量、成員方法。此處的聲明都是出如今類體中的而不是出如今方法體中的
在JSP文件中使用以下:
<%!
private Integer num = 10;
public void show(){
System.out.println(num);
}
%>
6.註釋
JSP註釋分三種:
HTML註釋:(客戶端可見)
<!--html註釋-->
JSP註釋:(客戶端不可見)
<%--JSP註釋--%>
JSP腳本註釋:
//單行註釋
/*多行註釋*/
5、案例
1.JSP代碼
1 <body> 2 <% 3 List<order> list = DealWithorder.findAll(); 4 %> 5 <input type = "text"> 6 <input type = "button" value = "搜索"> 7 <table> 8 <tr> 9 <th>訂單表 10 <input type = "button" value = "全刪"> 11 <input type = "button" value = "添加"> 12 </th> 13 </tr> 14 <tr> 15 <td>下單時間</td> 16 <td>姓名</td> 17 <td>詳細地址</td> 18 <td>預留電話</td> 19 <td>車牌號碼</td> 20 <td>故障描述</td> 21 <td>預定時間</td> 22 23 </tr> 24 <% 25 for(order o : list){ 26 System.out.println(o); 27 %> 28 <tr> 29 <td><%= o.getTime() %></td> 30 <td><%= o.getName() %></td> 31 <td><%= o.getAddress() %></td> 32 <td><%= o.getPhonenum() %></td> 33 <td><%= o.getCarnum() %></td> 34 <td><%= o.getProblem() %></td> 35 <td><%= o.getDatetime() %></td> 36 <td> 37 <input type = "button" value = "刪除"> 38 <input type = "button" value = "修改"> 39 </td> 40 </tr> 41 <% 42 } 43 %> 44 <tr> 45 <td colspan = "8"> 46 當前 頁/共 頁 首頁 上一頁 1 2 3 ... 下一頁 尾頁 47 </td> 48 </tr> 49 </table> 50 </body>
2.頁面效果
6、JSP九大內置對象
大概瞭解
內置對象(又稱隱含對象),在JSP中不須要建立(由服務器/容器建立),能夠直接使用的對象
內置對象
out:
out對象是JSPWriter類的實現,是向客戶端輸出內容經常使用的對象
類型:JSPWriter
做用:向客戶端進行響應字符打印流
request(四大做用域對象之一,important):
類型:HttpServletRequest
做用:請求對象,包含了請求信息
getParameter("key");獲取用戶提交的表單信息
setCharcterEncoding("字符集");設置請求編碼格式,防止亂碼
setAtrribute("key","value");將數據保存到Request範圍內的變量
forward(String url);轉發
getParametersValues(String name);返回包含參數name全部值的數組
response(important):
類型:HttpServletResponse
做用:響應對象,用來給用戶進行響應
addCookie();將一個Cookie對象發送到客戶端
sendRedirect(String url);重定向
session(四大做用域對象之一,important):
類型:HttpSession
做用:會話對象,用來進行數據的共享和會話的跟蹤
setMaxInactiveInterval(int num);設置session對象的有效活動時間
invalidate();銷燬當前的session
application(四大做用域對象之一,important):
類型:ServletContext
做用:全局的Servlet上下文對象,每一個應用只有一個,從應用啓動,就建立了,直到應用消亡,對象才被釋放。
config:
類型:ServletConfig
做用:Servlet配置對象,較少使用
page:
類型:Object
做用:指的當前JSP頁面對象
pageContext(四大做用域對象之一,important):
類型:pageContext
做用:頁面的上下文,用來在一個頁面中進行數據的共享與通訊
exception:
類型:Throwable
做用:經常使用於錯誤處理的頁面,用來收集其餘頁面產生的錯誤信息,只有isErrorpage="true"時,纔會產生這個對象
7、JSP四大做用域
大概瞭解
爲了頁面、請求和用戶之間傳遞和共享數據,JSP提供了四個不一樣的做用域:pageContext(頁面做用域)、request(請求做用域)、
session(會話做用域)、application(應用程序做用域),這些做用域規定了數據能夠傳遞和共享的範圍以及數據的存活時間。
四大做用域(由上向下,做用域範圍由小到大)
pageContext:一個頁面
request:一個請求(可能包含多個頁面)
session:一次會話(可能包含屢次請求,默認數據存儲時間30分鐘)
application:一次服務(包含屢次會話)
經常使用方法:
setAtrribute("key","value");將數據保存在對應做用域範圍內的變量
Object val = getAtrribute("key");將數據從對應做用域範圍內取出來
removeAtrribute("key");將指定數據從對應做用域範圍內的刪除
1.添加數據到對應的做用域
2.將數據從對應的做用域取出來
3.方式二取值結果(從做用域小的先取值)
4.將數據轉發到頁面
5.將數據重定向到頁面
6.請求轉發和請求重定向的區別
請求重定向:客戶端行爲,response.sendRedirection("redirect.jsp");從本質上等於兩次請求,前一次的請求對象不會保存,地址欄的url地址會改變
請求轉發:服務器行爲,request.getRequestDispatcher("forward.jsp").forward(request,response);是一次請求,轉發後請求對象會保存,地址欄和url地址不會改變
8、EL表達式
用於快速從域對象中取出信息,並輸出至網頁
格式:
取出基本數據類型的格式:${key}
取出對象的屬性的格式:
${對象的key.屬性名}
取出數組/集合中對象的屬性值:
方式1:${數組的key[下標].屬性名稱}
方式2:${數組的key[下標]["屬性名"]}
方式3:${數組的key[下標][屬性名的key]}
EL表達式獲取數據流程:
採用就近原則,按照四大做用域由小到大的順序依次取數據。
9、JSP的六大動做
include動做
用於引入jsp文件,在轉換時期,是沒有引入的,只有當執行到include代碼的時候纔會被動態的編譯載入
<jsp:include page = "引用文件的地址" flush = "false"></jsp:include>
include動做與include指令區別:
include指令是JSP程序的轉換時期,將引入的文件嵌入,而後容易進行編譯
userbean、setProperty、getProperty動做
用於給實體對象賦值
<jsp:userbean id = "別名" class = "全限定名" scope = "做用範圍" />
<jsp:setProperty property = "屬性名稱" name = "別名" value = "值"/>
<jsp:getProperty property = "屬性名稱" name = "別名" />
forward動做、param動做
<jsp:forward page = "轉發目標文件的地址">
<jsp:param value = "值" name = "別名"/>
<jsp:param value = "值" name = "別名"/>
</jsp:forward>