版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 組裝衣柜預(yù)售合同范例
- 照看寵物服務(wù)合同范例
- 拆遷補(bǔ)償合同范例
- 網(wǎng)簽車(chē)位合同范例
- 2025債權(quán)擔(dān)保合同
- 美容院內(nèi)部人員合同范例
- 電梯合股合同范例
- 業(yè)務(wù)經(jīng)營(yíng)合同范例
- 水電箱安裝工程合同范例
- 中科銳星扶貧柜合同范例
- 2024年中國(guó)主題公園競(jìng)爭(zhēng)力評(píng)價(jià)報(bào)告-中國(guó)主題公園研究院
- 2024油氣管道無(wú)人機(jī)巡檢作業(yè)標(biāo)準(zhǔn)
- 廣東省深圳市寶安區(qū)多校2024-2025學(xué)年九年級(jí)上學(xué)期期中歷史試題
- 重大(2023)版信息科技五年級(jí)上冊(cè)教學(xué)設(shè)計(jì)
- 工業(yè)循環(huán)水處理行業(yè)市場(chǎng)調(diào)研分析報(bào)告
- 廣州市海珠區(qū)六中鷺翔杯物理體驗(yàn)卷
- 標(biāo)準(zhǔn)查新報(bào)告
- 2025公司集團(tuán)蛇年新春年會(huì)游園(靈蛇舞動(dòng)共創(chuàng)輝煌主題)活動(dòng)策劃方案-31P
- 《計(jì)算機(jī)視覺(jué)》教學(xué)課件-第08章1-神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)1
- 人教版2024年小學(xué)二年級(jí)上學(xué)期語(yǔ)文期末考試往年真題
- 2024湖南省電子信息產(chǎn)業(yè)研究院招聘3人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評(píng)論
0/150
提交評(píng)論