JavaWeb基礎總結學習_第1頁
JavaWeb基礎總結學習_第2頁
JavaWeb基礎總結學習_第3頁
JavaWeb基礎總結學習_第4頁
JavaWeb基礎總結學習_第5頁
已閱讀5頁,還剩185頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Tomcat

一、Web的相關概念

靜態(tài)資源:html、js、css

動態(tài)資源:JSP/Servlet、ASP、PHP(輸出靜態(tài)資源的程序)

用戶看到的永遠都是靜態(tài)資源

二、服務器的作用

JavaEE規(guī)范:Sun公司制定的

WebLogic實現了JavaEE規(guī)范,稱之為JavaEE容器

JavaEE規(guī)范包含了13種技術:JSP/Servlet是其中的一種

重量級服務器和輕量級服務器的區(qū)別:支持的服務的多少

Tomcat屬于輕量級的服務器

三、Tomcat服務器

官方網站:http:

1.安裝Tomcat

1.解壓對應的安裝包:注意不要解壓到中文目錄或者有空格的目錄

2.啟動Tomcat:

—進入CATALINA_HOME\bin(Tomcat安裝目錄稱為:CATALINA_HOME)

—執(zhí)行startup上at啟動Tomcat

一在瀏覽器中打開http:〃localhost:8080看到頁面,就表示安裝成功了

2.安裝中遇到的問題

1.必須配置JAVA_HOME環(huán)境變量,執(zhí)行JDK的安裝目錄

2.Tomcat使用的默認端口是8080。Web中HTTP默認使用的端口是80(HTTP協議規(guī)定)

3.更改Tomcat的默認端口8080—>8888

一找到<CATALINA_HOME>\conf\server.xml文件

_<Connectorport=''8888"protocol="HTTP/l.1"connectionTimeout=''20000"

redirectPort='’8443”/>

不建議配置CATALINA_HOME環(huán)境變量

第1頁共1頁

3.Tomcat的目錄結構(服務器廠商自己安排的)

1.CATALINA_HOME

_bin:存放啟動和關閉Tomcat的一些批處理命令

_conf:存放Tomcat的配置文件(全局)

Jib:存放Tomcat運行用到的jar包(全局)

Jogs:存放Tomcat的啟動和運行日志

_temp:存放臨時文件

_webapps:存放JavaWeb應用的目錄(幾個目錄,就說明當前的Tomcat管理著幾個應用)

_work:Tomcat的工作目錄

4.JavaWeb的目錄結構(SUN公司的Servlet規(guī)范要求的)

MyApp:應用名稱

html/js/jpeg

main.css

style.css

WEB-INF(必須有,此目錄中的資源文件用戶無法直接訪問到)

classes:存放編譯后的class文件

lib:存放應用需要的jar包

web.xml:當前應用的配置文件

5.部署JavaWeb應用

1.開放式目錄:把應用直接拷貝到Tomcat\webapps目錄下即可

2.把應用打包成war:

_進入應用的根目錄,執(zhí)行jar-cvfMyApp.war

一把war包拷貝至Tomcat\webapps目錄下即可

6.Tomcat的核心組成部分

_server.xml是Tomcat的核心配置文件

.Context用于配置某個應用

_Host用于配置某個主機

1.虛擬目錄:Context

屬性:

_path:指定虛擬目錄,以“廣開頭

_docBase:指定實際應用的目錄地址

配置方式一:(不建議使用,需要重啟Tomcat)

第2頁共2頁

<Contextpath=7MyAppMdocBase=,,C:\MyApp,7>(server.xml中Host下)

配置方式二:(建議使用)

_在Tomcat\conf\|enginname]\[hostname]目錄卜建立一個擴展名為xml的配置文件

<?xmlversion=,1.0,,encoding=,,gbk,,?>

<ContextdocBase=MCAMyApp57>

此處的xml配置文件的文件名就是虛擬目錄的名字(等同于path的功能),其他不變,這種

方式不需要啟動Tomcat就可以生效

小練習:配置默認端口、默認應用、默認主頁

http://localhost:8080/MyApp/b.html一>http://localhost

a、修改默認端口:修改server.xml文件中的那個8080為80

b、更改默認應用:在Tomcat\conf\[enginename]\|hostnameJ目錄下建立一個ROOT.xml配置

文件(不重啟無效),內容如下

<?xmlversion=n1.0nencoding二"ISO?8859?1”?>

<web-appxmlns="/xml/ns/javaee"

xmlns:xsi="/2001/XMLSchema-instance”

xsi:schemaLocation=n/xml/ns/javaee

http:/4/xml/nsqavaee/web-app_2_5.xsd"version=M2.5n>

<welcome-file-list>

<welcome-file>b.html</welcome-file>

</welcome-file-list>

</web-app>

2.虛擬主機

_name:主機的名稱

_appBase:本主機下所有應用的存放目錄

<Hostname=H"appBase=McAitcastapps'*

unpackWARs="truenautoDeploy="true"

xmlValidation二"false”xmlNamespaceAware="false”>

</Host>

<Hostname=,,"appBase=nc:\itheimaappsM

unpackWARs=ntrue'*autoDeploy=Htruen

xmlValidation=nfalsenxmlNamespaceAware="falseH>

</Host>

3.鏈接器:Connector

SSL:ServerSocketLayer

HTTPS=HTTP+SSL(默認使用的端口是443)

第3頁共3頁

四、Tomcat圖示

Tomcat與其它服務器整合原理圖

服務器規(guī)范與應用的三角圖

虛擬主機的目錄結構

第4頁共4頁

HTTP協議

一、HTTP協議基礎

LHttp協議定義WEB瀏覽器與WEB服務器之間交換數據的過程及數據本身的格式

2.Http協議的版本

_1.0:無狀態(tài)協議

_1.1:有狀態(tài)協議:一次連接基礎上可以發(fā)出多次請求和響應

3.明確的概念

當前瀏覽器在解析一個html文檔時,

當遇到了〈scriptsrc=""></script>

<imgsrc=""/>

<linkhref="'7>

<framesrc=""/>

二、HTTP協議的組成

1.請求部分:(請求行、請求信息頭、請求正文)

請求行:位于請求信息的第一行

GET/MyApp/index.htmlHTTP/1.1

第5頁共5頁

請求方式請求的資源路徑使用的協議

請求信息頭:從第二行開始至第一個空行

Accept:*/*

Accept-Language:zh-cn,en-us;q=0.5

請求正文:第一個空行之后的都是請求正文(沒有大小限制)

usemame=admin&password=l23

2.響應部分:(響應行、響應信息頭、響應正文)

響應行:位于響應信息的第一行

HTTP/1.1200OK

服務器使用的協議響應碼響應碼描述

響應消息頭:從第2行開始,至第一個空行

從第2行開始,至第一個空行

Accept-Ranges:bytes

ETag:W/"36-1355905852250"

響應正文:第一個空行之后的都是響應正文

Thisisabeauty;

4.請求方式:常用的請求方式為GET和POST

_GET:是默認的請求方式,請求參數會出現在地址欄上,不安全,長度限制<=1KB

_POST(建議):利用form表單,請求參數會出現在正文部分,安全,沒有大小限制

但是通過url地址帶參數往后臺傳值時后臺只能用GET方式獲取,POST方式不行

5.響應碼:500個響應碼,實際用到的也就30多個

_200:一切OK

_302/307:請求重定向

_304:服務器上的資源沒有被修改過

_404:請求的資源不存在

_500:服務器內部錯誤

第6頁共6頁

三、HTTP協議消息頭

LHTTP協議:消息頭的特點

用于客戶端和服務端說的悄悄話(相當于服務器和瀏覽器之間的暗號指令)

2.常用請求消息頭

_Accept:通知服務器,客戶端可以接受的MIME類型(Tomcat\conf\web.xml記載著文件系

統的文件擴展名和MIME類型的對應關系)MIME類型:大類型/小類型,比如text/html

_Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,如gzip壓縮格式

_Accept-Language:瀏覽器所希望的語言種類

_Referer:取值為,當前頁面由哪個頁面過來的(防盜鏈、廣告投放效果)

_Content-Type:正文內容類型

_User-Agent:瀏覽器類型

_Content-Length:表示消息正文的長度

_Cookie:與會話技術有關

3.常用響應消息頭

.Location:指定新的資源地址,結合302或307響應碼使用,完成請求重定向

_Content-Encoding:指示服務器給客戶端的響應正文是經過gzip壓縮的

.Contentlength:指示響應正文的長度

_Content_Type:指示正文的MIME類型(text/html;charset=UTF-8)

,Refresh:定時刷新,單位為秒,默認刷新自己(刷新別處:3;URL=/dayO4/l.html)

_Content-Disposition:指示客戶端下載資源(Contenl-disposition=attachement;fHename=l.jpg)

_Set-Cookie:會話技術有關

控制資源不要緩存:

Expiress:-1控制緩存的時間(毫秒值,比當前時間小)

Cache-Control:no-cache(1.1)

Progma:no-cache(1.0)

Servlet

一、Servlet入門

任何的Servlet必須實現javax.servlel.Servlet接口(被容器調用)

_voidinit(ServletConfigconfig):初始化一個Servlet時會被調用

_voidservice(ServletRequestreq,ServletResponseres):用戶的每一次請求,此方法都會被調用

第7頁共7頁

_voiddestroy():當一個Servlet對象被摧毀時,調用該方法

二、Servlet的編寫步驟

1.建立標準的JavaWeb應用目錄結構

FirstApp

WEB-INF

classes

lib

web.xml

2.在classes目錄下建立一個類,

直接或間接的實現Servlet這個接口

publicclassHelioServletextendsGenericServlet

3.編譯java源文件

(編譯前把servlet-api.jar力口入至ljclasspath中)

_setclasspath=%classpath%;C:\Tomcat6.0\lib\servlet-api.jar

_進入到classes目錄中,執(zhí)行以下語句進行編譯javac-d.HelloServlet.java

4,修改web.xml,對servlet進行URL映射

<?xmlversion=n1.0nencoding=nISO-8859-lH?>

<web-appxmlns=',/xml/ns/javaeen

xmlns:xs』"http:〃/2001/XMLSchema-instance”

xsi:schemaLocation=,'/xml/ns/javaee

/xml/ns/javaee/web-app_2_5.xsdnversion="2.5">

<servlet>

<servlet-name>HelloServlet</servlet-name>

<servlet-class>com.itheima.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>HelloServlet</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

</web-app>

第8頁共8頁

5.訪問該Servlet(地址http://localhost:8080/FirstApp/hello)

三、Servlet的生命周期

1.Servlet生命周期

1.默認情況下:只有第一次訪問Servlet對象時,才會被實例化,并調用init方法

2.只要初始化了,Servlet對象就駐留內存了

3.當應用被卸載或Tomcat被關掉時,才會調用destroy方法,釋放Servlet占用的資源

4.針對用戶的每一次請求,服務器都會采用線程的機制來調用service方法

當應用被容器加載時就初始化Servlet對象,而不必等到第一個用戶來訪時才初始化。

<servlet>

<servlet-name>ServletDemo3</servlet-name>

<servlet-class>com.itheima.servlet.ServletDemo3</servlet-class>

vload-on-startup>2v/load-on-startup>v!--自然整數,從2開始。代表了初始化的順序

</servlet>

2.通過集成編寫Servlet

.Javax.servlet.GenericServlet:覆蓋掉service方法

_javax.servlet.http.HttpServlet:于HTTP協議有關的Servlet,應該集成該類

—不能覆蓋掉其中service方法,因為其中有一些標準實現(典型模板的設計模式)

_應該根據客戶的請求方式,覆蓋掉相應doXXX方法

3.Servlet規(guī)范的類包

Javax.servlet:存放的接口、抽象類與具體協議無關

Javax.servlet.http:存放的接口、抽象類與HTTP協議有關

4.修改MyEclipse自動生成Servlet的模板

1、關閉MyEclipse

2、找到MyEclipse的安裝目錄

3、搜索*wizard",找至ljcom.genuitec.eclipse.wizards_8.5.0.me201003052220.jar

4、打開,找到templates'ServIet.java,此文件就是模板文件

5、(修改前先備份)修改該文件,再推回去

第9頁共9頁

四、Servlet映射的細節(jié)

1.Servlet映射的細節(jié)

Servlet映射的路徑可以使用通配符*,但只有以下2種寫法,

—以*開頭,以擴展名結尾:vuH-pattem>*.do</url-pattern>

_以*結尾,以開頭:vurl?pattern>/action/*</url-pattern>

2.路徑匹配多個Servlet映射時

一絕對匹配優(yōu)先于通配符

一都是通配符時,"/"開頭的優(yōu)先級高

一都是通配符時,都以“「‘開頭又有多個匹配時,從前往后開始匹配

如果一個Servlet的映射路徑為一個“/“,那么這個Servlet稱之為默認的Sendet,它負責處理

所有找不到映射的請求路徑

五、Servlet的配置參數(ServletConfig)

<servlet>

<servlet-name>ServletDemo</servlet-name>

<servlet-class>com.itheima.servlet.ServletDemo</servlet-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

ServletConfig:代表了針對當前Servlet的配置參數init-param中的配置參數

常用方法:

_StringgetlnitParameter(StringparamName):獲取指參數名稱的取值

-EnumerationgetInitParameterNames():獲取所有的參數的名稱

六、線程安全問題

_SingleThreadMode是一個標識接口(過時了)

_如果實現了該接口,可以在內存中搞出多個Servlet實例為用戶服務,或者為用戶服務的方

法進行同步處理

_具體看實現,Tomcat服務器采用的前者,盡量使用局部變量

第10頁共10頁

七、ServletContext對象

1.對象簡介

一容器加載JavaWeb應用時,都會為之創(chuàng)建一個ServletContext對象,-個應用只有一個

ServletContext對象

_ServletContext對象是一個域對象

_域對象說明其內維護了一個Map<String,Object>,生命周期與ServletContext同在

Map<String,Object>map=newHashMap<String,Object>();

publicvoidsetAttribute(Stringname,Objectobj){〃向Map中放東東

map.put(name,obj);

)

publicObjectgetAttribute(Stringname){

returnmap.get(name);

)

publicvoidremove(Stringname){

map.remove(name);

2.實現全局共享

一實現Servlet間共享數據

一獲取JavaWeb應用的全局參數

<context-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</context-param>

3.實現請求轉發(fā)

請求重定向:客戶端行為

請求轉發(fā):服務器行為

_RequestDispatchergetRequestDispatcher(Stringpath):path代表目標的地址,該地址必須以“尸

開頭,此”尸就代表當前的應用day04

_RequestDispatcher.forward(request,response)

4.讀取資源文件的三種方式

_ResourceBundle:

特點:只能讀取properties配置文件,且只能讀取類路徑下的配置文件,可以在非web環(huán)境

下使用

第11頁共11頁

_ServletContext:getRealPath(Stringpath)?>返回磁盤上的實際絕對路徑

特點:讀取任何位置上的任何文件,只能在web環(huán)境下使用

_ClassLoader:

特點:只能讀取類路徑下的配置文件,且可以加載任何的資源

5.Servlet圖示

Servlet的調用過程和原理

1:bttp://localhost:8080/Fr$tApp/he8q()

加羲應用時,就合

i~~U加載應用中的web.xml

:2:找到FEApp應用04

T]

3:中)

U

4:畏索web,xml誰的Matter必主體內容()

TJ

5:加成遂類,并實例化:Class.forName.riewInstance。

6:調用mlt方法0

7:service方法0

Servtet^象踞例:4

用于第一次使用時創(chuàng)建,井先成初的化.

以后就在胃內存了.

當應用被卸羲,或者Tomcat停止了,de出。y被調用

Servlet規(guī)范中核心類圖

第12頁共12頁

八、HttpServletResponse

1.以字節(jié)流輸出中文數據

_data.getBytes():默認編碼輸出字節(jié),瀏覽器也是采用默認編碼解碼,所以沒有亂碼問題

_data.getBytes("UTF-8”):通知客戶端,輸出數據時采用的編碼

方式一:用戶更改瀏覽器的查看編碼(不建議使用)

方式二:response.setHeade[("Content-Type”Jtext/html;charset=UTF-8”)

方式三:response.setContentTypeCfctext/html;charset=UTF-8*r);(效果與方式二一樣)

方式四:sos.write(u<metahttp-equiv=,Content-Type,content='text/html;charset=UTF-8'>''

.getBytes("UTF-8”))

第13頁共13頁

2.以字符流輸出中文數據

PrintWriterout=response.getWriter();

out.write(data)〃默認碼表查ISO-8859-1(Servlel規(guī)范規(guī)定的)

設定編碼:

_response.setCharacterEncoding(StringcharsetName):更改默認的編碼

.不要忘記通知客戶端解碼碼表

方式一:response.setCharacterEncoding(“UTF-8”);

response.setHead("Context-type”,“text/html;charset=UTF-8”);

方式二:(等同方式一的2條語句)

response.setContentType("text/html;charset=UTF-8");

3.response案例(Servlet作為默認主頁)

<servlet-mapping>

<servlet-name>ResponseDemo</servlet-name>

<url-pattern>/servlet/ResponseDemo</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>sendet/ResponseDemo</welcome-file>

</welcome-file-list>

4.response細節(jié)

.response中的字節(jié)流和字符流互斥

.response中的對象內部是有緩存的,所有的輸出代碼都是把對象寫到了response對象中,

容器從response對象中取出寫的數據,然后組織成HTTP協議響應的格式傳遞給客戶端

一容器會檢測response中的輸出流有沒有關閉,如果發(fā)現沒有關閉就會替你關閉

反射做框架用

九、HttpServletRequest

1.常用方法

獲取客戶機的請求頭:

_getHeader(Stringname):獲取單一的請求頭值

_getHeaders(Stringname):獲取重名的請求頭

_getHeaderNames():獲取所有的請求頭

獲得客戶機的請求參數:

_getParameter(name):獲取單一的請求參數

第14頁共14頁

_getParameterValues(Stringname):獲取頁面上重名輸入域的參數

_getParameterNames():獲取所有的請求參數

_getParameterMap():做框架用

用戶的所有輸入都是Siring類型的

-getRequestURL:返回客戶端發(fā)出請求時的完整URL

_getRequestURI:返回請求行111的資源部分

_getQueryString:返回請求行中的參數部分

_getRemoteAddr:返回發(fā)出請求的客戶機的IP地址

_getRemoteHost:返回發(fā)出請求的客戶機的完整主機名

_getRemotePort:返回客戶機所使用的網絡端口號

_getLocalAddr:返回WEB服務器的IP地址

_getLocalName:返回WEB服務器的主機名

_getMethod:得到客戶機的請求方式

2.獲取請求參數

_獲取一個參數

_獲取重名的請求參數

一使用DBUtils框架封裝數據到JavaBean中

_常用form表單數據的獲取

3.表單數據總結

_inputtype的類型是radio或者是checkbox,如果用戶一個都沒有選,那么就不會向服務器

傳遞數據,如果用戶選擇了,則把value的值傳遞給服務器

.checkbox作為一個開關(比如婚否):如果用戶沒有選,什么都不傳,如果用戶選了,看

有沒有value屬性,如果有value,就傳遞給服務器value的值,沒有傳遞的是on

4.用戶輸入請求參數亂碼問題

一客戶端提交的請求參數,客戶端當前使用什么編碼,就以什么編碼給你的程序傳遞數據

一客戶用的頁面的編碼,可以通過meta去指定(建議UTF-8)

一程序中打印的亂碼問題,程序不知道你傳遞的數據編碼方式:

request.setCharacterEncoding("UTF-8”通知服務器程序,客戶端提交的數據查詢的是UTF-8

碼表,只能解決POST請求提交的數據

_get提交方式,查ISO-8859-1

解決方法:得到字符的原始字節(jié)序列,用UTF-8重新編碼

newString(name.getBytes("ISO-8859-l'',''UTF-8''))

第15頁共15頁

十、其它

l.ServletRequest對象

_ServletRequest對象是一個域對象

—內部有一個M叩(String,O*ct>

voidsetAttribute(Stringname,Objectobj)

ObjectgetAttribute(Stringname)

voidremoveAttribute(Stringname)

2.請求重定向和轉發(fā)的區(qū)別

_請求重定向:瀏覽器行為(因為不是同一個request對象,所以無法傳setAttribute的值,

且因為是瀏覽器行為,所以無法訪問WEB-INF中的文件)

特點:瀏覽器發(fā)出了2次請求,得到了2次響應,地址欄會變

一請求轉發(fā):服務器行為(源組件和目標組件共享reuqest和resopnse中的數據)

特點:瀏覽器發(fā)出了1次請求,得到了1次響應,地址欄不變

應用:

一可以利用request的域對象的特點,由源組件向其中存放寫數據

一可以讓用戶訪問到存放在WEB-INF目錄中的目標資源

3.RequestDispatcher

轉發(fā)(forward):源組件轉向目標組件,由目標組件顯示響應結果(只有目標的響應)

包含(include):源組件包含目標組件,由源組件顯示響應結果(會把目標的響應結果加上)

轉發(fā):源組件在任何頁面的輸出都無效,轉發(fā)前,容器會清空代sponse對象的緩存

包含:目標組件的所有設置的頭無效,包含前,容器會清空目標組件設置的響應信息頭

4.ServletContext和ServletRequest的區(qū)別

上面2個都能得至!]RequestDispatcher對象

_ServletContext:path必須以“廣開頭,代表當前的應用(代表絕對路徑)

.ServletRequest:path可以以“廣開頭,也可以不以開頭(代表相對路徑)

5.各種URL路徑的寫法

絕對路徑和相對路徑,建議用絕對路徑

一絕對路徑:/day05/

第16頁共16頁

原則:要不要加應用名稱,就要看地址為誰服務的。給服務器用的”/就代表了/dayO5,如果

是給客戶端用的,就要加上/dayO6

getRequestDispatcher(Stringurl):不用加

formaction:力口

ahref:力口

imgsrc:力口

linkhref:力口

scriptsrc:加

302+Location:力口

會話

一、會話技術概述及要解決的問題

會話:

用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然后關閉瀏覽器,整個

過程稱之為一個會話

解決會話的二大技術:

_Cookie:客戶端技術

程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器,當用戶使用瀏覽器再去訪

問服務器中的web資源時,就會帶著各自的數據去,這樣,web資源處理的就是用戶各自

的數據了

.Session:服務器端技術

服務器在運行時可以為每一個用戶的瀏覽器創(chuàng)建一個其獨享的HttpSession對象,由于

session為用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的數據放在

各自的session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各

自的session中取出數據為用戶服務

二、Cookie

_Cookie中不能使用中文

_javax.servlet.http.Cookie:代表一個Cookie對象

1.Cookie的屬性

_name:必須的

_value:必須的

_comment:可選的(注釋)

_domain:可選的(域名,默認的域名是寫cookie的那個資源所在的區(qū)域)

_maxAge:可選的(cookie的默認生命周期就是一次會話期)把最大存活時間改為0,就是

代表要刪除該cookie

第17頁共17頁

_version:可選的

.secure:可選的(HTTPS)

_path:可選的,默認path是寫cookie的那個資源的訪問路徑URI

向客戶端寫cookie的資源訪問地址是:http://localhost:8080/day06/servlet/CookieDemol

那么該cookie的默認路徑是:/day06/servlet

/servlet/Sei*vletDemol:寫的cookie4-/servlet+cname

訪問地址:/ServIetDemo2:不帶

訪問地址:i〔/scrvlet/ServletDemo3:帶

又一個Cookie,它的信息:/day06+cname

訪問地址:/ServletDemo2:不帶

訪問地址:/day06/ServletDemo2:帶

訪問地址:/day06/servIet/ServletDemo2:帶

訪問地址:/day06戶:帶

2.Cookie的使用

一服務器如何向客戶端寫Cookie?比如:

Cookiec=newCookie("cname",''cvalue'');

HttpServletResponse.addCookie(c);

.response.addCookie(c)等價于response.setHeader("Set?Cookie";'cname=cvalue'');

一用盡量少的Cookie保存盡量少的數據(關鍵數據)

一一個網站只能向客戶端寫20個Cookie,客戶端最多存放300個Cookie,且每一個Cookie

的大小不能超過4KB

一服務器如何得到從客戶端傳來的Cookie:

Cookie[]cs=HttpServletRequest.getCookies();

_如何唯一確定?個Cookie:domain+path+name

三、Session

1.HttpSession的簡介

_HttpSession也是一個域對象

ObjectgetAttribute(Stringname)

voidsetAttribute(Stringname,Objectobj)

voidremoveAttribute(Stringname)

_如何獲取HttpSession對象:HttpServletRequest.getSession()

如果服務器內存中有為您服務的Session,該方法是獲取;如果沒有,該方法是創(chuàng)建

_HttpSession().getId():服務器會為每一個session對象分配一個隨機的唯一的ID

.Session技術其實上就是借助了cookie技術

服務器寫的這個cookie的名稱為“JSESSIONID”,取值為session對象的id,path為當前應用,

默認生命周期為一次會話

第18頁共18頁

內存中的sesssion對象默認超過30分鐘后自動銷毀

2.Session的使用

_HttpServletRequest.getSession():先查,沒有再創(chuàng)建

_HttpServletRequest.getSession(booleancreate):如果參數為true,效果等同于getSession(),

如果為false,則只會查詢,查不到返回null

」ongHttpSession.getLastAccessedTime():獲取最后一次訪問該session對象的時間

_voidHttpSession.invalidate():立刻摧毀該session對象

3.防止表單的重復提交

用Base64編碼

最?。?0000000整數0

最大:00111111整數63

0-63共64個,因此成為Base64(其實是一個基礎碼表)

4.客戶端禁用Cookie后的會話數據保存問題

解決方法:把之前為您服務的那個Session的id再次告訴服務器就可以了。

具體編碼:URL重寫,對應用中的所有地址都重寫

http://l50:8080/day07/servlet/ShowCartSendet

50:8080/day07/servlet/ShowCartServlet;JSESS10NlD=2223432432

HttpServletResponse.encodeURL(Stringpath):發(fā)現客戶端沒有禁止Cookie,就不重寫了

HttpServletResponse.encodeRedirectURL(Stringurl):

對于使用http:〃localhost的訪問應用,即使客戶端禁用了Cookie,禁用也無效

5.E會在什么情況下開始一個新的會話

JE7(含以下版本):開啟一個新的瀏覽器進程就是一個新的會話

_IE8(含以上版本):開戶多個瀏覽器進程,都是同一個會話。若想開啟新的不同的會話,

請使用“文件”/“新建會話”

一開啟新的Tab頁面,與之前的窗口是同一個會話

一從一個頁面上開啟的一個新的頁面,也屬于同一個會話

6.HttpSession對象的狀態(tài)轉換

配置Sesion對象的默認有效期:web.xml

<session-config>

第19頁共19頁

<session-timeout>l</session-timeout>單位為分鐘,至少1分鐘后銷毀

</session-config>

7.Session圖示

HTTPSession原理圖

Session狀態(tài)(鈍化)

被持久化的對象所在的一個類?定要實現個接口Serializable(序列)

1、一個session對象長時間沒有用了

2、當前應用I新啟動了

鈍化、擱貿

持久化

1、session對象又有人訪問了

2、當前應用啟動成功了

活化、激活

JSP

一、JSP的作用

_javax.servlet.jspJspWriter:功能相當于PrintWriterout=response.getWriter();

—開發(fā)原則:Servlet處理邏輯,JSP只用于顯示

第20頁共20頁

二JSP語法

1.模板元素

_JSP中那些HTML的東西就叫模板元素

_會出現在對應的Servlet的service方法中,由JspWriter的out進行write

2.JSP腳本表達式

_語法:<%=表達式%〉注意:表達式后面不能加上分號

_作用:輸出表達式的結果到頁面上

3.JSP中的腳本片段

_語法:<%

Java語句;

%>

_特點:此部分代碼會原分不動的出現在JSP對應Servlet的service方法中

實際開發(fā)中,JSP中不能出現一行Java腳本片段和Java腳本表達式,多行也不行

4.JSP聲明

_語法:<%!

聲明語句;

%>

_作用:定義成員變量和方法

5.JSP注釋

_語法:<%-這是注釋-%>

_作用:注釋掉的腳本,不會被翻譯,面頁面注釋會先翻譯出來,然后在頁面上注釋掉

三、JSP指令

_JSP指令是為JSP引擎(Tomcat)服務的

_指令的語法:<%@指令名稱屬性1="值1”。。。。。。%>

第21頁共21頁

1.Page指令

屬性:

Janguage:指示JSP中使用的腳本語言。默認為java,目前也只支持java

.extends:指示JSP對應的Servlet的爸爸,請不要修改

.import:導入JSP中的Java腳本中使用到的java包或類,作用等同于java類中的import,

jsp引擎會自動引入以下包:

javax.servlet.*

javax.servlet.http.*

javax.servlet.jsp.*(JSP規(guī)范類所在的包)

_session:JSP頁面中是否生成HttpSession對象,默認為true,可選值truelfalse

_buffer:JSP輸出流JspWriter的緩存,默認值8KB,可選nonelyoursizeKB

_autoFlush:JSP輸出流滿了,自動刷新

JsThreadSaft:默認值是true,可選值truelfalse。指示JSP對應的Servlet是否實現

SingleThreadModel,取值為false時才會實現該接口

_errorPage:指示當前的JSP頁面出錯后,轉向的頁面,服務器轉發(fā)技術,路徑如果以“尸開

頭表示絕對路徑

配置全局錯誤提示頁面:(不是服務器轉發(fā)技術)

web.xml

<error>

<exception-type>java.lang.Exception</exception-type>

<location>/error.jsp</location>

</error>

<error>

<error-code>404</error-code>

<location>/404.jsp</location>

</error>

_isErrorPage:指示頁面中是否生成exception對象,默認值false

_contentType:指示JSP其余內容的MIME類型,等同response.setContentType

("text/html;charset=UTF-8”);

_pageEncoding:JSP引擎在翻譯JSP成為Servlet時查詢的碼表

其它功能:page可以沒有contentType,只有pageEncoding等同于contentType+

pageEncoding

_isELIgnored:指示是否忽略EL表達式,默認值false,不忽略,如果為true,則忽略表達

式,即把表達式當做普通HTML文本對待

2.Include指令

_作用:把2個頁面的輸出合并

_屬性:file〉要合并的頁面的路徑,路徑如果以表示絕對路徑

一靜態(tài)包含:使用指令進行的包含,能用靜的不用動的

一動態(tài)包含:其它包含都是動態(tài)包含

<%@includefile="b.jsp”%>靜態(tài)包含

第22頁共22頁

3.taglib指令

_作用:引入外部的標簽

_屬性:

Uri:外部標簽所在的名稱空間

prefix:前綴

比如:v%@tabliburi="http:〃/jsp/jstl/core“prefix="c''%>

四、JSP動作元素

_jsp:include

」sp:forward->請求轉發(fā)(page以,7”表示絕對路徑)

」sp:param->傳遞請求參數

name:參數名

value:參數取值

五、JSP九大隱式對象(service中的局部變量)

變量名:對應的類型

request:HttpServletRequest

response:HttpServletResponse

session:HttpSession(不一定有,page指令的session=false時就沒有)

application:ServletContext

config:ServletConfig

page:this(當前頁面對應的Servlet對象本身)

exception:Throwable(不一定有,page指令的isErrorPage=false時就沒有)

out:javax.servlet.jsp.JspWriter(作用等同于ServlelResponse.getWriter。)

pageContext:javax.servlet.jsp.PageContext

作百:

1.獲取其它8大隱式對象

2.本身是一個域對象,而且還能操作其它3個域對象(ServletContext、HttpSession>

ServletRequest)

操作本身域對象的方法:頁面范圍

_voidsetAttribute(Stringname,Objectobj)

.ObjectgetAttribute(Stringname)

_voidremoveAttribute(Stringname)

操作所有域對象的方法:參數scope是一個整數,PageContext有對應的常量

PAGE_SCOPE、REQUEST_SCOPE>SESSION_SCOPE>APPLICATION_SCOPE

_voidsetAttribute(Stringname,Objectobj,intscope)

.ObjectgetAttribute(Stringname,intscope)

_voidremoveAttribute(Stringnamejntscope)

又一個很重要的方法:

第23頁共23頁

ObjectfindAttribute(Stringname):查找按照各種SCOPE去找,找到為止

3.提供了轉發(fā)和包含的方法調用

voidforward(Stringpath)

voidinclude(Stringpath)

六、JSP四大域對象

JSP的內置對象:

pageContext:pageContext(Servlet代碼基本不用)

request:HttpServletRequest(保持數據必須在轉發(fā)的一瞬間,數據一次性的)

session:HttpSession一次會話過程中都需要用到的數據,比如登陸信息

application:ServletContext應用級別的,同步

七、JavaBean的概念

一類一般是public的

—必須有默認的構造方法

一字段都是私有的(首字第小寫,從第2個單詞開始首字母大寫)

_提供針對私有字段的getter或setter方法(符合SUN的Java命名規(guī)范)getName>setName

如果一個字段是boolean的,它的讀方法可以是getXxx或者isXxx

_一般都實現java.io.Serializable

—在JavaEE開發(fā)中,一般用JavaBean來封閉數據

八、JSP中操作JavaBean的動作元素

都與域對象有關

_Jsp:useBean

作用:

從指定的域范圍中查找名稱為id的對象。如果沒有找到,創(chuàng)建該對象,并放入到指定的域

范圍中,名稱為id

屬性:

id:域中的名稱

class:對象的類型

scope:域范圍,默認為page,可選值pagelrequestlsessionlapplication

_jsp:setProperty

作用:

設置JavaBean的屬性,調用JavaBean的setter方法,填充請求參數

屬性:

name:useBean中id指定的對象

property:屬性名稱,還可以填充請求參數,還可以使用通配符*

value:設置的值,還可以自動進行類型的轉換(僅限基本數據類型),支持JSP表達式

第24頁共24頁

param:請求參數的名稱

_Jsp:getProperty

作用:

輸出JavaBean的屬性到頁面上

屬性:

name:useBean中id指定的對象

property:屬性名稱getter方法

如果獲取的某個屬性的值是null,則頁面上就會顯示null

設計模型

模型一:JSP+JavaBean

模型二:JSP+Servlet+JavaBean(MVC)

M:ModelJavaBean

V:ViewJSP

C:ControllerServlet

EL表達式

一、EL表達式簡述

_用于替換JSP中的Java表達式

_表達式分為:Java表達式或EL表達式

_EL表達式的基本語法形式:${EL表達式}

_EL表達式中不會出現空指針異常

第25頁共25頁

二、四大作用

1.獲取并顯示數據

_EL只能獲取域對象中的數據

_.運算符,可取對象的屬性,調用getter方法

」]運算符,和.運算符一樣,口能做的,.不一定能做,但.能做的,口也都能做

比如:${vince}->${s["address”]「province'|}

一取List中的元素:[元素的索引]

一取Map中的元素:.key語法

2.執(zhí)行簡單的數學或者邏輯運算

empty運算符:判斷一個對象是否為null或者是對于集合類型的,如果集合對象存在,

其中沒有任何元素,也返回true

三元運算符:邏輯表達式?真時執(zhí)行:假時執(zhí)行

EL表達式不支持字符串的連接操作

_${pageContext.request.contextPath}:獲取/day08

_<%@tagliburi=',/jsp/jstl/functions,'prefix=nfn"%>

要用以下的2個fn,就必須先把上面這個taglib導入,否則報錯

_${fn:split(str;7-n)[2]}

_${fn:escapeXml(param.content)}

3.獲取JSP中的常用對象,EL中有11大隱式對象

除pageContext代表對象本身之外,其他10個內置對象都代表的是M叩

_pageContext:代表javax.servlet.jsp.PageContext對象本身,與JSP內置對象一樣

_pageScope:取page范圍內的域中的數據,它是一個M叩

_requestScope:取request范圍內的域中的數據,它是一個Map

_sessionScope:取session范圍內的域中的數據,它是一個Map

_applicationScope:取application范圍內的域中的數據,它是一個Map

_param:取一個請求參數的值,它是一個M叩(key:請求參數名,value:請求參數值)

從一個頁面url傳值,...?id=123在下一個頁面用$作@「31111<1}可以取到

_paramValues:取重名的請求參數的值,它是一個Map(key:請求參數名,value:請求參

數值數組String。)

_header:取一個請求頭的值,它是一個Map(key:請求頭名稱,value:頭值)

_headerValues:取重名的請求頭的值,它是一個M叩(key:請求頭名稱,value:頭值數組

名稱String[])

第26頁共26頁

_cookie:代表客戶端提交過來的Cookie,它是一個Map(key:cookie的name,value:cookie

對象本身)

_initParam:代表了web.xml中context-param中配置的全局參數,它是一個M叩(key:參

數名,value:參數值)

4.調用普通靜態(tài)類的方法

編寫步驟就是自定義標簽步驟

編寫一個普通的java類型,提供一個靜態(tài)方法

publicclassStringFunction{

publicstaticStringtoUpperCase(Stringstr){

returnstr.toUpperCase();

)

)

在WEB-INF目錄下建立一個名為tld的xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<taglibxmlns=,,/xml/ns/j2ee"

xmlns:xsi二"/2001/XMLSchema-instance"

xsi:schemaLocation=H/xml/ns/j2ee

http://java.sun.eom/xml/ns/j2ee/webJsptaglibrary_2_0.xsdMversion="2.0',>

<tlib-version>1.0</tlib-version

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論