JavaWeb基礎(chǔ)總結(jié)學(xué)習(xí)_第1頁(yè)
JavaWeb基礎(chǔ)總結(jié)學(xué)習(xí)_第2頁(yè)
JavaWeb基礎(chǔ)總結(jié)學(xué)習(xí)_第3頁(yè)
JavaWeb基礎(chǔ)總結(jié)學(xué)習(xí)_第4頁(yè)
JavaWeb基礎(chǔ)總結(jié)學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩185頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Tomcat

一、Web的相關(guān)概念

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

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

用戶(hù)看到的永遠(yuǎn)都是靜態(tài)資源

二、服務(wù)器的作用

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

WebLogic實(shí)現(xiàn)了JavaEE規(guī)范,稱(chēng)之為JavaEE容器

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

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

Tomcat屬于輕量級(jí)的服務(wù)器

三、Tomcat服務(wù)器

官方網(wǎng)站:http:

1.安裝Tomcat

1.解壓對(duì)應(yīng)的安裝包:注意不要解壓到中文目錄或者有空格的目錄

2.啟動(dòng)Tomcat:

—進(jìn)入CATALINA_HOME\bin(Tomcat安裝目錄稱(chēng)為:CATALINA_HOME)

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

一在瀏覽器中打開(kāi)http:〃localhost:8080看到頁(yè)面,就表示安裝成功了

2.安裝中遇到的問(wèn)題

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

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

3.更改Tomcat的默認(rèn)端口8080—>8888

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

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

redirectPort='’8443”/>

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

第1頁(yè)共1頁(yè)

3.Tomcat的目錄結(jié)構(gòu)(服務(wù)器廠(chǎng)商自己安排的)

1.CATALINA_HOME

_bin:存放啟動(dòng)和關(guān)閉Tomcat的一些批處理命令

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

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

Jogs:存放Tomcat的啟動(dòng)和運(yùn)行日志

_temp:存放臨時(shí)文件

_webapps:存放JavaWeb應(yīng)用的目錄(幾個(gè)目錄,就說(shuō)明當(dāng)前的Tomcat管理著幾個(gè)應(yīng)用)

_work:Tomcat的工作目錄

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

MyApp:應(yīng)用名稱(chēng)

html/js/jpeg

main.css

style.css

WEB-INF(必須有,此目錄中的資源文件用戶(hù)無(wú)法直接訪(fǎng)問(wèn)到)

classes:存放編譯后的class文件

lib:存放應(yīng)用需要的jar包

web.xml:當(dāng)前應(yīng)用的配置文件

5.部署JavaWeb應(yīng)用

1.開(kāi)放式目錄:把應(yīng)用直接拷貝到Tomcat\webapps目錄下即可

2.把應(yīng)用打包成war:

_進(jìn)入應(yīng)用的根目錄,執(zhí)行jar-cvfMyApp.war

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

6.Tomcat的核心組成部分

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

.Context用于配置某個(gè)應(yīng)用

_Host用于配置某個(gè)主機(jī)

1.虛擬目錄:Context

屬性:

_path:指定虛擬目錄,以“廣開(kāi)頭

_docBase:指定實(shí)際應(yīng)用的目錄地址

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

第2頁(yè)共2頁(yè)

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

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

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

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

<ContextdocBase=MCAMyApp57>

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

方式不需要啟動(dòng)Tomcat就可以生效

小練習(xí):配置默認(rèn)端口、默認(rèn)應(yīng)用、默認(rèn)主頁(yè)

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

a、修改默認(rèn)端口:修改server.xml文件中的那個(gè)8080為80

b、更改默認(rèn)應(yīng)用:在Tomcat\conf\[enginename]\|hostnameJ目錄下建立一個(gè)ROOT.xml配置

文件(不重啟無(wú)效),內(nèi)容如下

<?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.虛擬主機(jī)

_name:主機(jī)的名稱(chēng)

_appBase:本主機(jī)下所有應(yīng)用的存放目錄

<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(默認(rèn)使用的端口是443)

第3頁(yè)共3頁(yè)

四、Tomcat圖示

Tomcat與其它服務(wù)器整合原理圖

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

虛擬主機(jī)的目錄結(jié)構(gòu)

第4頁(yè)共4頁(yè)

HTTP協(xié)議

一、HTTP協(xié)議基礎(chǔ)

LHttp協(xié)議定義WEB瀏覽器與WEB服務(wù)器之間交換數(shù)據(jù)的過(guò)程及數(shù)據(jù)本身的格式

2.Http協(xié)議的版本

_1.0:無(wú)狀態(tài)協(xié)議

_1.1:有狀態(tài)協(xié)議:一次連接基礎(chǔ)上可以發(fā)出多次請(qǐng)求和響應(yīng)

3.明確的概念

當(dāng)前瀏覽器在解析一個(gè)html文檔時(shí),

當(dāng)遇到了〈scriptsrc=""></script>

<imgsrc=""/>

<linkhref="'7>

<framesrc=""/>

二、HTTP協(xié)議的組成

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

請(qǐng)求行:位于請(qǐng)求信息的第一行

GET/MyApp/index.htmlHTTP/1.1

第5頁(yè)共5頁(yè)

請(qǐng)求方式請(qǐng)求的資源路徑使用的協(xié)議

請(qǐng)求信息頭:從第二行開(kāi)始至第一個(gè)空行

Accept:*/*

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

請(qǐng)求正文:第一個(gè)空行之后的都是請(qǐng)求正文(沒(méi)有大小限制)

usemame=admin&password=l23

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

響應(yīng)行:位于響應(yīng)信息的第一行

HTTP/1.1200OK

服務(wù)器使用的協(xié)議響應(yīng)碼響應(yīng)碼描述

響應(yīng)消息頭:從第2行開(kāi)始,至第一個(gè)空行

從第2行開(kāi)始,至第一個(gè)空行

Accept-Ranges:bytes

ETag:W/"36-1355905852250"

響應(yīng)正文:第一個(gè)空行之后的都是響應(yīng)正文

Thisisabeauty;

4.請(qǐng)求方式:常用的請(qǐng)求方式為GET和POST

_GET:是默認(rèn)的請(qǐng)求方式,請(qǐng)求參數(shù)會(huì)出現(xiàn)在地址欄上,不安全,長(zhǎng)度限制<=1KB

_POST(建議):利用form表單,請(qǐng)求參數(shù)會(huì)出現(xiàn)在正文部分,安全,沒(méi)有大小限制

但是通過(guò)url地址帶參數(shù)往后臺(tái)傳值時(shí)后臺(tái)只能用GET方式獲取,POST方式不行

5.響應(yīng)碼:500個(gè)響應(yīng)碼,實(shí)際用到的也就30多個(gè)

_200:一切OK

_302/307:請(qǐng)求重定向

_304:服務(wù)器上的資源沒(méi)有被修改過(guò)

_404:請(qǐng)求的資源不存在

_500:服務(wù)器內(nèi)部錯(cuò)誤

第6頁(yè)共6頁(yè)

三、HTTP協(xié)議消息頭

LHTTP協(xié)議:消息頭的特點(diǎn)

用于客戶(hù)端和服務(wù)端說(shuō)的悄悄話(huà)(相當(dāng)于服務(wù)器和瀏覽器之間的暗號(hào)指令)

2.常用請(qǐng)求消息頭

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

統(tǒng)的文件擴(kuò)展名和MIME類(lèi)型的對(duì)應(yīng)關(guān)系)MIME類(lèi)型:大類(lèi)型/小類(lèi)型,比如text/html

_Accept-Encoding:瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式,如gzip壓縮格式

_Accept-Language:瀏覽器所希望的語(yǔ)言種類(lèi)

_Referer:取值為,當(dāng)前頁(yè)面由哪個(gè)頁(yè)面過(guò)來(lái)的(防盜鏈、廣告投放效果)

_Content-Type:正文內(nèi)容類(lèi)型

_User-Agent:瀏覽器類(lèi)型

_Content-Length:表示消息正文的長(zhǎng)度

_Cookie:與會(huì)話(huà)技術(shù)有關(guān)

3.常用響應(yīng)消息頭

.Location:指定新的資源地址,結(jié)合302或307響應(yīng)碼使用,完成請(qǐng)求重定向

_Content-Encoding:指示服務(wù)器給客戶(hù)端的響應(yīng)正文是經(jīng)過(guò)gzip壓縮的

.Contentlength:指示響應(yīng)正文的長(zhǎng)度

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

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

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

_Set-Cookie:會(huì)話(huà)技術(shù)有關(guān)

控制資源不要緩存:

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

Cache-Control:no-cache(1.1)

Progma:no-cache(1.0)

Servlet

一、Servlet入門(mén)

任何的Servlet必須實(shí)現(xiàn)javax.servlel.Servlet接口(被容器調(diào)用)

_voidinit(ServletConfigconfig):初始化一個(gè)Servlet時(shí)會(huì)被調(diào)用

_voidservice(ServletRequestreq,ServletResponseres):用戶(hù)的每一次請(qǐng)求,此方法都會(huì)被調(diào)用

第7頁(yè)共7頁(yè)

_voiddestroy():當(dāng)一個(gè)Servlet對(duì)象被摧毀時(shí),調(diào)用該方法

二、Servlet的編寫(xiě)步驟

1.建立標(biāo)準(zhǔn)的JavaWeb應(yīng)用目錄結(jié)構(gòu)

FirstApp

WEB-INF

classes

lib

web.xml

2.在classes目錄下建立一個(gè)類(lèi),

直接或間接的實(shí)現(xiàn)Servlet這個(gè)接口

publicclassHelioServletextendsGenericServlet

3.編譯java源文件

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

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

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

4,修改web.xml,對(duì)servlet進(jìn)行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頁(yè)共8頁(yè)

5.訪(fǎng)問(wèn)該Servlet(地址http://localhost:8080/FirstApp/hello)

三、Servlet的生命周期

1.Servlet生命周期

1.默認(rèn)情況下:只有第一次訪(fǎng)問(wèn)Servlet對(duì)象時(shí),才會(huì)被實(shí)例化,并調(diào)用init方法

2.只要初始化了,Servlet對(duì)象就駐留內(nèi)存了

3.當(dāng)應(yīng)用被卸載或Tomcat被關(guān)掉時(shí),才會(huì)調(diào)用destroy方法,釋放Servlet占用的資源

4.針對(duì)用戶(hù)的每一次請(qǐng)求,服務(wù)器都會(huì)采用線(xiàn)程的機(jī)制來(lái)調(diào)用service方法

當(dāng)應(yīng)用被容器加載時(shí)就初始化Servlet對(duì)象,而不必等到第一個(gè)用戶(hù)來(lái)訪(fǎng)時(shí)才初始化。

<servlet>

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

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

vload-on-startup>2v/load-on-startup>v!--自然整數(shù),從2開(kāi)始。代表了初始化的順序

</servlet>

2.通過(guò)集成編寫(xiě)Servlet

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

_javax.servlet.http.HttpServlet:于HTTP協(xié)議有關(guān)的Servlet,應(yīng)該集成該類(lèi)

—不能覆蓋掉其中service方法,因?yàn)槠渲杏幸恍?biāo)準(zhǔn)實(shí)現(xiàn)(典型模板的設(shè)計(jì)模式)

_應(yīng)該根據(jù)客戶(hù)的請(qǐng)求方式,覆蓋掉相應(yīng)doXXX方法

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

Javax.servlet:存放的接口、抽象類(lèi)與具體協(xié)議無(wú)關(guān)

Javax.servlet.http:存放的接口、抽象類(lèi)與HTTP協(xié)議有關(guān)

4.修改MyEclipse自動(dòng)生成Servlet的模板

1、關(guān)閉MyEclipse

2、找到MyEclipse的安裝目錄

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

4、打開(kāi),找到templates'ServIet.java,此文件就是模板文件

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

第9頁(yè)共9頁(yè)

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

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

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

—以*開(kāi)頭,以擴(kuò)展名結(jié)尾:vuH-pattem>*.do</url-pattern>

_以*結(jié)尾,以開(kāi)頭:vurl?pattern>/action/*</url-pattern>

2.路徑匹配多個(gè)Servlet映射時(shí)

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

一都是通配符時(shí),"/"開(kāi)頭的優(yōu)先級(jí)高

一都是通配符時(shí),都以“「‘開(kāi)頭又有多個(gè)匹配時(shí),從前往后開(kāi)始匹配

如果一個(gè)Servlet的映射路徑為一個(gè)“/“,那么這個(gè)Servlet稱(chēng)之為默認(rèn)的Sendet,它負(fù)責(zé)處理

所有找不到映射的請(qǐng)求路徑

五、Servlet的配置參數(shù)(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:代表了針對(duì)當(dāng)前Servlet的配置參數(shù)init-param中的配置參數(shù)

常用方法:

_StringgetlnitParameter(StringparamName):獲取指參數(shù)名稱(chēng)的取值

-EnumerationgetInitParameterNames():獲取所有的參數(shù)的名稱(chēng)

六、線(xiàn)程安全問(wèn)題

_SingleThreadMode是一個(gè)標(biāo)識(shí)接口(過(guò)時(shí)了)

_如果實(shí)現(xiàn)了該接口,可以在內(nèi)存中搞出多個(gè)Servlet實(shí)例為用戶(hù)服務(wù),或者為用戶(hù)服務(wù)的方

法進(jìn)行同步處理

_具體看實(shí)現(xiàn),Tomcat服務(wù)器采用的前者,盡量使用局部變量

第10頁(yè)共10頁(yè)

七、ServletContext對(duì)象

1.對(duì)象簡(jiǎn)介

一容器加載JavaWeb應(yīng)用時(shí),都會(huì)為之創(chuàng)建一個(gè)ServletContext對(duì)象,-個(gè)應(yīng)用只有一個(gè)

ServletContext對(duì)象

_ServletContext對(duì)象是一個(gè)域?qū)ο?/p>

_域?qū)ο笳f(shuō)明其內(nèi)維護(hù)了一個(gè)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.實(shí)現(xiàn)全局共享

一實(shí)現(xiàn)Servlet間共享數(shù)據(jù)

一獲取JavaWeb應(yīng)用的全局參數(shù)

<context-param>

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

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

</context-param>

3.實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)

請(qǐng)求重定向:客戶(hù)端行為

請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器行為

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

開(kāi)頭,此”尸就代表當(dāng)前的應(yīng)用day04

_RequestDispatcher.forward(request,response)

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

_ResourceBundle:

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

下使用

第11頁(yè)共11頁(yè)

_ServletContext:getRealPath(Stringpath)?>返回磁盤(pán)上的實(shí)際絕對(duì)路徑

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

_ClassLoader:

特點(diǎn):只能讀取類(lèi)路徑下的配置文件,且可以加載任何的資源

5.Servlet圖示

Servlet的調(diào)用過(guò)程和原理

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

加羲應(yīng)用時(shí),就合

i~~U加載應(yīng)用中的web.xml

:2:找到FEApp應(yīng)用04

T]

3:中)

U

4:畏索web,xml誰(shuí)的Matter必主體內(nèi)容()

TJ

5:加成遂類(lèi),并實(shí)例化:Class.forName.riewInstance。

6:調(diào)用mlt方法0

7:service方法0

Servtet^象踞例:4

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

以后就在胃內(nèi)存了.

當(dāng)應(yīng)用被卸羲,或者Tomcat停止了,de出。y被調(diào)用

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

第12頁(yè)共12頁(yè)

八、HttpServletResponse

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

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

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

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

方式二: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頁(yè)共13頁(yè)

2.以字符流輸出中文數(shù)據(jù)

PrintWriterout=response.getWriter();

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

設(shè)定編碼:

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

.不要忘記通知客戶(hù)端解碼碼表

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

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

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

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

3.response案例(Servlet作為默認(rèn)主頁(yè))

<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細(xì)節(jié)

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

.response中的對(duì)象內(nèi)部是有緩存的,所有的輸出代碼都是把對(duì)象寫(xiě)到了response對(duì)象中,

容器從response對(duì)象中取出寫(xiě)的數(shù)據(jù),然后組織成HTTP協(xié)議響應(yīng)的格式傳遞給客戶(hù)端

一容器會(huì)檢測(cè)response中的輸出流有沒(méi)有關(guān)閉,如果發(fā)現(xiàn)沒(méi)有關(guān)閉就會(huì)替你關(guān)閉

反射做框架用

九、HttpServletRequest

1.常用方法

獲取客戶(hù)機(jī)的請(qǐng)求頭:

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

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

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

獲得客戶(hù)機(jī)的請(qǐng)求參數(shù):

_getParameter(name):獲取單一的請(qǐng)求參數(shù)

第14頁(yè)共14頁(yè)

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

_getParameterNames():獲取所有的請(qǐng)求參數(shù)

_getParameterMap():做框架用

用戶(hù)的所有輸入都是Siring類(lèi)型的

-getRequestURL:返回客戶(hù)端發(fā)出請(qǐng)求時(shí)的完整URL

_getRequestURI:返回請(qǐng)求行111的資源部分

_getQueryString:返回請(qǐng)求行中的參數(shù)部分

_getRemoteAddr:返回發(fā)出請(qǐng)求的客戶(hù)機(jī)的IP地址

_getRemoteHost:返回發(fā)出請(qǐng)求的客戶(hù)機(jī)的完整主機(jī)名

_getRemotePort:返回客戶(hù)機(jī)所使用的網(wǎng)絡(luò)端口號(hào)

_getLocalAddr:返回WEB服務(wù)器的IP地址

_getLocalName:返回WEB服務(wù)器的主機(jī)名

_getMethod:得到客戶(hù)機(jī)的請(qǐng)求方式

2.獲取請(qǐng)求參數(shù)

_獲取一個(gè)參數(shù)

_獲取重名的請(qǐng)求參數(shù)

一使用DBUtils框架封裝數(shù)據(jù)到JavaBean中

_常用form表單數(shù)據(jù)的獲取

3.表單數(shù)據(jù)總結(jié)

_inputtype的類(lèi)型是radio或者是checkbox,如果用戶(hù)一個(gè)都沒(méi)有選,那么就不會(huì)向服務(wù)器

傳遞數(shù)據(jù),如果用戶(hù)選擇了,則把value的值傳遞給服務(wù)器

.checkbox作為一個(gè)開(kāi)關(guān)(比如婚否):如果用戶(hù)沒(méi)有選,什么都不傳,如果用戶(hù)選了,看

有沒(méi)有value屬性,如果有value,就傳遞給服務(wù)器value的值,沒(méi)有傳遞的是on

4.用戶(hù)輸入請(qǐng)求參數(shù)亂碼問(wèn)題

一客戶(hù)端提交的請(qǐng)求參數(shù),客戶(hù)端當(dāng)前使用什么編碼,就以什么編碼給你的程序傳遞數(shù)據(jù)

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

一程序中打印的亂碼問(wèn)題,程序不知道你傳遞的數(shù)據(jù)編碼方式:

request.setCharacterEncoding("UTF-8”通知服務(wù)器程序,客戶(hù)端提交的數(shù)據(jù)查詢(xún)的是UTF-8

碼表,只能解決POST請(qǐng)求提交的數(shù)據(jù)

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

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

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

第15頁(yè)共15頁(yè)

十、其它

l.ServletRequest對(duì)象

_ServletRequest對(duì)象是一個(gè)域?qū)ο?/p>

—內(nèi)部有一個(gè)M叩(String,O*ct>

voidsetAttribute(Stringname,Objectobj)

ObjectgetAttribute(Stringname)

voidremoveAttribute(Stringname)

2.請(qǐng)求重定向和轉(zhuǎn)發(fā)的區(qū)別

_請(qǐng)求重定向:瀏覽器行為(因?yàn)椴皇峭粋€(gè)request對(duì)象,所以無(wú)法傳setAttribute的值,

且因?yàn)槭菫g覽器行為,所以無(wú)法訪(fǎng)問(wèn)WEB-INF中的文件)

特點(diǎn):瀏覽器發(fā)出了2次請(qǐng)求,得到了2次響應(yīng),地址欄會(huì)變

一請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器行為(源組件和目標(biāo)組件共享reuqest和resopnse中的數(shù)據(jù))

特點(diǎn):瀏覽器發(fā)出了1次請(qǐng)求,得到了1次響應(yīng),地址欄不變

應(yīng)用:

一可以利用request的域?qū)ο蟮奶攸c(diǎn),由源組件向其中存放寫(xiě)數(shù)據(jù)

一可以讓用戶(hù)訪(fǎng)問(wèn)到存放在WEB-INF目錄中的目標(biāo)資源

3.RequestDispatcher

轉(zhuǎn)發(fā)(forward):源組件轉(zhuǎn)向目標(biāo)組件,由目標(biāo)組件顯示響應(yīng)結(jié)果(只有目標(biāo)的響應(yīng))

包含(include):源組件包含目標(biāo)組件,由源組件顯示響應(yīng)結(jié)果(會(huì)把目標(biāo)的響應(yīng)結(jié)果加上)

轉(zhuǎn)發(fā):源組件在任何頁(yè)面的輸出都無(wú)效,轉(zhuǎn)發(fā)前,容器會(huì)清空代sponse對(duì)象的緩存

包含:目標(biāo)組件的所有設(shè)置的頭無(wú)效,包含前,容器會(huì)清空目標(biāo)組件設(shè)置的響應(yīng)信息頭

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

上面2個(gè)都能得至!]RequestDispatcher對(duì)象

_ServletContext:path必須以“廣開(kāi)頭,代表當(dāng)前的應(yīng)用(代表絕對(duì)路徑)

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

5.各種URL路徑的寫(xiě)法

絕對(duì)路徑和相對(duì)路徑,建議用絕對(duì)路徑

一絕對(duì)路徑:/day05/

第16頁(yè)共16頁(yè)

原則:要不要加應(yīng)用名稱(chēng),就要看地址為誰(shuí)服務(wù)的。給服務(wù)器用的”/就代表了/dayO5,如果

是給客戶(hù)端用的,就要加上/dayO6

getRequestDispatcher(Stringurl):不用加

formaction:力口

ahref:力口

imgsrc:力口

linkhref:力口

scriptsrc:加

302+Location:力口

會(huì)話(huà)

一、會(huì)話(huà)技術(shù)概述及要解決的問(wèn)題

會(huì)話(huà):

用戶(hù)開(kāi)一個(gè)瀏覽器,點(diǎn)擊多個(gè)超鏈接,訪(fǎng)問(wèn)服務(wù)器多個(gè)web資源,然后關(guān)閉瀏覽器,整個(gè)

過(guò)程稱(chēng)之為一個(gè)會(huì)話(huà)

解決會(huì)話(huà)的二大技術(shù):

_Cookie:客戶(hù)端技術(shù)

程序把每個(gè)用戶(hù)的數(shù)據(jù)以cookie的形式寫(xiě)給用戶(hù)各自的瀏覽器,當(dāng)用戶(hù)使用瀏覽器再去訪(fǎng)

問(wèn)服務(wù)器中的web資源時(shí),就會(huì)帶著各自的數(shù)據(jù)去,這樣,web資源處理的就是用戶(hù)各自

的數(shù)據(jù)了

.Session:服務(wù)器端技術(shù)

服務(wù)器在運(yùn)行時(shí)可以為每一個(gè)用戶(hù)的瀏覽器創(chuàng)建一個(gè)其獨(dú)享的HttpSession對(duì)象,由于

session為用戶(hù)瀏覽器獨(dú)享,所以用戶(hù)在訪(fǎng)問(wèn)服務(wù)器的web資源時(shí),可以把各自的數(shù)據(jù)放在

各自的session中,當(dāng)用戶(hù)再去訪(fǎng)問(wèn)服務(wù)器中的其它web資源時(shí),其它web資源再?gòu)挠脩?hù)各

自的session中取出數(shù)據(jù)為用戶(hù)服務(wù)

二、Cookie

_Cookie中不能使用中文

_javax.servlet.http.Cookie:代表一個(gè)Cookie對(duì)象

1.Cookie的屬性

_name:必須的

_value:必須的

_comment:可選的(注釋?zhuān)?/p>

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

_maxAge:可選的(cookie的默認(rèn)生命周期就是一次會(huì)話(huà)期)把最大存活時(shí)間改為0,就是

代表要?jiǎng)h除該cookie

第17頁(yè)共17頁(yè)

_version:可選的

.secure:可選的(HTTPS)

_path:可選的,默認(rèn)path是寫(xiě)cookie的那個(gè)資源的訪(fǎng)問(wèn)路徑URI

向客戶(hù)端寫(xiě)cookie的資源訪(fǎng)問(wèn)地址是:http://localhost:8080/day06/servlet/CookieDemol

那么該cookie的默認(rèn)路徑是:/day06/servlet

/servlet/Sei*vletDemol:寫(xiě)的cookie4-/servlet+cname

訪(fǎng)問(wèn)地址:/ServIetDemo2:不帶

訪(fǎng)問(wèn)地址:i〔/scrvlet/ServletDemo3:帶

又一個(gè)Cookie,它的信息:/day06+cname

訪(fǎng)問(wèn)地址:/ServletDemo2:不帶

訪(fǎng)問(wèn)地址:/day06/ServletDemo2:帶

訪(fǎng)問(wèn)地址:/day06/servIet/ServletDemo2:帶

訪(fǎng)問(wèn)地址:/day06戶(hù):帶

2.Cookie的使用

一服務(wù)器如何向客戶(hù)端寫(xiě)Cookie?比如:

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

HttpServletResponse.addCookie(c);

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

一用盡量少的Cookie保存盡量少的數(shù)據(jù)(關(guān)鍵數(shù)據(jù))

一一個(gè)網(wǎng)站只能向客戶(hù)端寫(xiě)20個(gè)Cookie,客戶(hù)端最多存放300個(gè)Cookie,且每一個(gè)Cookie

的大小不能超過(guò)4KB

一服務(wù)器如何得到從客戶(hù)端傳來(lái)的Cookie:

Cookie[]cs=HttpServletRequest.getCookies();

_如何唯一確定?個(gè)Cookie:domain+path+name

三、Session

1.HttpSession的簡(jiǎn)介

_HttpSession也是一個(gè)域?qū)ο?/p>

ObjectgetAttribute(Stringname)

voidsetAttribute(Stringname,Objectobj)

voidremoveAttribute(Stringname)

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

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

_HttpSession().getId():服務(wù)器會(huì)為每一個(gè)session對(duì)象分配一個(gè)隨機(jī)的唯一的ID

.Session技術(shù)其實(shí)上就是借助了cookie技術(shù)

服務(wù)器寫(xiě)的這個(gè)cookie的名稱(chēng)為“JSESSIONID”,取值為session對(duì)象的id,path為當(dāng)前應(yīng)用,

默認(rèn)生命周期為一次會(huì)話(huà)

第18頁(yè)共18頁(yè)

內(nèi)存中的sesssion對(duì)象默認(rèn)超過(guò)30分鐘后自動(dòng)銷(xiāo)毀

2.Session的使用

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

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

如果為false,則只會(huì)查詢(xún),查不到返回null

」ongHttpSession.getLastAccessedTime():獲取最后一次訪(fǎng)問(wèn)該session對(duì)象的時(shí)間

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

3.防止表單的重復(fù)提交

用Base64編碼

最?。?0000000整數(shù)0

最大:00111111整數(shù)63

0-63共64個(gè),因此成為Base64(其實(shí)是一個(gè)基礎(chǔ)碼表)

4.客戶(hù)端禁用Cookie后的會(huì)話(huà)數(shù)據(jù)保存問(wèn)題

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

具體編碼:URL重寫(xiě),對(duì)應(yīng)用中的所有地址都重寫(xiě)

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

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

HttpServletResponse.encodeURL(Stringpath):發(fā)現(xiàn)客戶(hù)端沒(méi)有禁止Cookie,就不重寫(xiě)了

HttpServletResponse.encodeRedirectURL(Stringurl):

對(duì)于使用http:〃localhost的訪(fǎng)問(wèn)應(yīng)用,即使客戶(hù)端禁用了Cookie,禁用也無(wú)效

5.E會(huì)在什么情況下開(kāi)始一個(gè)新的會(huì)話(huà)

JE7(含以下版本):開(kāi)啟一個(gè)新的瀏覽器進(jìn)程就是一個(gè)新的會(huì)話(huà)

_IE8(含以上版本):開(kāi)戶(hù)多個(gè)瀏覽器進(jìn)程,都是同一個(gè)會(huì)話(huà)。若想開(kāi)啟新的不同的會(huì)話(huà),

請(qǐng)使用“文件”/“新建會(huì)話(huà)”

一開(kāi)啟新的Tab頁(yè)面,與之前的窗口是同一個(gè)會(huì)話(huà)

一從一個(gè)頁(yè)面上開(kāi)啟的一個(gè)新的頁(yè)面,也屬于同一個(gè)會(huì)話(huà)

6.HttpSession對(duì)象的狀態(tài)轉(zhuǎn)換

配置Sesion對(duì)象的默認(rèn)有效期:web.xml

<session-config>

第19頁(yè)共19頁(yè)

<session-timeout>l</session-timeout>單位為分鐘,至少1分鐘后銷(xiāo)毀

</session-config>

7.Session圖示

HTTPSession原理圖

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

被持久化的對(duì)象所在的一個(gè)類(lèi)?定要實(shí)現(xiàn)個(gè)接口Serializable(序列)

1、一個(gè)session對(duì)象長(zhǎng)時(shí)間沒(méi)有用了

2、當(dāng)前應(yīng)用I新啟動(dòng)了

鈍化、擱貿(mào)

持久化

1、session對(duì)象又有人訪(fǎng)問(wèn)了

2、當(dāng)前應(yīng)用啟動(dòng)成功了

活化、激活

JSP

一、JSP的作用

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

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

第20頁(yè)共20頁(yè)

二JSP語(yǔ)法

1.模板元素

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

_會(huì)出現(xiàn)在對(duì)應(yīng)的Servlet的service方法中,由JspWriter的out進(jìn)行write

2.JSP腳本表達(dá)式

_語(yǔ)法:<%=表達(dá)式%〉注意:表達(dá)式后面不能加上分號(hào)

_作用:輸出表達(dá)式的結(jié)果到頁(yè)面上

3.JSP中的腳本片段

_語(yǔ)法:<%

Java語(yǔ)句;

%>

_特點(diǎn):此部分代碼會(huì)原分不動(dòng)的出現(xiàn)在JSP對(duì)應(yīng)Servlet的service方法中

實(shí)際開(kāi)發(fā)中,JSP中不能出現(xiàn)一行Java腳本片段和Java腳本表達(dá)式,多行也不行

4.JSP聲明

_語(yǔ)法:<%!

聲明語(yǔ)句;

%>

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

5.JSP注釋

_語(yǔ)法:<%-這是注釋-%>

_作用:注釋掉的腳本,不會(huì)被翻譯,面頁(yè)面注釋會(huì)先翻譯出來(lái),然后在頁(yè)面上注釋掉

三、JSP指令

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

_指令的語(yǔ)法:<%@指令名稱(chēng)屬性1="值1”。。。。。。%>

第21頁(yè)共21頁(yè)

1.Page指令

屬性:

Janguage:指示JSP中使用的腳本語(yǔ)言。默認(rèn)為java,目前也只支持java

.extends:指示JSP對(duì)應(yīng)的Servlet的爸爸,請(qǐng)不要修改

.import:導(dǎo)入JSP中的Java腳本中使用到的java包或類(lèi),作用等同于java類(lèi)中的import,

jsp引擎會(huì)自動(dòng)引入以下包:

javax.servlet.*

javax.servlet.http.*

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

_session:JSP頁(yè)面中是否生成HttpSession對(duì)象,默認(rèn)為true,可選值truelfalse

_buffer:JSP輸出流JspWriter的緩存,默認(rèn)值8KB,可選nonelyoursizeKB

_autoFlush:JSP輸出流滿(mǎn)了,自動(dòng)刷新

JsThreadSaft:默認(rèn)值是true,可選值truelfalse。指示JSP對(duì)應(yīng)的Servlet是否實(shí)現(xiàn)

SingleThreadModel,取值為false時(shí)才會(huì)實(shí)現(xiàn)該接口

_errorPage:指示當(dāng)前的JSP頁(yè)面出錯(cuò)后,轉(zhuǎn)向的頁(yè)面,服務(wù)器轉(zhuǎn)發(fā)技術(shù),路徑如果以“尸開(kāi)

頭表示絕對(duì)路徑

配置全局錯(cuò)誤提示頁(yè)面:(不是服務(wù)器轉(zhuǎn)發(fā)技術(shù))

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:指示頁(yè)面中是否生成exception對(duì)象,默認(rèn)值false

_contentType:指示JSP其余內(nèi)容的MIME類(lèi)型,等同response.setContentType

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

_pageEncoding:JSP引擎在翻譯JSP成為Servlet時(shí)查詢(xún)的碼表

其它功能:page可以沒(méi)有contentType,只有pageEncoding等同于contentType+

pageEncoding

_isELIgnored:指示是否忽略EL表達(dá)式,默認(rèn)值false,不忽略,如果為true,則忽略表達(dá)

式,即把表達(dá)式當(dāng)做普通HTML文本對(duì)待

2.Include指令

_作用:把2個(gè)頁(yè)面的輸出合并

_屬性:file〉要合并的頁(yè)面的路徑,路徑如果以表示絕對(duì)路徑

一靜態(tài)包含:使用指令進(jìn)行的包含,能用靜的不用動(dòng)的

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

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

第22頁(yè)共22頁(yè)

3.taglib指令

_作用:引入外部的標(biāo)簽

_屬性:

Uri:外部標(biāo)簽所在的名稱(chēng)空間

prefix:前綴

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

四、JSP動(dòng)作元素

_jsp:include

」sp:forward->請(qǐng)求轉(zhuǎn)發(fā)(page以,7”表示絕對(duì)路徑)

」sp:param->傳遞請(qǐng)求參數(shù)

name:參數(shù)名

value:參數(shù)取值

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

變量名:對(duì)應(yīng)的類(lèi)型

request:HttpServletRequest

response:HttpServletResponse

session:HttpSession(不一定有,page指令的session=false時(shí)就沒(méi)有)

application:ServletContext

config:ServletConfig

page:this(當(dāng)前頁(yè)面對(duì)應(yīng)的Servlet對(duì)象本身)

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

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

pageContext:javax.servlet.jsp.PageContext

作百:

1.獲取其它8大隱式對(duì)象

2.本身是一個(gè)域?qū)ο?,而且還能操作其它3個(gè)域?qū)ο?ServletContext、HttpSession>

ServletRequest)

操作本身域?qū)ο蟮姆椒ǎ喉?yè)面范圍

_voidsetAttribute(Stringname,Objectobj)

.ObjectgetAttribute(Stringname)

_voidremoveAttribute(Stringname)

操作所有域?qū)ο蟮姆椒ǎ簠?shù)scope是一個(gè)整數(shù),PageContext有對(duì)應(yīng)的常量

PAGE_SCOPE、REQUEST_SCOPE>SESSION_SCOPE>APPLICATION_SCOPE

_voidsetAttribute(Stringname,Objectobj,intscope)

.ObjectgetAttribute(Stringname,intscope)

_voidremoveAttribute(Stringnamejntscope)

又一個(gè)很重要的方法:

第23頁(yè)共23頁(yè)

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

3.提供了轉(zhuǎn)發(fā)和包含的方法調(diào)用

voidforward(Stringpath)

voidinclude(Stringpath)

六、JSP四大域?qū)ο?/p>

JSP的內(nèi)置對(duì)象:

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

request:HttpServletRequest(保持?jǐn)?shù)據(jù)必須在轉(zhuǎn)發(fā)的一瞬間,數(shù)據(jù)一次性的)

session:HttpSession一次會(huì)話(huà)過(guò)程中都需要用到的數(shù)據(jù),比如登陸信息

application:ServletContext應(yīng)用級(jí)別的,同步

七、JavaBean的概念

一類(lèi)一般是public的

—必須有默認(rèn)的構(gòu)造方法

一字段都是私有的(首字第小寫(xiě),從第2個(gè)單詞開(kāi)始首字母大寫(xiě))

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

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

_一般都實(shí)現(xiàn)java.io.Serializable

—在JavaEE開(kāi)發(fā)中,一般用JavaBean來(lái)封閉數(shù)據(jù)

八、JSP中操作JavaBean的動(dòng)作元素

都與域?qū)ο笥嘘P(guān)

_Jsp:useBean

作用:

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

范圍中,名稱(chēng)為id

屬性:

id:域中的名稱(chēng)

class:對(duì)象的類(lèi)型

scope:域范圍,默認(rèn)為page,可選值pagelrequestlsessionlapplication

_jsp:setProperty

作用:

設(shè)置JavaBean的屬性,調(diào)用JavaBean的setter方法,填充請(qǐng)求參數(shù)

屬性:

name:useBean中id指定的對(duì)象

property:屬性名稱(chēng),還可以填充請(qǐng)求參數(shù),還可以使用通配符*

value:設(shè)置的值,還可以自動(dòng)進(jìn)行類(lèi)型的轉(zhuǎn)換(僅限基本數(shù)據(jù)類(lèi)型),支持JSP表達(dá)式

第24頁(yè)共24頁(yè)

param:請(qǐng)求參數(shù)的名稱(chēng)

_Jsp:getProperty

作用:

輸出JavaBean的屬性到頁(yè)面上

屬性:

name:useBean中id指定的對(duì)象

property:屬性名稱(chēng)getter方法

如果獲取的某個(gè)屬性的值是null,則頁(yè)面上就會(huì)顯示null

設(shè)計(jì)模型

模型一:JSP+JavaBean

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

M:ModelJavaBean

V:ViewJSP

C:ControllerServlet

EL表達(dá)式

一、EL表達(dá)式簡(jiǎn)述

_用于替換JSP中的Java表達(dá)式

_表達(dá)式分為:Java表達(dá)式或EL表達(dá)式

_EL表達(dá)式的基本語(yǔ)法形式:${EL表達(dá)式}

_EL表達(dá)式中不會(huì)出現(xiàn)空指針異常

第25頁(yè)共25頁(yè)

二、四大作用

1.獲取并顯示數(shù)據(jù)

_EL只能獲取域?qū)ο笾械臄?shù)據(jù)

_.運(yùn)算符,可取對(duì)象的屬性,調(diào)用getter方法

」]運(yùn)算符,和.運(yùn)算符一樣,口能做的,.不一定能做,但.能做的,口也都能做

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

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

一取Map中的元素:.key語(yǔ)法

2.執(zhí)行簡(jiǎn)單的數(shù)學(xué)或者邏輯運(yùn)算

empty運(yùn)算符:判斷一個(gè)對(duì)象是否為null或者是對(duì)于集合類(lèi)型的,如果集合對(duì)象存在,

其中沒(méi)有任何元素,也返回true

三元運(yùn)算符:邏輯表達(dá)式?真時(shí)執(zhí)行:假時(shí)執(zhí)行

EL表達(dá)式不支持字符串的連接操作

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

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

要用以下的2個(gè)fn,就必須先把上面這個(gè)taglib導(dǎo)入,否則報(bào)錯(cuò)

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

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

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

除pageContext代表對(duì)象本身之外,其他10個(gè)內(nèi)置對(duì)象都代表的是M叩

_pageContext:代表javax.servlet.jsp.PageContext對(duì)象本身,與JSP內(nèi)置對(duì)象一樣

_pageScope:取page范圍內(nèi)的域中的數(shù)據(jù),它是一個(gè)M叩

_requestScope:取request范圍內(nèi)的域中的數(shù)據(jù),它是一個(gè)Map

_sessionScope:取session范圍內(nèi)的域中的數(shù)據(jù),它是一個(gè)Map

_applicationScope:取application范圍內(nèi)的域中的數(shù)據(jù),它是一個(gè)Map

_param:取一個(gè)請(qǐng)求參數(shù)的值,它是一個(gè)M叩(key:請(qǐng)求參數(shù)名,value:請(qǐng)求參數(shù)值)

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

_paramValues:取重名的請(qǐng)求參數(shù)的值,它是一個(gè)Map(key:請(qǐng)求參數(shù)名,value:請(qǐng)求參

數(shù)值數(shù)組String。)

_header:取一個(gè)請(qǐng)求頭的值,它是一個(gè)Map(key:請(qǐng)求頭名稱(chēng),value:頭值)

_headerValues:取重名的請(qǐng)求頭的值,它是一個(gè)M叩(key:請(qǐng)求頭名稱(chēng),value:頭值數(shù)組

名稱(chēng)String[])

第26頁(yè)共26頁(yè)

_cookie:代表客戶(hù)端提交過(guò)來(lái)的Cookie,它是一個(gè)Map(key:cookie的name,value:cookie

對(duì)象本身)

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

數(shù)名,value:參數(shù)值)

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

編寫(xiě)步驟就是自定義標(biāo)簽步驟

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

publicclassStringFunction{

publicstaticStringtoUpperCase(Stringstr){

returnstr.toUpperCase();

)

)

在WEB-INF目錄下建立一個(gè)名為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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論