javascript
JSP简明教程
JSP運行原理:當Web服務器上的一個JSP頁面第一次被請求執行時,JSP引擎先將JSP頁面文件轉譯成一個Java文件,即Servlet,servlet通過HTML與客戶交互。服務器將前面轉譯成的Java文件編譯成字節碼文件,再執行這個字節碼文件來響應,從而加快了執行的速度見圖
2.?JavaScript的作用JavaScript作用:使得網頁交互性更強,更生動靈活,以下是嵌入到HTML頁面的一段JavaScript代碼形式
<SCRIPT LANGUAGE="JavaScript">
JavaScript代碼?….
</SCRIPT>
3. JavaScript中對象和對象關系JavaScript中預先定義了一些對象,以方便程序員使用,圖3-2是對象之間的層次和關系圖
4、JSP指令:JSP代碼指的就是我們自己嵌入在JSP頁面中的Java代碼,這又分為兩種:第一種是JSP頁面中一些變量和方法的聲明,在聲明時,使用“<!%”和“%>”標記。另外一種,就是常用到的用“<%”和“%>”包含的JSP代碼塊
1. page指令
page指令是針對當前頁面的指令。page指令由“<%@”和“%>”字符串構成的標記符來指定。在標記符中是代碼體,包括指令的類型和值。 例如:<%@page import=“java.sql.*”%>指令告訴JSP容器將java.sql包中的所有類都引入當前的JSP頁面。
常用的page指令標記有8個:language、extends、import、errorPage、isErrorPage、contentType、isThreadSafe和session。
language設置JSP頁面中用到的語言,默認值為“Java”,也是目前唯一有效的設定值。使用的語法是:
<%@ page language="java"%>。
import設置目前JSP頁面中要用到的Java類,這些Java類可能是Sun JDK中的類,也有可能是程序員自己定義的類。例如:<%@page import="java.sql.*,java.util.*"%>。有些類在默認情況下已經被加入到當前JSP頁面,而不需要特殊聲明,包括四個類:java.lang.*;java.servlet.*;java.servlet.jsp.*和java.servlet.http.* 。
extends設定目前JSP頁面要繼承的父類。一般情況下不需要進行設置。在默認情況下,JSP頁面的默認父類是HttpJspBase。例如:當前JSP頁面要繼承mypackage包下的myclass類,相應的聲明語句為:“<%@ page xtends="mypackage.myclass"%>”。
errorPage用來設定當JSP頁面出現異常(Exception)時,所要轉向的頁面。如果沒有設定,則JSP容器會用默認的當前網頁來顯示出錯信息。例如: “<%@page errorPage="/error/error_page.jsp"%>”
isErrorPage用來設定當前的JSP頁面是否作為傳回錯誤頁面的網頁,默認值是“false”。如果設定為“true”,則JSP容器會在當前的頁面中生成一個exception對象。
contentType這個屬性用來設定傳回網頁的文件格式和編碼方式,一般使用 “text/html;charset=GBK”。
isThreadSafe 定義JSP容器執行JSP程序的方式,默認值為“true”,代表JSP容器會以多線程方式運行JSP頁面。當設定值為“false”時,JSP容器會以單線程方式運行JSP頁面。
session定義當前JSP頁面中是否要用到session,默認值為“true”。
2. include指令
include指令用來指定怎樣把另一個文件包含到當前的JSP頁面中,這個文件可以是普通的文本文件,也可以是一個JSP頁面。例如:“<%@ include file = ”logo.htm“%>”。 采用include指令,可以實現JSP頁面的模塊化,使JSP的開發和維護變得非常簡單。
4.8 JSP指令動作指令
JSP編譯指令是讓JSP容器自動采取的動作,但對于Web開發人員,有些時候想要自己控制JSP頁面的運行,這時可以采用JSP中的操作指令。
JSP 標準動作
<jsp: useBean> 標記
<jsp: getProperty> 標記
<jsp: setProperty> 標記
<jsp: forward> 標記
<jsp: include> 標記
JSP 動作的作用
- 實例化對象
- 與服務器端資源進行通信
- 提高組件的可重用性,增強應用的可維護性
- 使 JSP 頁面可與 JavaBean 對象進行交互
- 通過標記庫定義自定義標記
JSP 動作的語法
- JSP 動作標記遵循 XML 語言的語法
- 具有一個名稱
- 具有前綴 jsp
- 用一對尖括號(< 和 >)括起來
- 在尖括號內定義標記:
jsp:include指令
jsp:include標準動作用于在當前的JSP頁面中加入靜態和動態的資源。
語法格式為:
<jsp:include page=“test.htm”/>
jsp:include指令必須以“/”結束,功能和include指令大致相同。
區別:
- include(操作指令):編譯時包括,形成一個整體
- include(動作):運行時包括
jsp:forward動作指令
jsp:forward動作指令用于把當前的JSP頁面轉發到另一個頁面上。 基本語法為:
<jsp:forward page=”test2.jsp“/>
使用該功能時,瀏覽器的地址欄中地址不會發生任何變化。
jsp:param指令
使用jsp:param操作指令可以在執行jsp動作指令forward操作動作時,追加參數.以動作指令字/值的方式進行傳遞。
jsp:param操作指令以標記“<jsp:param>”開始,以“/>”結束比如:<jsp:param name=“oper” value=“add”/>。
可以將jsp:forward操作指令和jsp:param操作指令結合到一起來使用。
實例:forwardExample1.jsp, paramExample1.jsp
jsp:plugin指令
使用“<jsp:plugin>”插入一個applet或Bean,必要的話還要下載一個Java插件用于執行它。 JSP 語法格式如下:
<jsp:plugin?
type="bean | applet"?
code="classFileName"?
codebase="classFileDirectoryName"?
[ <jsp:params>?
[ <jsp:param name="parameterName"?
value="{parameterValue | <%= expression %>}" /> ]+?
?</jsp:params> ]?
?[ <jsp:fallback> text message for user </jsp:fallback> ]?
</jsp:plugin>
JSP Bean標記
與JavaBean交互的三個標記
<jsp:useBean>
<jsp:getProperty>
<jsp:setProperty>
<jsp:useBean>
創建一個Bean實例并指定它的名字和作用范圍。語法格式如下:
<jsp:useBean id="bean name" scope="page | request | session | application" class="class name" />
或者
<jsp:useBean id="bean name" scope="page | request | session | application" class="class name ">
初始化代碼
</jsp:useBean>
設置Bean的屬性值. JSP 語法格式如下:
<jsp:setProperty name="beanInstanceName"?
{?
property= "*" ? |?
property="propertyName" [ param="parameterName" ] ? |?
property="propertyName" value="{string | <%= expression %>}"?
}?
/>
- name="beanInstanceName" 表示已經在“<jsp:useBean>”中創建的Bean實例的名字。
- property="*" 儲存用戶在jsp輸入的所有值,用于匹配Bean中的屬性。
- property="propertyName" [ param="parameterName" ]
- 用一個參數值來指定Bean中的一個屬性值,一般情況下是從request對象中獲得的。其中property指定Bean的屬性名,param指定request中的參數名。
- property="propertyName" value="{string | <%= expression %>}" 使用指定的值來設定Bean屬性。這個值可以是字符串,也可以是表達式。如果這個字符串,那么它就會被轉換成Bean屬性的類型(轉換方法見表4.1)。如果是一個表達式,那么它的類型就必須和將要設定的屬性值的類型一致。
- 如果參數值為空值,那么對應的屬性值也不會被設定。此外,不能在同一個“<jsp:setProperty>”中同時使用param和value參數 。
4.9 JSP中的中文字符處理
當利用request.getParameter得到Form種元素的時候,默認的情況字符編碼為ISO-8859-1,這種編碼不能正確的顯示漢字。
目前有兩種解決方法:
一種是在執行操作之前,設置request的編碼格式,語法是:
request.setCharacterEncoding(“GBK”);
另一種方法是轉換字符編碼 :
<%String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
%>
?
4.10 小結
JSP語法是學習好JSP開發的基礎,JSP網頁包括HTML標簽和Java程序片。
JSP指令有page指令和include指令兩種,page指令用來定義JSP頁面的全局屬性;include指令用來靜態插入一個文件。
JSP動作指令又分多,是在運行時執行的一些動作和行為。
中文處理也是需要注意的一個問題。
5.1 內置對象概述 ??JSP頁面其中存在三個最主要的內置對象:
request:得到客戶端的信息。(HttpServletRequest)
session:保存單個用戶訪問時的一些信息。(HttpSession)
response:處理服務器端對客戶端的一些響應。(HttpServletResonpse)
request對象與response對象存在于http通信中,見圖5-1
圖5-1 request對象與response對象存在于http通信中
還有其它內置對象它們為:
Config:是JSP配置處理程序句柄,在JSP頁面范圍內有效。
application:用來保存網站的一些全局變量。
out:功能是把信息回送到客戶端的瀏覽器中。
pageContext:提供了訪問和放置頁面中共享數據的方式。
5.2 request對象 ??request對象是javax.servlet.HttpServletRequest 子類的對象,當客戶端請求一個JSP頁面時,JSP 容器會將客戶端的請求信息包裝在這個request對象中
請求信息的內容包括請求的頭信息(Header)、 系統信息(比如:編碼方式)、請求的方式
(比如:GET或POST)、請求的參數名稱和 參數值等信息
request對象的方法
getAttribute(String str)?
getCookies()?
getHeader(String str)?
getParameter(String str)
getParameterValues(String str)?
實例: requestApp1.jsp
request對象獲得表單數據
get與post區別
實例:userRegist1.jsp
?
5.3 response對象 ??response對象
response對象提供跟多方法和JSP進行交互,主要用到有:
addCookie(Cookie cookname)
sendError(int errorcode)
sendRedirect(String url)
實例:sendRedirectExample1.jsp
setContentType(String contentTypestr)
setHeader(String headername,String headervalue)
實例:refreshExample1.jsp
Cookie是什么
Cookie是服務器上根據用戶瀏覽器識別用戶并記錄一些相關信息,例如:
- 網站能夠精確地知道有多少人瀏覽過。
- 測定多少人訪問過;
- 測定訪問者有多少是新用戶(即第一次來訪),多少是老用戶;
- 測定一個用戶多久訪問一次網站。
- 網站保存用戶的設置,按照用戶的喜好定制網頁外觀。
Cookie同時標注用戶和瀏覽器,有一條極為短小的信息,能夠被網站自動地放置在一臺電腦
的硬盤中。
通過Cookie,網站可以識別你是第一次訪問,或是又一次訪問它。在你瀏覽某些網站的時,網站的程序會在你不知不自覺中將一個小的 Cookie(作為一個文本文件)存儲在你的硬盤中。
使用Cookie
Cookie存放在客戶端,首先要建立一個Cookie,然后設置其屬性,再通過response對象的addCookie()方法將其 放入客戶端,獲取Cookie對象可用request對象的getCookies()
方法。
創建Cookie
Cookie(String cookiename,String cookievalue)
不能用:空白字符、[]、()、=、,、“、/、?、@、:
設置與讀取Cookie屬性
- getComments()/setComments(String purpose)
- getDomain()/setDomain(Stringpattern )
- getMaxAge()/setMaxAge(intexpiry)
- getName()
- getPath()/setPath(Stringuri)
- getSecure()/setSecure(booleanflag)
- getValue()/setValue(StringnewValue)
- getVersion ()/setVersion(intv)
Cookie操作
將Cookie加入HTTP頭:
Cookie usernameCookie=new Cookie(“username”,”dzycsai”);
response.addCookie(usernameCookie);
讀取Cookie:
- getCookies()
- getName()
- getValue()
session對象概要其主要關鍵點是:
- HTTP是無狀態(stateless)協議;
- Web Server 對每一個客戶端請求都沒有歷史記憶;
- Session用來保存客戶端狀態信息;
- 由Web Server 寫入;存于客戶端;
- 客戶端的每次訪問都把上次的session記錄傳遞給Web Server;
- Web Server讀取客戶端提交的session來獲取客戶端的
狀態信息;
session對象的方法
- getAttribute (String name)
- long getCreationTime()
- int getMaxInactiveInterval()
- long getLastAccessedTime()
- invalidate()
- removeAttribute (Stringname)
- setAttribute(Stringname, Objectvalue)
實例1:記住會話的用戶名 sessionUserLogin.jsp
實例2:猜字母游戲 guessCharExample1.jsp
?
5.5 application對象服務器啟動時就會產生application對象,為用戶分配application對象。其要點如下:
- 不同客戶產生同一個session對象;
- 所有客戶的application對象都是同一個。
- 例如:聊天室程序、計數器程序、留言板程序。
- 生命周期:服務器的啟動至關閉。
application對象的方法
- getAttribute (String name)
- getAttributeNames()
- getInitParameter()
- getServletInfo()
- setAttribute(Stringname, Objectvalue)
實例:網站計數器CounterApp1.jsp
5.6 out對象
out對象是javax.servlet.jsp.JspWriter類的一 個子類的對象,它的作用是把信息回送到客戶 端的瀏覽器中。在out對象中,最常用的方法就 是print()和println()。在使用print()或println() 方法時,由于客戶端是瀏覽器,因此向客戶端輸出時,可以使用HTML中的一些標記,例如: out.println(”<h1>Hello,JSP</h1>“);。
out對象其他一些常用的方法
- out.write功能和out.print相同
- newLine()的功能是輸出一個換行符
- out.flush()的功能是輸出緩沖的內容。
- out.close()的功能是關閉輸出流。
- out對象的生命周期是當前頁面。因此對于每一個JSP頁面,都有一個 out對象
實例:用out對象輸出表格outApp1.jsp
?
5.7 小結
本章學習JSP內置對象的應用,重點學習request、response、session、application、out幾個常用對象,request對象封裝用戶需要提交的數據,而response對象用來對客戶請求做出響應。
?
練習
6 文件的上傳與下載
用普通方法實現文件上傳
實例:文件上傳
UploadFileExample1.jsp
AccepteUploadFile.jsp
實例:文件下載DownFileExample2.jsp
?
6.7 用組件實現文件的上傳與下載
用組件實現文件的上傳與下載可以用到一個比較流行的組件jspSmartUpload
相關類:
File類
savaAs()方法
savaAs(String dstFileName)
savaAs(String dstFileName,int savaAsOption)
SAVEAS_PHYSICAL
SAVEAS_VIRTUAL
jspSmartUpload相關類的介紹
File類
isMissing()
getFieldName()
getFileName()
getCount()
getSize()
getCollection()
request類
Initialize()
upload()
save()
getRequest()
getFiles()
setAllowedFileList(String allowedFilesList)
smartUpload類
setDeniedFilesList()
setMaxFileSize()
setTotalMaxFileSize()
downloadFile()
實例:用jspSmartUpload組件實現文件上傳
uploadFile.htmldo_upload.jsp
實例:應用jspSmartUpload組件進行較復雜的表單處理uploadFile2.htmldo_upload2.jsp
from:?http://blog.csdn.net/jtlyuan/article/details/7470832
總結
- 上一篇: JSP快速入门教程——全十讲
- 下一篇: 3.6 Git 分支 - 变基