初入Java後端之jsp
-
JSP是啥?
JSP其實是一種綜合HTML、XHTML、XML的程式碼,能夠動態地建立網頁,與Java servlet密不可分。JSP頁面實質也是一個HTML頁面,只不過它包含了用於產生動態網頁內容的Java程式碼。
-
JSP結構
結構和下面的處理很相關(自己畫的可能比較醜,能看懂就行)
-
JSP處理
JSP向web server發出請求,web伺服器的元件呼叫Servlet,執行servlet類(Java的一種類),然後servlet將處理結果嵌入HTTP response並生成HTML,返回給伺服器。
-
JSP生命週期
從其被建立到最終被銷燬的時間就可以簡單的理解成生命週期
程式碼例項:
public void jspInit(){
// 初始化程式碼
}
public void jspDestroy()
{
// 清理程式碼
}
生命週期內則是一些伺服器處理程式碼
-
JSP語法注意(僅個人,不代表全部)
宣告:<%! int i = 0; %>
表示式:<%= 表示式 %> 例:<%= (new java.util.Date()).toLocaleString()%>
指令標籤的使用:
格式:<%@ directive attribute="value" %>
例:<%@ include file="檔案相對 url 地址" %>
<jsp:directive.include file="檔案相對 url 地址" />
行為標籤
行為標籤主要有這10種,使用很簡單,檢視用法即可
例如:例項化物件並設定屬性
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName" property="someProperty" .../>
-
JSP隱藏(內建)物件
request物件
常用方法 | 方法介紹 |
---|---|
String getParameter(String name) | 返回name指定引數的引數值 |
String[] getParameterValues(String name) | 返回包含引數name的所有值的陣列 |
void setAttribute(String,Object) | 儲存此請求中的屬性 |
Object getAttribute(String name) | 返回指定屬性的屬性值 |
String getContentType() | 得到請求體的MIME型別 |
String getProtocol() | 返回請求用的協議型別及版本號 |
String getServerName() | 返回接受請求的伺服器主機名 |
int getServerPort() | 返回伺服器接受此請求所用的埠號 |
String getCharacterEncoding() | 返回字元編碼方式 |
void setCharacterEncoding() | 設定請求的字元編碼方式 |
int getContentLength() | 返回請求體的長度(以位元組數) |
String getRemoteAddr() | 返回傳送此請求的客戶端IP地址 |
String getRealPath(String path) | 返回一虛擬路徑的真實路徑 |
String request.getContextPath() | 返回上下文路徑 |
request的一個重要用途就是獲取客戶端的基本資訊。下面用程式來測試作用:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="gb2312" %> <html> <head> <title>requestTest</title> </head> <body> 提交方法:<%= request.getMethod()%><br> 請求的URL地址:<%=request.getRequestURI()%><br> 協議名稱:<%=request.getProtocol()%><br> 客戶端請求伺服器檔案的路徑:<%=request.getServletPath()%><br> URL的查詢部分:<%=request.getQueryString()%><br> 伺服器的名稱:<%=request.getServerName()%><br> 伺服器的埠號:<%=request.getServerPort()%><br> 遠端客戶端的IP地址:<%=request.getRemoteAddr()%> </body> </html>
response物件
response與request是一對相對應的內建物件,response可以理解為客戶端的響應
response物件的功能分為以下四種:
(1)設定響應頭資訊
(2)傳送狀態碼
(3)設定響應正文
(4)重定向
設定響應頭資訊
使用該方法設定的響應頭最終會發送給客戶端瀏覽器!
(1)response.setHeader(“content-type”, “text/html;charset=utf-8”):設定content-type響應頭,該頭的作用是告訴瀏覽器響應內容為html型別,編碼為utf-8。而且同時會設定response的字元流編碼為utf-8,即response.setCharaceterEncoding(“utf-8”);
(2)response.setHeader("Refresh","5; URL=http://www.baidu.com"):5秒後自動跳轉到百度主頁。
設定狀態碼及其他方法
(1)response.setContentType("text/html;charset=utf-8"):等同與呼叫response.setHeader(“content-type”, “text/html;charset=utf-8”);
(2)response.setCharacterEncoding(“utf-8”):設定字元響應流的字元編碼為utf-8;
(3)response.setStatus(200):設定狀態碼;
(4)response.sendError(404, “您要查詢的資源不存在”):當傳送錯誤狀態碼時,Tomcat會跳轉到固定的錯誤頁面去,但可以顯示錯誤資訊。
重定向
response.setHeader("Location", "http://www.baidu.com");
和response.sendRedirect("http://www.baidu.com")兩種方法
session物件
session的生命週期:當用戶訪問某個頁面到關閉瀏覽器,這段使時間。
session和cookie:session和cookie物件是一一對應關係。JSP引擎會將建立好的session物件存放在對應的cookie中。
主要方法:
1. getAttribute( String name )
獲取指定名字name相聯絡的資訊.
2. getAttributeNames()
返回Session物件中儲存的每一個屬性物件,其結果為一個類舉的例項.
3. getCreationTime()
返回Session被建立的時間.最小單位為千分之一秒.
4. getId()
此方法返回惟一的標識,這些標識為每個Session而產生.當只有一個單一的值與一個Session聯合時,或當日志資訊與先前的Session有關時,它被當做鍵名用.
5. GetLastAccessedTime()
返回當前Session物件最後被客戶傳送的時間,最單位為千分之一秒.
6. GetMaxInactiveInterval()
返回總時間(秒),負值表示Session永遠不會超時.該時間為該Session物件的生存時間.
7. removeAttribute( String name )
刪除與提定名字name的相聯絡的資訊.
8. setAttribute( String name , java.lang.Object value )
設定指定名字name的屬性值value,並將之儲存在Session物件中.
session一般應用在判斷使用者是否登入
例項:
<%@page contentType="text/html;charset=GB2312"%>
<html>
<head> </head>
<body>
<%String s = session.getId(); //獲取session ID號 %>
<p>你的session物件ID是:</p>
<%=s %> <%!
int Num = 0; //定義前面要加!號
synchronized void countPeople() { //同步方法
Num++;
}
%>
<%
if (session.isNew()) { //判斷是否為新使用者
countPeople();
String str = String.valueOf(Num);
session.setAttribute("count", str); //將str 新增到session物件中
}
%>
<p>
你是第<%=(String)session.getAttribute("count")%>個訪問本站的人
</p>
<!--將session物件的count值取出-->
</body>
</html>
application物件
application常用的方法
-
public void setAttribute(String name,Object value)使用指定名稱講物件繫結到此會話。
- public Object gerAttribute(String name)返回與此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則放回null
- Enumeration getAttributeNames()返回所有可用屬性名的列舉
- Strring getServerInfo()返回jsp(Servlet)引擎及版本號
其他四個物件
- out(JspWriter):等同與response.getWriter(),用來向客戶端傳送文字資料;
- config(ServletConfig):對應“真身”中的ServletConfig;
- page(當前JSP的真身型別):當前JSP頁面的“this”,即當前物件,引用為Object型別;
- pageContext(PageContext):頁面上下文物件,它是最後一個沒講的域物件;
- exception(Throwable):只有在錯誤頁面中可以使用這個物件;
個人JSP學得較淺,各類書籍對jsp的介紹也不同,可參考書籍《JSP從零開始學(劉鑫)》《head first servlet & jsp》