<a href="請求資源地址?參數名=值&參數名=值&參數名=值">xxxx</a>
註釋:<%-- --%>
瀏覽器查看源代碼看不到
javascript
<%=有結果返回的表達式(返回結果必須是基本數據類型或字符串)%>
html
;
結尾。 <% java語句 %>
java
;
結尾。<% %>
中java語句至關於寫在servlet的doGet. doPost方法中。 <%! %>
jquery
<%! %>
中聲明的變量是全局變量,至關於在servlet類中聲明一個屬性當jsp代碼與html混合書寫時,注意結束符問題。
web
<jsp:動做名>
<jsp:forward page="跳轉頁面">
跳轉動做(服務器跳轉)
ajax
<jsp:include page="頁面">
動態包含,獲取指定頁面執行後的結果。
sql
<%@include file="">
靜態包含,把指定頁面拷貝到當前頁面後執行當前頁面。數據庫
動態包含:至關於每一個jsp頁面編譯一個獨立的servlet,沒法實現變量. 方法等的共享。 靜態包含:至關於將全部jsp頁面整合成一個servlet,可使用其餘頁面定義的變量. 方法。json
<jsp:param>
canvas
<jsp:forward page="test.jsp"> <jsp:param value="tom" name="username"/> ----------- -------------- <jsp:param name="age"> 12 </jsp:param> </jsp:forward>
<jsp:forward page="test.jsp?username=tom&age=12">
<jsp:useBean id="變量名" class="包名.類名" scope="4個範圍">
<jsp:setProperty name="Bean的id" property="對象的屬性名" param="input表單的name屬性值" value="值" >
<jsp:setProperty name="person" property="*"/>
<jsp:getProperty name="Bean的id" property="對象的屬性名">
<jsp:setProperty>
.<jsp:getProperty>
實際上就是調用Bean對象的setter. getter方法。
<%@page errorPage="error.jsp"%>
<%@page isErrorPage="true"%>
<error-page> <exception-type>java.lang.ArithmeticException</exception-type> <location>/MathError.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page>
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { /*只處理這兩種兼容的異常*/ …… }
類型 | 對象名 | 功能 |
---|---|---|
JspWriter | out | 往瀏覽器寫內容 |
HttpServletRequest | request | Http請求對象. |
HttpServletResponse | response | Http響應對象 |
PageContext | pageContext | JSP的頁面上下文 |
HttpSession | session | 會話對象 |
ServletContext | application | 應用上下文 |
ServletConfig | config | JSP的ServletConfig |
Object | page | 頁面實現類的對象(例如:this) |
Exception | exception | 含有指令<%@page isErrorPage="true"%> |
其中,有4個是範圍對象
pageContext,request,session,application
對應<jsp:useBean/>
指令的scope分別是:page,reqeust,session,application
也就是說,指定不一樣scope的bean對象(Java Bean)會被綁定到不一樣的範圍對象中
選擇範圍對象的原則:做用域的範圍越小越好;由於做用域小的生命週期短,有利於性能提升。
例如:
<jsp:useBean id="stu" class="vo.Student" scope="page"/>
<% Student stu = pageContext.getAttribute("stu"); if(stu==null) { stu=new Student(); pageContext.setAttribute("stu",stu); } %>
PageContext對象提供取得屬性的方法
PageContext對象取得其餘隱含對象的方法
pageContext對象存取其餘隱含對象屬性的方法,此時須要指定範圍的參數。
儲存和取得屬性方法;
方法 | 功能 |
---|---|
void setAttribute(String name, Object value) | 設定name屬性的值爲value |
Enumeration getAttributeNamesInScope(int scope) | 取得全部scope 範圍的屬性 |
Object getAttribute(String name) | 取得name 屬性的值 |
void removeAttribute(String name) | 移除name 屬性的值 |
取得請求參數的方法
方法 | 功能 |
---|---|
String getParameter(String name) | 取得name 的參數值 |
Enumeration getParameterNames() | 取得全部的參數名稱 |
String [] getParameterValues(String name) | 取得全部name 的參數值 |
Map getParameterMap() | 取得一個要求參數的Map |
可以取得請求HTTP 標頭的方法
方法 | 功能 |
---|---|
String getHeader(String name) | 取得name 的標頭 |
Enumeration getHeaderNames() | 取得全部的標頭名稱 |
Enumeration getHeaders(String name) | 取得全部name 的標頭 |
int getIntHeader(String name) | 取得整數類型name 的標頭 |
long getDateHeader(String name) | 取得日期類型name 的標頭 |
Cookie [] getCookies() | 取得與請求有關的cookies |
其餘的方法
方法 | 功能 |
---|---|
String getContextPath() | 取得Context 路徑(即站臺名稱) |
String getMethod() | 取得HTTP 的方法(GET. POST) |
String getProtocol() | 取得使用的協議 (HTTP/1.1. HTTP/1.0 ) |
String getQueryString() | 取得請求的參數字符串,不過,HTTP的方法必須爲GET |
String getRequestedSessionId() | 取得用戶端的Session ID |
String getRequestURI() | 取得請求的URL,可是不包括請求的參數字符串 |
String getRemoteAddr() | 取得用戶的IP 地址 |
String getRemoteHost() | 取得用戶的主機名稱 |
int getRemotePort() | 取得用戶的主機端口 |
String getRemoteUser() | 取得用戶的名稱 |
void getCharacterEncoding(String encoding) | 設定編碼格式,用來解決窗體傳遞中文的問題 |
方法 | 功能 |
---|---|
long getCreationTime() | 取得session產生的時間,單位是毫秒 |
String getId() | 取得session 的ID |
long getLastAccessedTime() | 取得用戶最後經過這個session送出請求的時間 |
long getMaxInactiveInterval() | 取得最大session不活動的時間,若超過這時間,session 將會失效 |
void invalidate() | 取消session 對象,並將對象存放的內容徹底拋棄 |
boolean isNew() | 判斷session 是否爲"新"的會話 |
void setMaxInactiveInterval(int interval) | 設定最大session不活動的時間,若超過這時間,session 將會失效 |
方法 | 功能 |
---|---|
int getMajorVersion() | 取得Container主要的Servlet API版本 |
int getMinorVersion() | 取得Container次要的Servlet API 版本 |
String getServerInfo() | 取得Container的名稱和版本 |
String getMimeType(String file) | 取得指定文件的MIME 類型 |
ServletContext getContext(String uripath) | 取得指定Local URL的Application context |
String getRealPath(String path) | 取得本地端path的絕對路徑 |
void log(String message) | 將信息寫入log文件中 |
void log(String message, Throwable throwable) | 將stack trace 所產生的異常信息寫入log文件中 |
page 對象
response 對象
方法 | 功能 |
---|---|
void addCookie(Cookie cookie) | 新增cookie |
void addDateHeader(String name, long date) | 新增long類型的值到name標頭 |
void addHeader(String name, String value) | 新增String類型的值到name標頭 |
void addIntHeader(String name, int value) | 新增int類型的值到name標頭 |
void setDateHeader(String name, long date) | 指定long類型的值到name標頭 |
void setHeader(String name, String value) | 指定String類型的值到name標頭 |
void setIntHeader(String name, int value) | 指定int類型的值到name標頭 |
方法 | 功能 |
---|---|
void sendError(int sc) | 傳送狀態碼(status code) |
void sendError(int sc, String msg) | 傳送狀態碼和錯誤信息 |
void setStatus(int sc) | 設定狀態碼 |
out 對象
方法 | 功能 |
---|---|
void clear( ) | 清除輸出緩衝區的內容 |
void clearBuffer( ) | 清除輸出緩衝區的內容 |
void close( ) | 關閉輸出流,清除全部的內容 |
int getBufferSize( ) | 取得目前緩衝區的大小(KB) |
int getRemaining( ) | 取得目前使用後還剩下的緩衝區大小(KB) |
boolean isAutoFlush( ) | 回傳true表示緩衝區滿時會自動清除;false表示不會自動清除而且產生異常處理 |
exception對象
config 對象
ServletContext
HttpServletRequest
HttpServletResponse
HttpSession
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
tomcat
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8444"/>
servlet
數據庫
表達式 | 值 |
---|---|
${-168.18} | -168.18 |
${3.8e-18} | 3.8e-18 //科學計數法 |
${3.14159265} | 3.14159265 |
${"Hello JSP EL!"} | Hello JSP EL! 等價於 <%="Hello JSP EL!"%> ${'Hello JSP EL...'} |
${true} //can be TRUE? | true |
${false} //can be FALSE? | false |
${str==null} | true //布爾值的表達式 |
類別 | 運算符 |
---|---|
算術運算符 | +, -, *, /(或 div), %(或 mod) |
關係運算符 | ==(或 eq), !=(或 ne), <(或 lt), >(或 gt), <=(或 le), >=(或 ge) |
邏輯運算符 | &&(或 and), ||(或 or), !(或 not) |
驗證運算符 | empty |
其中,empty 判斷一個變量是否爲null或是否包含有效數據
例子:
表達式 | 值 |
---|---|
${3+5.1} | 8.1 |
${"Hello"+",Tarena!"} | 報錯! // EL的"+"沒有字符串鏈接功能 |
${5*2} | 10 |
${9.3/3} | 3.1 |
${9.3 div 3} | 3.1 |
${8 div 0} | Infinity // 表示無窮大 |
${9%2} | 1 |
${9 mod 2} | 1 |
${8*6>68?"Yes":"No"} | No //三目表達式 |
${empty name} | true //對範圍對象內的變量或對象進行判空 |
<% String name=""; request.setAttribute("name",name); //若是沒有 setAttribute ,則一定是空%>
變量和JavaBean屬性數據輸出
對象屬性. 數組. 集合數據輸出
.
和[]
,
.
用於單個對象或屬性[]
用於數組集合取值。${user["name"]} ${user['name']} //拿屬性時,單引跟雙引等價 ${user.name} //這種方法一樣能夠
${aList[0]} //使用下標來取值 ${aList[1]} //取得對象的引用地址 還能夠嵌套:${aList[1]['name']} ${aList[3]} //下標越界,不會報錯;只是取不出值
${map.date} ${map["date"]} //這兩個等效 ${map.aList[0]} ${map["aList"][0]}//這兩個也等效 ${map.aList[1][name]} //嵌套取值
el提供了本身的一套隱含對象,方便在頁面內對各類經常使用數據信息的訪問.
EL隱藏對象 | JSP隱藏對象 |
---|---|
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | appication |
param | request.getParameter(), ${param.username} |
paramValues | request.getParameterValues, ${paramValues.like[0]} |
header | request.getHeader() 按照key-value的形式取出;value:是一個String類型的值:${header["host"]} , ${header["accept"]}, ${header["user-agent"]} |
headerValues | 按照key-value的方式取出,可是headerValues裏面的value是一個String類型的數組 |
cookie | request.getCookies() |
initParam | context param |
web.xml <context-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </context-param> ${initParam.server}
如何使用JSTL
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> //核心標籤庫
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> //數據庫標籤庫
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> //prefix 表前綴(可改,但一般按這寫的用); uri 指向標籤庫的入口
core:核心標籤庫
<c:set>
<c:set value="value" var="varName" [scope= "{page|request|session|application}"]/ > <c:set value="value" target="target" property="propertyName"/ >這個標籤用於在某個範圍(page,request,session,application)裏面設置特定的值, (默認爲page),或者設置某個已經存在的javabean的屬性。
<c:set var="counter" value="200"/> ${counter}//輸出 <c:set var="tarena">Tarena It Traning Ltd.</c:set> ${tarena} 能夠指定範圍,默認是page <c:set value="20" var="maxIdelTime" scope="session"/> ${maxIdelTime} 設置JavaBean的值 <jsp:useBean id="girl" class="vo.SuperGirl"/> <c:set value="Shirly" target="${girl}" property="name"/> <td>girl.name</td> <td>${girl.name}</td>
<c:catch>
它的做用是捕捉由嵌套在它裏面的標籤所拋出來的異常。相似於<%try{}catch{}%>
語法:
<c:catch [var="varName"]>nested actions</c:catch>
例子
<c:catch var="error"> <% Integer.parseInt("abc"); %> </c:catch> <% try{ Integer.parseInt("abc"); }catch(Exception error){ } %> //等價 <c:out value="${error}"/> <c:out value="${error.message}"/> <c:out value="${error.cause}"/>
<c:if>
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]> Body內容 </c:if>注:沒有 else
<c:set var="age" value="16"/> <c:if test="${age<18}"> <h1 align=center>您還沒有成年,不能進入遊戲中心!</h1> </c:if>
<c:choose>
<c:set var="tax" value="5000" /> <c:choose> <c:when test="${tax <=0}"> 您今年沒有納稅! </c:when> <c:when test="${tax<=1000&&tax>0}"> 您今年繳納的稅款爲${tax},加油! </c:when> <c:when test="${tax<=3000&&tax>1000}"> 您今年繳納的稅款爲${tax},再接再勵哦! </c:when> <c:otherwise> 您今年納稅超過了3000元,多謝您爲國家的繁榮富強做出了貢獻! </c:otherwise> </c:choose>
<c:forEach>
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> Body 內容 </c:forEach>
<% List aList=new ArrayList(); aList.add("You"); aList.add("are"); aList.add("a"); aList.add("beautiful"); aList.add("girl"); request.setAttribute("aList",aList); %> <center> <table border=1> <c:forEach var="word" items="${aList}"> <tr> <td> ${word} </td> </tr> </c:forEach> </table> </center> <c:forEach items='${header}' var='h'> <tr> <td> <li>Header name:<c:out value="${h.key}"/> </li> </td> <td> <li>Header value:<c:out value="${h.value}"/> </li> </td> </tr> </c:forEach> //另一種用法: (相似 for 循環) <c:forEach var="count" begin="10" end="100" step="10"> <tr> <td> <c:out value="${count}"/><br> </td> </tr> </c:forEach>
Servlet過濾器是Servlet的一種特殊用法,主要用來完成一些通用的操做。好比編碼的過濾,判斷用戶的登錄狀態等等。
Servlet過濾器的適用場合:
filter 實際上是一個「servlet chaining」(servlet 鏈)。 一個 filter 包括:
Servlet過濾器接口的構成:
Servlet過濾器的建立步驟:
<filter> <filter-name>myfilter</filtername> <filter-class>com.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myfilter</filter-name> <url-parten>*.do</url-parten> </filter-mapping>
Filter 有4種類型,主要體如今
<dispatcher>REQUEST</dispatcher>
默認,客戶端的直接的請求,才觸發該過濾器<dispatcher>FORWARD</dispatcher>
servlet 調用forward(req,resp)時觸發<dispatcher>INCLUDE</dispatcher>
servlet 調用 include(req,resp)時觸發<dispatcher>ERROR</dispatcher>
發生錯誤,跳轉到錯誤頁面時觸發它能夠監聽客戶端的請求. 服務端的操做等。經過監聽器,能夠自動激發一些操做。
如:監聽在線的用戶數量。當增長一個session時,就激發sessionCreated(HttpSessionEvent se),給在線人數加1
監聽器的種類 : 一共分三大類型,有 8 種 listener:
監聽器建立步驟:
XMLHttpRequest對象實現Ajax,
屬性:
方法:
使用Ajax的步驟:
經過jquery方式實現: