




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本章目標(biāo)掌握J(rèn)SP基本語法掌握J(rèn)SP指令和動作掌握J(rèn)SP內(nèi)置對象的使用了解JSP和Servlet的關(guān)系能夠在JSP中使用JDBC訪問數(shù)據(jù)庫運(yùn)用JSP技術(shù)實(shí)現(xiàn)綜合案例5.1JSP概述JSP(JavaServerPages)是指:在HTML中嵌入Java腳本代碼由應(yīng)用服務(wù)器中的JSP引擎來編譯和執(zhí)行嵌入的Java腳本代碼然后將生成的整個頁面信息返回給客戶端JSP頁面數(shù)據(jù)庫服務(wù)器應(yīng)用服務(wù)器編譯、執(zhí)行客戶端嵌入Java腳本1234返回頁面信息為什么需要JSP為什么需要基于B/S技術(shù)的動態(tài)網(wǎng)頁?B/S技術(shù)的特點(diǎn)是什么?使用動態(tài)網(wǎng)頁,可以動態(tài)輸出網(wǎng)頁內(nèi)容、同用戶進(jìn)行交互、對網(wǎng)頁內(nèi)容進(jìn)行在線更新應(yīng)用服務(wù)器IEIE解釋執(zhí)行HTML文件從服務(wù)器端檢索到的信息返回響應(yīng)客戶端的請求信息發(fā)送請求訪問數(shù)據(jù)庫返回結(jié)果運(yùn)行JSP等服務(wù)器端程序1用戶輸入234數(shù)據(jù)庫服務(wù)器3執(zhí)行2翻譯編譯1請求響應(yīng)JSP執(zhí)行過程Web容器處理JSP文件請求需要經(jīng)過3個階段:翻譯階段編譯階段執(zhí)行階段應(yīng)用服務(wù)器客戶端JSP文件.java.class執(zhí)行第二次請求響應(yīng)JSP執(zhí)行過程第一次請求之后,Web容器可以重用已經(jīng)編譯好的字節(jié)碼文件應(yīng)用服務(wù)器客戶端.class注意:如果對JSP文件進(jìn)行了修改,Web容器會重新對JSP文件進(jìn)行翻譯和編譯演示示例:JSP頁面響應(yīng)速度編寫第一個JSP程序如何在瀏覽器上動態(tài)輸出當(dāng)前日期?<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%><html><head><title>第一個JSP程序</title></head><body>
你好:<br>
現(xiàn)在時間是:<%=newDate()%><br></body></html>顯然,無法通過靜態(tài)HTML完成這個效果,試一試JSP,看看是否可行演示示例:輸出當(dāng)前日期5.2JSP編程基礎(chǔ)JSP基本語法JSP頁面的元素包括:靜態(tài)內(nèi)容指令表達(dá)式小腳本<%Java代碼%><%=Java表達(dá)式%>HTML靜態(tài)文本以“<%@”開始,以“%>”結(jié)束。比如:<%@includefile="
Filename"%>聲明<%!方法%>注釋<!--這是注釋,但客戶端可以查看到--><%--這也是注釋,但客戶端不能查看到--%>JSP中的注釋合理、詳細(xì)的注釋有利于代碼后期的維護(hù)和閱讀在JSP文件的編寫過程中,共有三種注釋方法:HTML的注釋:<!--html注釋-->JSP注釋:<%--JSP注釋--%>在JSP腳本中注釋:<%//單行注釋%><%/*多行注釋*/%>缺點(diǎn):不安全,加大網(wǎng)絡(luò)傳輸負(fù)擔(dān)小腳本與表達(dá)式在JSP頁面中計算兩個數(shù)的和,將結(jié)果輸出顯示<%@pagelanguage="java"import="java.util.*,java.text.*"contentType="text/html;charset=GBK"%><html> <head><title>計算求和</title></head> <body> 兩個數(shù)的求和結(jié)果為: <% intnumA=4,numB=5; intresult=numA+numB; %> <%=strCurrentTime%> </body></html>指令小腳本表達(dá)式什么是聲明聲明就是在JSP頁面中定義Java的變量和方法語法:<%!Java代碼%><%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%><html>…….<body><%inta=1,b=2,sum=0;
sum=xx+add(a,b);out.print(sum);%><%!intxx=2;
intadd(intx,inty){returnx+y;}%></body></html>方法聲明后可在頁面中多處調(diào)用5.3JSP指令page指令通過設(shè)置內(nèi)部的多個屬性來定義整個頁面的屬性語法:<%@page屬性1="屬性值"屬性2="屬性值1,屬性值2"…屬性n="屬性值n"%>page指令常用屬性屬性描述默認(rèn)值language指定JSP頁面使用的腳本語言javaimport通過該屬性來引用腳本語言中使用到的類文件無contentType用來指定JSP頁面所采用的編碼方式text/html,ISO-8859-15.3JSP指令include指令用于將多個JSP頁面(或者HTML、XML文件)組合起來,成為一個“完整”的JSP頁面語法:<%@includefile="FileName"%><%@pagecontentType="text/html;charset=gb2312"%><html>……<body><!--header--><%@includefile="header.jsp"%>……<%@includefile="foot.jsp"%></body></html>5.4JSP動作所謂JSP動作(JSPAction),是在JSP中利用XML語法格式的標(biāo)記來控制Servlet容器的行為。利用JSP動作可以動態(tài)地插入文件、調(diào)用JavaBean組件、把用戶請求重定向到另外的頁面、為Java插件生成HTML代碼等。JSP動作包括:<jsp:include>:將其他頁面的輸出包含進(jìn)來。<jsp:useBean>::獲得一個JavaBean實(shí)例。<jsp:setProperty>:設(shè)置JavaBean的屬性。<jsp:getProperty>:獲得某個JavaBean的屬性。<jsp:forward>:把請求轉(zhuǎn)到一個新的頁面。<jsp:plugin>:根據(jù)瀏覽器類型,為Java插件生成OBJECT或EMBED標(biāo)記。5.4JSP動作include動作<jsp:includepage="includeFile"/>
這是一個XML語法結(jié)構(gòu),所以需要將這個標(biāo)記結(jié)束。它的另外一種方式如下:<jsp:includepage="includeFile"></jsp:include>注意:和include指令不同的是,include動作將會在客戶端對JSP文件發(fā)出請求的時候?qū)?yīng)包含文件的輸出內(nèi)容包含進(jìn)來,這是include指令和include動作最大的不同。而且,它總是會檢查被包含文件的變化,因此,不會再產(chǎn)生像include指令一樣的主從文件不同步更新問題。5.4JSP動作forward動作
在JSP中,可以使用forward動作來實(shí)現(xiàn)程序的轉(zhuǎn)向,例如,從begin.jsp轉(zhuǎn)向到forward1.jsp可以在begin.jsp中使用forward動作:<jsp:forwardpage="forward1.jsp"/>
這樣,當(dāng)在begin.jsp中執(zhí)行到forward動作的時候,它將會自動跳轉(zhuǎn)到forward1.jsp。
另外,和include動作類似,forward動作也可以有子元素jsp:param,用于指定一個參數(shù):<jsp:forwardpage="desFile"><jsp:paramname="paramName"value="paramValue"/></jsp:forward>5.5JSP內(nèi)置對象JSP內(nèi)置對象是Web容器創(chuàng)建的一組對象JSP內(nèi)置對象的名稱是JSP的保留字JSP內(nèi)置對象是可以直接在JSP頁面使用的對象,無需使用“new”獲取實(shí)例<%
request.setCharacterEncoding("GBK"); StringtitleName=
request.getParameter("titlename");%>沒有出現(xiàn)new關(guān)鍵字,但卻可以使用request對象JSP內(nèi)置對象常用的JSP內(nèi)置對象常用內(nèi)置對象requestresponseoutapplicationsessionOut內(nèi)置對象是一個緩沖的輸出流,用來給客戶端返回信息。javax.servlet.jsp.JspWriter的一個實(shí)例例:<%@pagecontentType="text/html;charset=gb2312"%><HTML><HEAD><TITLE>out用法</TITLE></HEAD><BODY><%out.println("現(xiàn)在時間是:"+newjava.util.Date());%></BODY></HTML>JSP內(nèi)置對象--outJSP內(nèi)置對象--out常用方法:println():向客戶端輸出各種類型數(shù)據(jù)newLine():輸出一個換行符close():關(guān)閉輸出流flush():輸出緩沖區(qū)里的數(shù)據(jù)clearBuffer():清除緩沖區(qū)里的數(shù)據(jù),同時把數(shù)據(jù)輸出到客戶端clear():清除緩沖區(qū)里的數(shù)據(jù),但不把數(shù)據(jù)輸出到客戶端getBufferSize():返回緩沖區(qū)的大小JSP內(nèi)置對象requestrequest對象主要用于處理客戶端請求JSP頁面request對象客戶端請求請求信息JSP內(nèi)置對象request方法名稱
說明StringgetParameter(Stringname)根據(jù)頁面表單組件名稱獲取頁面提交數(shù)據(jù)String[]getParameterValues(Stringname)獲取一個頁面表單組件對應(yīng)多個值時的用戶的請求數(shù)據(jù)voidsetCharacterEncoding(Stringcharset)指定每個請求的編碼,在調(diào)用getParameter()之前進(jìn)行設(shè)定,可以解決中文亂碼問題StringgetRemoterAddr()返回提交請求的客戶機(jī)的IP地址request對象常用方法JSP內(nèi)置對象responseresponse對象用于響應(yīng)客戶請求并向客戶端輸出信息response對象常用方法voidsendRedirect(Stringlocation):將請求重新定位到一個不同的URL,即頁面重定向JSP頁面response對象客戶端響應(yīng)從服務(wù)器中檢索的信息存儲信息,以在響應(yīng)客戶端請求時發(fā)送此信息<formname="form1"method=postaction="control.jsp">用戶名:<inputtype="text"name="userName">密碼:<inputtype="password"name="pwd"><inputtype="submit"value="登錄"><form>JSP內(nèi)置對象response根據(jù)業(yè)務(wù)邏輯實(shí)現(xiàn)頁面跳轉(zhuǎn)input.jsp客戶端重新建立鏈接<%request.setCharacterEncoding("GBK");Stringname=request.getParameter("userName");Stringpwd=request.getParameter("pwd");if(name.equals("sa")&&pwd.equals("sa")) response.sendRedirect("welcome.jsp");%>跳轉(zhuǎn)至歡迎頁面control.jspJSP內(nèi)置對象response頁面實(shí)現(xiàn)跳轉(zhuǎn)了,請求的信息是否也一起轉(zhuǎn)移呢?演示示例:頁面跳轉(zhuǎn)后獲取請求信息那么如何才能實(shí)現(xiàn)頁面跳轉(zhuǎn)后,請求信息不丟失呢?使用轉(zhuǎn)發(fā)取代重定向?qū)崿F(xiàn)頁面跳轉(zhuǎn)頁面的轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)的作用:在多個頁面交互過程中實(shí)現(xiàn)請求數(shù)據(jù)的共享轉(zhuǎn)發(fā)的實(shí)現(xiàn):RequestDispatcher對象forward()方法<%RequestDispatcherrd=request.getRequestDispatcher("welcome.jsp");rd.forward(request,response);%>將當(dāng)前接收的用戶請求,發(fā)送給服務(wù)器的其他資源使用演示示例:頁面跳轉(zhuǎn)后獲取請求信息轉(zhuǎn)發(fā)與重定向的比較轉(zhuǎn)發(fā)是在服務(wù)器端發(fā)揮作用,通過forward方法將提交信息在多個頁面間進(jìn)行傳遞。轉(zhuǎn)發(fā)是在服務(wù)器內(nèi)部控制權(quán)的轉(zhuǎn)移,客戶端瀏覽器的地址欄不會顯示出轉(zhuǎn)向后的地址重定向是在客戶端發(fā)揮作用,通過請求新的地址實(shí)現(xiàn)頁面轉(zhuǎn)向重定向是通過瀏覽器重新請求地址,在地址欄中可以顯示轉(zhuǎn)向后的地址JSP內(nèi)置對象sessionsession對象用來存儲有關(guān)用戶會話的所有信息session對象常用方法:類型方法名稱說明voidsetAttribute(Stringkey,Objectvalue)以key/value的形式保存對象值ObjectgetAttribute(Stringkey)通過key獲取對象值intgetMaxInactiveInterval()獲取session的有效非活動時間,以秒為單位StringgetId()獲取session對象的編號voidinvalidate()設(shè)置session對象失效JSP內(nèi)置對象-applicationapplication對象是一個對web應(yīng)用有效的全局變量常用方法:getAttribute()/setAttribute()log()例5-12:application的log()方法應(yīng)用源文件:appLog.jsp<%@pagepageEncoding="gb2312"%><html><head><title>保存日志</title></head><body><%StringclientIp=request.getRemoteAddr();application.log("訪問本網(wǎng)站的客戶IP為:"+clientIp);%>
客戶IP已經(jīng)保存到日志中
</body></html>exception對象exception對象是Throwable的實(shí)例,表示的是JSP的異常信息如果要使用它,必須將對應(yīng)的JSP的page指令的isErrorPage屬性設(shè)置成truepageContext對象是PageContext類型的對象可以使用這個對象來管理其他的隱含對象JSP內(nèi)置對象的范圍對象的范圍范圍決定了JSP是否可以進(jìn)行對象訪問范圍的分類名稱說明page范圍在一個頁面范圍內(nèi)有效,通過pageContext對象訪問該范圍內(nèi)的對象request范圍在一個服務(wù)器請求范圍內(nèi)有效,與客戶端請求綁定一起session范圍在一次會話范圍內(nèi)容有效,在會話期間與session綁定的對象皆屬于該范圍application范圍在一個應(yīng)用服務(wù)器范圍內(nèi)有效,當(dāng)應(yīng)用服務(wù)啟動后即創(chuàng)建該對象,并向所有用戶所共享演示示例:對象范圍的測試5.6JSP與ServletJSP和Servlet的關(guān)系5.6JSP與ServletJSP和Servlet的交互
1、JSP跳轉(zhuǎn)到Servlet
<jsp:forwardpage=”/Servlet1”/>
2、Servlet跳轉(zhuǎn)到JSP
forward()方法
sendRedirect()方法5.7在JSP中使用JDBC訪問數(shù)據(jù)庫例5-14:在JSP中顯示Students表中所有記錄(1)配置JDBC數(shù)據(jù)庫開發(fā)環(huán)境:把JDBC數(shù)據(jù)庫驅(qū)動程序拷貝到項目的WebRoot/WEB-INF/lib目錄下。(2)創(chuàng)建數(shù)據(jù)庫連接類:在項目的src目錄下創(chuàng)建包:com.csmy.db,在com.csmy.db包中創(chuàng)建數(shù)據(jù)庫連接類:Dbconn.。Dbconn類代碼請參考第三章的例3-1(把例3-1的Dbconn類中的代碼全部拷貝過來就可以了)。(3)創(chuàng)建數(shù)據(jù)庫訪問類:在com.csmy.db包中創(chuàng)建數(shù)據(jù)庫訪問類Dao,并在該類中添加查詢所有學(xué)生信息的方法GetAllStustents()(4)創(chuàng)建數(shù)據(jù)瀏覽頁面Students.jsp(5)運(yùn)行:發(fā)布項目。在瀏覽器中輸入::8080/JspTest/Students.jsp。下圖是Students.jsp運(yùn)行結(jié)果。補(bǔ)充:Web程序的調(diào)試與排錯在運(yùn)行Web程序時,常犯的一些錯誤有:未啟動Tomcat服務(wù),或者沒有在預(yù)期的端口中啟動Tomcat服務(wù)未部署Web應(yīng)用,就試圖運(yùn)行Web程序運(yùn)行時,URL輸入錯誤存放文件的目錄無法對外引用,如:文件放入了WEB-INF、META-INF等文件夾錯誤1:未啟動Tomcat排除錯誤:啟動Tomcat服務(wù)如果控制臺上顯示Tomcat服務(wù)已啟動,觀察端口號是否與預(yù)期端口號一致,按照實(shí)際端口號重新運(yùn)行錯誤現(xiàn)象排錯方法:檢查Tomcat服務(wù)能否正確運(yùn)行123錯誤2:未部署Web應(yīng)用排除錯誤:部署Web應(yīng)用排錯方法:檢查Web應(yīng)用是否正確部署尚未部署錯誤現(xiàn)象123錯誤3:URL輸入錯誤排除錯誤:使用正確的URL錯誤現(xiàn)象排錯方法:檢查URLhttp://localhost:8080/news/index.html文件名稱與路徑要寫對協(xié)議主機(jī)IP地址123錯誤4:目錄不能被引用排除錯誤:把index.html文件拖至WebRoot文件夾下錯誤現(xiàn)象排錯方法:檢查文件的存放位置META-INF,WEB-INF文件夾下的內(nèi)容無法對外發(fā)布1235.8實(shí)用案例-導(dǎo)出電子表格將數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出到電子表中5.8實(shí)用案例-分頁顯示分頁顯示在JSP中執(zhí)行一條SQL語句時,可能返回多條記錄,如果將所有的記錄一次顯示在同一頁面,不僅效率低而且不易查閱,通常采用分頁顯示來解決這個問題。通常而言,可以采用兩種策略來實(shí)現(xiàn)數(shù)據(jù)瀏覽的分頁:基于緩存和基于查詢。1.基于緩存的分頁策略
基于緩存(Cache-Based):這種方式一次性的將所有的記錄取出來放到session或者其他的緩存機(jī)制中。這種方式的優(yōu)點(diǎn)是:除了第一頁外,后續(xù)的頁面都能夠很快訪問到需要的數(shù)據(jù)。缺點(diǎn)是:第一頁顯示的時候可能很慢,因為需要等待取出所有的數(shù)據(jù),而如果數(shù)據(jù)量比較大的話,比較慢。還有一個缺點(diǎn)是因為數(shù)據(jù)取出來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋合同協(xié)議書封面圖片
- 服裝官方合作合同協(xié)議書
- 2025雙邊合同委托書模板
- 2025鋼筋混凝土結(jié)構(gòu)施工分包合同書
- 農(nóng)村飲水合同協(xié)議書
- 用工合同及股權(quán)協(xié)議書
- 網(wǎng)絡(luò)技術(shù)教學(xué)中的交互性提升及試題及答案
- 2025重慶市涪陵區(qū)百勝鎮(zhèn)衛(wèi)生院百勝場坪施工合同
- 保潔合同延期付款協(xié)議書
- 答題技巧與策略分享試題及答案
- 糧食倉儲監(jiān)管管理制度
- 甄嬛傳完整分
- 非常規(guī)油氣藏地質(zhì)特征研究
- 高端礦泉水項目融資計劃書
- 課程設(shè)計列車變頻空挪用直流電源系統(tǒng)的設(shè)計
- 頸椎間盤突出護(hù)理查房
- JCT903-2012 吸聲板用粒狀棉
- 鐵藝欄桿檢驗批
- 人教版三年級下冊數(shù)學(xué)全冊計算題專項訓(xùn)練(含答案)
- 內(nèi)鏡進(jìn)修匯報
- 抖音短視頻帳號策劃運(yùn)營表
評論
0/150
提交評論