1. 程式人生 > >Java Web基礎學習(一)

Java Web基礎學習(一)

Java的Web開發學習

Web應用程式

Web應用程式是一種可用通過Web訪問的應用程式。Web應用程式的一個最大好處是使用者很容易訪問應用程式。使用者只需要有瀏覽器即可,不需要再安裝其他軟體。

軟體開發三大方向:

²  桌面應用程式(C/S)

²  Web應用程式(B/S)

²  嵌入式應用程式(安卓,iphone)

靜態網頁與動態網頁

靜態網頁:網頁中的內容是固定,不會更新,HTML,CSS

動態網頁:網頁中的內容通過程式動態顯示的,自動更新,學習製作動態網頁所需技術:HTML,CSS,資料庫技術。至少一門高階語言(Java,C#,Php),JavaScript,XML等,主流的動態網頁尾本技術(JSP、ASP.net、Php)

Tomcat

Tomcat伺服器目錄結構

目錄

說明

/bin

存放各種平臺下用於啟動和停止Tomcat的命令檔案

/conf

存放Tomcat伺服器的各種配置檔案

/lib

存放Tomcat伺服器所需的各種JAR檔案

/logs

存放Tomcat的日誌檔案

/temp

Tomcat執行時用於存放臨時檔案

/webapps

當釋出Web應用時,預設會將Web應用的檔案釋出到此目錄中

/work

Tomcat由JSP生成的Servlet放於此目錄下

JSP

JSP(Java Server Pages):其根本是一個簡化的Servlet設計,它實現了在java當中使用HTML標籤。Jsp是一種動態網頁技術標準也是JavaEE標準。JSP和Servlet一樣,是在伺服器端執行的。

常見動態網站開發技術對比

²  Jsp:java平臺,安全性高,適合開發大型的,企業級的Web應用程式。

²  Asp.net:.net平臺,簡單易學。但是安全性以及跨平臺性差

²  Php:簡單,高效,成本低開發週期短,特別適合中小性的Web應用開發(LAMP:Linux+Apache+MySQL+PHP)

JSP元素

JSP頁面組成:註釋,宣告,小指令碼,表示式,指令,靜態內容

JSP指令:

Page指令:通常位於jsp頁面的頂端,同一個頁面可以有多個page指令

Page指令語法:

<%@ page 屬性1=“屬性值” 屬性2=“屬性值1,屬性值2”…屬性n=“屬性值n”%>

屬性包括:

²  Language:指定JSP頁面使用的指令碼語言java

²  Import:通過該屬性來引用指令碼語言中使用到的類檔案

²  ContentType:用來指定JSP頁面所採用的編碼方式text/html,utf-8

Include指令:將一個外部檔案嵌入到當前JSP檔案中,同時解析這個頁面中的JSP語句

Taglib指令:使用標籤庫定義新的自定義標籤,在JSP頁面中啟動定製行為。

JSP註釋

在JSP頁面的註釋包括以下:

²  HTML的註釋:

<!—html註釋-->   // 客戶端可見

²  JSP的註釋

<%-- JSP註釋-->   // 客戶端不可見

²  JSP指令碼註釋:

<%  (//或/**/)   %> // 單行註釋   /**/ 多行註釋

JSP指令碼

在JSP頁面中執行的Java程式碼。語法如下:<% Java程式碼 %>

JSP宣告

在JSP頁面中定義變數或者方法。語法如下:<%! Java程式碼%>

JSP表示式

在JSP頁面中執行的表示式。語法如下:<%=表示式%> // 注意:表示式是不以分號結束的

Java頁面生命週期

JspService()方法被呼叫來處理客戶端的請求。對每一個請求,JSP引擎建立一個新的執行緒來處理該請求。如果有多個客戶端同時請求該JSP檔案,則JSP引擎會建立多個執行緒。每個客戶端請求對應一個執行緒。以多執行緒方式執行可以大大降低對系統的資源需求,提高系統的併發量及響應時間。但也要注意多執行緒程式設計帶來的同步問題,由於該Servlet始終駐於記憶體,所以響應非常快。

JSP內建物件

內建物件簡介

JSP內建物件是Web容器建立的一組物件,不使用new關鍵字就可以使用內建物件。

常用的JSP內建物件

²  Out,request,response,session,application(常用)

²  Page,pageContext,exception,config(不常用)

Web程式的請求響應模式:

²  使用者傳送請求(request)

²  伺服器給使用者響應(response)

Out物件

緩衝區:Buffer。緩衝區就是記憶體的一塊區域,用來儲存臨時資料。Out物件是JspWriter類的例項,是向客戶端輸出內容常用的物件。

常用方法如下:

Void println() 向客戶端列印字串

Void clear() 清除緩衝區的內容,如果在flush之後呼叫會丟擲異常

Void clearBuffer() 清除緩衝區的內容,如果在flush之後呼叫不會丟擲異常

Void flush() 將緩衝區內容輸出到客戶端

Int getBufferSize() 返回緩衝區以位元組數的大小,如不設緩衝區則為0

Int getRemaining() 放回緩衝區還剩餘多少可用

Boolean isAutoFlush() 返回緩衝區滿時,是自動清空還是丟擲異常

Void close() 關閉輸出流

Get與post提交方式

<from name=”regForm” action=”動作” method=”提交方式”></form>

表單有兩種提交方式:get與post

²  Get:以明文的方式通過URL提交資料,資料在URL中可以看到。提交的資料最多不超過2Kb。安全性較低但效率比post方式高。適合提交資料量不大,安全性不高的資料。如:搜尋、查詢等功能。

²  Post:將使用者提交的資訊封裝在HTMLHEADER內。適合提交資料量大,安全性高的使用者資訊。如註冊、修改、上傳等功能。

Request物件

Request物件客戶端的請求資訊被封裝在request物件中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的例項。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 getConentLength() 返回請求體的長度(以位元組數)

String getRemoteAddr() 返回傳送此請求的客戶端IP地址

String getRealPath(String path) 返回一虛擬路徑的真實路徑

String request.getContextPath() 返回上下文路徑

Response物件

Response物件:包含了響應客戶請求的有關資訊,但在JSP中很少直接用它。它是HttpServletResponse類的例項。Response物件具有頁面作用域,或訪問一個頁面時,該頁面內的Response物件只能對這次訪問有效,其他頁面的Response物件對當前頁面無效。

常用的方法如下:

String getCharacterEncoding() 返回響應用的是何種字元編碼

Void setContentType(String type) 設定響應的MIME型別

PrintWriter getWriter() 返回可以向客戶端輸出字元的一個物件(注意比較:PrintWriter與內建out物件的區別,輸出提前於內建物件)

sendRedirect(java.lang.String location) 重新定向客戶端的請求

請求轉發與請求重定向

²  請求重定向:客戶端行為,Response.sendRedirect(),從本質上講等同於兩次請求,前一次的請求物件不會儲存,位址列的URL地址會改變。

²  請求轉發:伺服器行為,request.getRequestDispatcher().forward(req,resp);是一次請求,轉發後請求物件會儲存,位址列的URL地址不會改變。

Session物件

Session表示客戶端與伺服器的一次會話。Web中的session指的是使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過這段時間,也就是使用者瀏覽這個網站所花費的時間。從上述定義中可以看到,session實際上是一個特定的時間概念。Session在伺服器的記憶體中儲存著不同使用者的session。

Session物件特點

²  Session物件是一個JSP內建物件

²  Session物件在第一個JSP頁面被裝載時自動建立,完成會話期管理

²  從一個客戶開啟瀏覽器並連線到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話

²  當一個客戶訪問一個伺服器時,可能會在伺服器的幾個頁面之間切換,伺服器應當通過某種辦法知道這是一個客戶,就需要session物件

²  Session物件是HttpSession類的例項。

Session物件常用的方法如下:

²  Long getCreationTime() 返回Session建立事件

²  Public String getId() 返回session建立時JSP引擎為它設的唯一ID號

²  Public Object setAttribute(String name, Object value) 使用指定名稱物件繫結到此會話

²  Public Object getAttribute(String name) 返回此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則返回null

²  String[] getValueNames() 返回一個包含此Session中所有可用屬性的陣列

²  Int getMaxInactiveInterval() 返回兩次請求間隔多長時間此Session被取消(單位秒)

Session的生命週期

建立:當客戶端第一次訪問某個jsp或者Servlet時候,伺服器會為當前會話建立一個SessionId,每次客戶端向伺服器發動請求時,都會將此SessionId攜帶過去,服務端會對此SessionId進行校驗。

活動:某次會話當中通過超連結開啟的新頁面屬於同一次會話;只要當前會話頁面沒有全部關閉,重新開啟新的瀏覽器視窗訪問同一專案資源時屬於同一此會話;除非本次會話的所有頁面都關閉後再重新訪問某個Jsp或者Servlet將會建立新的會話(注意:原有會話還存在,只是這個舊的SessionId仍然存在於服務端,只不過再也沒有客戶端會攜帶它然後交予服務端校驗)。

銷燬:Session銷燬只有三種方式:1)呼叫了session.invalidate()方法;2)Session過期(超時);3)伺服器重新啟動。

Session超時:Tomcat預設Session超時時間為30分鐘。設定Session超時有兩種方法,一種是呼叫setMaxInactiveInterval(時間),單位是秒,一種是修改web.xml檔案:新增如下內容:

<session-config><session-timeout>10(分鐘)</session-timeout></session-config>

Application物件

²  Application物件實現了使用者間資料的共享,可存放全域性變數

²  Application開始與伺服器的啟動,終止於伺服器的關閉

²  在使用者的前後連線或不同使用者之間的連線中,可以對application物件的同一屬性進行操作

²  在任何地方對application物件屬性的操作,都將影響到其他使用者對此的訪問

²  伺服器的啟動和關閉決定了application物件的生命

²  Application物件是ServletContext類的例項

常用方法

²  Public void setAttribute(Stirng name, Object value)使用指定名稱將物件繫結到此會話

²  Public Object getAttribute(String name)返回與此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則返回null

²  Enumeration getAttribute()返回所有可用屬性名的列舉

²  String getServletInfo()返回JSP(SERVLET)引擎名及版本號

²   

Page物件

Page物件就是指當前JSP頁面本身,有點像類中的this指標,它是java.lang.Object類的例項。

常用方法如下:

²  Class getClass() 返回此Object的類

²  Int hashCode() 返回此Object的hash碼

²  Boolean equals(Object obj) 判斷此object是否與指定的Object物件相等

²  Void copy(Object obj) 返回Object拷貝到指定的Object物件中

²  Object clone() 克隆此Object物件

²  String toString() 把此Object物件轉換成String類的物件

²  Void notify() 喚醒一個等待的執行緒

²  Void notifyall() 喚醒所有等待的執行緒

²  Void wait(int timeout) 使一個執行緒處於等待直到timeout結束或被喚醒

²  Void wait() 使一個執行緒處於等待直到被喚醒

PageContext物件

²  pageContext物件提供了對JSP頁面內所有物件及名字空間的訪問

²  pageContext物件可以訪問到本頁所在的session,也可以取本頁面所在的application的某一屬性值

²  pageContext物件相當於頁面彙總所有功能的集大成者

²  pageContext物件的本地類名也叫pageContext

常用方法

²  JspWriter getOut() 返回當前客戶端響應被使用的JspWriter流(out)

²  HttpSession getSession() 返回當前頁中的HttpSession物件(session)

²  Object getPage() 返回當前頁的Object物件(page)

²  ServletRequest getRequest() 返回當前頁的ServletRequest物件(request)

²  ServletResponse getResponse() 返回當前頁的ServletResponse物件(response)

²  Void setAttribute(String name, Object attribute) 設定屬性及屬性值

²  Object getAttribute(String name, int scope) 在指定範圍內取屬性的值

²  Int getAttributeScope(String name) 返回某屬性的作用範圍

²  Void forward(String relativeUrlPath) 使當前頁面重導到另一頁面

²  Void include(String relativeUrlPath) 在當前位置包含另一檔案

Config物件

Config物件在一個Servlet初始化時,JSP引擎向它傳遞資訊用的,此資訊包括Servlet初始化時所要用的引數(通過屬性名和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext物件)。

常用方法如下:

²  ServletContext getServletContext() 返回含有伺服器相關資訊的ServletContext物件

²  String getInitParameter(String name) 返回初始化引數的值

²  Enumeration getInitParameterNames() 返回Servlet初始化所需所有引數的列舉

Exception物件

Exception物件是一個異常物件,當一個頁面在執行過程中發生了異常,就產生這個物件。如果一個JSP頁面要應用此物件,就必須把isErrorPage設為true,否則無法編譯。它實際上是java.lang.Throwable的物件。

常用方法如下:

²  String getMessage() 返回描述異常的訊息

²  String toString() 返回關於異常的簡短描述訊息

²  Void printStackTrace() 顯示異常及其棧軌跡

²  Throwable FillInStackTrace() 重寫異常的執行棧軌跡