1. 程式人生 > >初入Java後端之jsp

初入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》