版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JavaWeb開發(fā)從入門到實(shí)踐JavaWebDevelopmentFromIntroductiontoPracticeJSP技術(shù)Chap05提綱JSP技術(shù)介紹JavaServerPages的基本概念及其與Servlet的關(guān)系,主要用于動態(tài)網(wǎng)頁開發(fā)?;菊Z法部分講解了JSP標(biāo)簽、表達(dá)式和腳本的使用,內(nèi)置對象和文件上傳下載功能則涉及了JSP中常用的服務(wù)器對象和處理文件的技術(shù)。5.1JSP概述5.2基本語法5.3JSP內(nèi)置對象5.4文件的上傳與下載5.1JSP概述5.1.1什么是JSP5.1.2JSP運(yùn)行原理5.1.1什么是JSPJSP(JavaServerPages,Java服務(wù)器頁面)是以Java為基礎(chǔ)開發(fā)的,它是在傳統(tǒng)的網(wǎng)頁HTML文件中插入Java程序段和JSP標(biāo)記,后綴名為“.jsp”。JSP的主要特點(diǎn):跨平臺:可以應(yīng)用于Windows、Linux、Mac等系統(tǒng)中業(yè)務(wù)代碼分離組件重用預(yù)編譯多樣化和功能強(qiáng)大的開發(fā)工具的支持5.1.2JSP運(yùn)行原理用戶訪問Servlet時,Web服務(wù)器根據(jù)請求的URL地址在web.xml文件中找到對應(yīng)的<servlet-mapping>,然后將請求交給<servlet-mapping>對應(yīng)的Servlet程序去處理。JSP文件不需要在web.xml配置文件中進(jìn)行配置,因?yàn)門omcat服務(wù)器的conf目錄的web.xml文件中實(shí)現(xiàn)了JSP的相關(guān)配置。<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup></servlet><servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern></servlet-mapping>web.xml文件5.1.2JSP運(yùn)行原理JSP執(zhí)行過程:1、客戶端瀏覽器發(fā)出請求,請求訪問JSP文件。2、Web容器將JSP轉(zhuǎn)譯成Servlet源碼文件。3、Web容器將產(chǎn)生的源碼文件編譯成字節(jié)碼文件。4、Web容器加載編譯后的代碼并執(zhí)行。5、Web容器將執(zhí)行結(jié)果響應(yīng)至客戶端瀏覽器。圖
5-1
JSP運(yùn)行原理5.1.2JSP運(yùn)行原理JSP轉(zhuǎn)譯生成Servlet源碼文件publicfinalclassA_jspextendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports{}A.jsp轉(zhuǎn)譯后的文件A_jsp.java代碼如下:
A_jsp繼承了org.apache.jasper.runtime.HttpJspBase類publicabstractclassHttpJspBase
extendsHttpServletimplementsHttpJspPage{ privatestaticfinallongserialVersionUID=1L;
protectedHttpJspBase(){} ...}5.2基本語法5.2.1JSP腳本標(biāo)記5.2.2JSP指令標(biāo)記5.2.3JSP動作標(biāo)記5.2.1JSP腳本標(biāo)記JSP腳本小程序:<%Java程序段%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html> <head>
<title>輸出直角三角形</title>
</head>
<body>
<%
for(inti=0;i<5;i++){//遍歷行
for(intj=0;j<=i;j++){//遍歷每行中的*號
out.print("*");
}
out.print("<br/>");//每行輸出后回車
}
%>
</body>
</html>案例:輸出一個五行的直角三角形5.2.1JSP腳本標(biāo)記JSP聲明:<%!變量或方法的定義%><%! intm=0;//聲明一個成員變量 intadd(intx,inty){//聲明一個方法 returnx+y; }%><body><% intn=0;//聲明一個局部變量 m++; n++; intresult=add(1,2); out.print("成員變量m="+m+"<br/>"); out.print("局部變量n="+n+"<br/>"); out.print("二數(shù)的和sum="+result);%></body>案例:成員變量和局部變量的使用5.2.1JSP腳本標(biāo)記JSP表達(dá)式:<%=變量或表達(dá)式%><body> <%inti=10;%> <%=i+"+1="+(i+1)%></body>案例:創(chuàng)建一個JSP頁面,使用JSP表達(dá)式輸出數(shù)據(jù)JSP注釋靜態(tài)注釋:<!--HTML風(fēng)格的注釋-->Java注釋://單行注釋
/*
多行注釋
*/JSP注釋:<%--JSP注釋--%>5.2.2JSP指令標(biāo)記常用的JSP指令標(biāo)記包括page指令、include指令和taglib指令。page指令:<%@page屬性1="屬性1的值"屬性2="屬性2的值"%>表
5-1page指令的屬性及其描述屬性描述contentType確定響應(yīng)的MIME類型和字符編碼,常見的MIME類型有text/html(HTML解析器)、application/msword(Word應(yīng)用程序)、images/jpeg(JPEG圖形)等。例如,contentType="text/html;charset=UTF-8"language指定JSP頁面使用的腳本語言,一般設(shè)置為“java”import導(dǎo)入一個或多個包和類,例如,導(dǎo)入Java的sql包,import="java.sql.*"isErrorPage指定當(dāng)前頁面是否可以作為另一頁面的錯誤處理頁面,例如,isErrorPage="true"errorPage指定當(dāng)前網(wǎng)頁的出錯處理網(wǎng)頁的URL,例如,errorPage="err.jsp"5.2.2JSP指令標(biāo)記include指令:<%@includefile="URL"%><body>
<%@includefile="head.jsp"%>
<p>
1.惟沉默是最高的輕蔑。<br/>
2.勇者憤怒,抽刃向更強(qiáng)者;怯者憤怒,卻抽刃向更弱者。<br/>
3.我之所謂生存,并不是茍活,所謂溫飽,不是奢侈,所謂發(fā)展,也不是放縱。<br/></p>
</body><body>
<h2><center>名言名句大全</center></h2>
</body>head.jspinclude.jsp5.2.2JSP指令標(biāo)記taglib指令:<%@taglibprefix="前綴"uri="標(biāo)簽庫URI"%>引入JSTL標(biāo)簽庫:<%@taglibprefix="c"uri="/jsp/jstl/core"%>5.2.3JSP動作標(biāo)記常用的JSP動作標(biāo)記包括include、forward、param<jsp:include>、<jsp:param>動作標(biāo)記動作標(biāo)記<jsp:include>的作用是將JSP文件、HTML網(wǎng)頁文件或其他文本文件動態(tài)嵌入到當(dāng)前JSP網(wǎng)頁中。<jsp:param>動作標(biāo)記以“名稱-值”對的形式為對應(yīng)頁面?zhèn)鬟f參數(shù),<jsp:param>動作標(biāo)記不能單獨(dú)使用,可以作為<jsp:include>、<jsp:forward>動作標(biāo)記的子標(biāo)記使用,其基本語法如下:<jsp:includepage="URL">
<jsp:paramname="屬性名"value="屬性值"/></jsp:include>5.2.3JSP動作標(biāo)記案例:使用遞歸求第n個斐波那契數(shù)1、parameter.jsp2、fibonacci.jsp<body>
<h2>加載fibonacci.jsp頁面,輸出第n個斐波那契數(shù)</h2><jsp:includepage="fibonacci.jsp">
<jsp:paramname="n"value="6"/>
</jsp:include>
</body><%!intfun(intn){if(n==1||n==2){return1;}else{ returnfun(n-1)+fun(n-2);}}
%>
<body>
<%
Stringn=request.getParameter("n");
out.print("第"+n+"個斐波那契數(shù):"+ fun(Integer.parseInt(n)));%>
</body>圖
5-6
斐波那契數(shù)的運(yùn)行結(jié)果5.2.3JSP動作標(biāo)記<jsp:forward>動作標(biāo)記動作標(biāo)記<jsp:forward>用于從該標(biāo)記出現(xiàn)處停止當(dāng)前JSP頁面執(zhí)行,重定向到其他指定頁面。重定向的目標(biāo)可以是靜態(tài)的HTML頁面、JSP頁面,其基本語法如下:<jsp:forwardpage="頁面URL"><jsp:paramname="屬性名"value="屬性值"/></jsp:forward>5.2.3JSP動作標(biāo)記1、forword.jsp案例:<jsp:forward>動作標(biāo)記的使用<jsp:forwardpage="target.jsp">
<jsp:paramname="country"value="中國"/></jsp:forward>2、target.jsp<body>
<%
Stringcountry=request.getParameter("country");out.print(country+"加油!<br/>");
%>
紅星高懸,照亮了中國的前進(jìn)道路,指引著我們奮勇向前。
</body>圖
5-7
<jsp:forward>動作標(biāo)記的使用5.3JSP內(nèi)置對象5.3.1out對象5.3.2pageContext對象5.3.3exception對象5.3JSP內(nèi)置對象表5-2
JSP內(nèi)置對象、描述及其作用域?qū)ο竺枋鲎饔糜騬equestHttpServletRequest類的實(shí)例,用于獲取用戶請求信息requestresponseHttpServletResponse類的實(shí)例,用于向客戶端發(fā)送響應(yīng)信息pagepageContextPageContext類的實(shí)例,用于獲取上下文信息pagesessionHttpSession類的實(shí)例,用于保存用戶信息sessionapplicationServletContext類的實(shí)例,用于保存整個應(yīng)用的共享信息applicationoutJspWriter類的實(shí)例,用于頁面輸出pageconfigServletConfig類的實(shí)例,用于獲取web應(yīng)用配置信息pagepage代表當(dāng)前被訪問JSP頁面的實(shí)例化pageexceptionException類的對象,代表發(fā)生錯誤的JSP頁面中對應(yīng)的異常對象page5.3.1out對象out對象是向客戶端輸出內(nèi)容常用的對象。表5-3out內(nèi)置對象的常用方法方法描述voidprint()輸出數(shù)據(jù)voidnewLine()輸出換行voidclear()清除緩沖區(qū)中的數(shù)據(jù),若緩沖區(qū)是空的,則會產(chǎn)生IOException異常voidclearBuffer()清除緩沖區(qū)中的數(shù)據(jù),若緩沖區(qū)是空的,并不會產(chǎn)生IOException異常voidflush()清空緩沖區(qū)數(shù)據(jù),并輸出到網(wǎng)頁intgetBufferSize()返回緩沖區(qū)大小getRemaining()返回緩沖區(qū)剩余空間的大小booleanisAutoFlush()是否自動輸出緩沖區(qū)中的數(shù)據(jù)voidclose()關(guān)閉輸出流5.3.1out對象案例:out對象的使用<body>
<%
intsize=out.getBufferSize();
booleanflag=out.isAutoFlush();
out.print("緩沖區(qū)大小:"+size+"<br/>");out.print("是否自動輸出緩沖區(qū)中的數(shù)據(jù):"+flag);%>
</body>5.3.2pageContext對象pageContext對象(頁面上下文對象),用于獲取當(dāng)前JSP頁面的相關(guān)信息表
5-4pageContext內(nèi)置對象的常用方法方法描述ServletRequestgetRequest()獲取request內(nèi)置對象ServletResponsegetResponse()獲取response內(nèi)置對象HttpSessiongetSession()獲取session內(nèi)置對象ServletConfiggetServletConfig()獲取config內(nèi)置對象ServletContextgetServletContext()獲取application內(nèi)置對象ObjectgetPage()獲取page內(nèi)置對象ExceptiongetException()獲取exception內(nèi)置對象JspWritergetOut()獲取out內(nèi)置對象ObjectgetAttribute(Stringkey,intscope)獲取scope范圍、關(guān)鍵字為key的屬性對象voidsetAttribute(Stringkey,Objectvalue,intscope)設(shè)置scope范圍的屬性對象voidremoveAttribute(Stringkey,intscope)從scope范圍中移除關(guān)鍵字為key的屬性對象5.3.2pageContext對象案例:pageContext對象的使用<body>
<%
pageContext.getRequest().setAttribute("encoding","UTF-8");//設(shè)置屬性
//獲取屬性,默認(rèn)返回Object類型
Stringencoding=(String)pageContext.getAttribute("encoding",2);out.print("請求域中encoding的值="+encoding);%>
</body>5.3.3exception對象案例:exception對象的使用1、error.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"isErrorPage="true"%>
<html>
<head>
<title>錯誤頁面</title>
</head>
<body>
<%
exception.printStackTrace(response.getWriter());%>
</body>
</html>2、arithmeticException.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"errorPage="error.jsp"%>
<html>
<head>
<title>數(shù)學(xué)運(yùn)算異常</title>
</head>
<body>
<%
inti=10;
intj=i/0;
%>
</body>
</html>5.3.3exception對象圖
5-8
運(yùn)行結(jié)果exception對象是一個與Error有關(guān)的內(nèi)置對象,使用該對象的頁面必須設(shè)置page指令的isErrorPage屬性為true。5.4文件的上傳與下載5.4.1文件的上傳5.4.2文件的下載5.4.1文件的上傳文件上傳的表單設(shè)置表單method屬性必須設(shè)置為post,enctype設(shè)置為“multipart/form-data”。使用表單元素<inputtype=”file”>上傳文件,該元素包含一個按鈕,點(diǎn)擊按鈕選擇待上傳的文件<formmethod="post"action="/UploadServlet"enctype="multipart/form-data">
用戶名:<inputtype="text"name="username"/><br/>
頭像:<inputtype="file"name="photo"/><br/>
<inputtype="submit"value="提交"><inputtype="reset"value="重置"></form>圖
5-9
上傳頁面5.4.1文件的上傳創(chuàng)建名為UploadServlet的Servlet,用于上傳文件@WebServlet("/UploadServlet")
@MultipartConfig(maxFileSize=10*1024*1024)//設(shè)置最大文件大小為10MB
publicclassUploadServletextendsHttpServlet{
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriterout=resp.getWriter();
Stringusername=req.getParameter("username");//獲取用戶名
Partpart=req.getPart("photo");//獲取頭像
FileuploadDir=newFile(getServletContext().getRealPath("/upload"));//文件上傳目錄
if(!uploadDir.exists()){//判斷上傳目錄是否存在,不存在則創(chuàng)建
uploadDir.mkdir();
}
5.4.1文件的上傳Stringfilename=part.getSubmittedFileName();//原始文件名
//以當(dāng)前日期作為文件名,避免與服務(wù)器已有文件重名
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmssSSS");
StringnewFilename=sdf.format(newDate());//當(dāng)前日期格式化為字符串
Stringext=filename.substring(filename.lastIndexOf("."));//截取文件擴(kuò)展名
Stringpath=uploadDir+File.separator+newFilename+ext;//拼接上傳路徑
part.write(path);//上傳文件到服務(wù)器upload目錄中
out.println("用戶名:"+username+"<br/>");out.println("原始文件名:"+filename+"<br/>");
out.println("文件上傳到:"+path);
}
}注意:上傳多個文件需要修改以下內(nèi)容。表單中多添加幾個表單元素<inputtype=”file”>,這些元素的name屬性設(shè)置成不一樣。Partpart=req.getPart("photo")改成Collection<Part>parts=req.getParts(),然后使用for循環(huán)遍歷parts集合,循環(huán)體內(nèi)代碼與單文件上傳類似。5.4.2文件的下載文件下載的二種方式:一是通過超鏈接實(shí)現(xiàn)下載二是通過編寫程序?qū)崿F(xiàn)下載,需要設(shè)置兩個報(bào)頭。一是設(shè)置Content-Type報(bào)頭為application/x-msdownload二是設(shè)置Content-Disposition報(bào)頭為attachmentresp.setHeader("Content-Type","application/x-msdownload");resp.setHeader("Content-Disposition","attachment;filename="+filename);5.4.2文件的下載案例:通過編寫程序?qū)崿F(xiàn)下載編寫網(wǎng)頁<h2>利用程序?qū)崿F(xiàn)下載</h2>
<ahref="/fileupload/DownLoadServlet?filename=20240117103415360.png">下載</a>編寫Servlet@WebServlet("/DownLoadServlet")
publiccla
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川自貢市屬事業(yè)單位考試聘用人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年北京市延慶縣事業(yè)單位招聘39人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海地鐵第一運(yùn)營限公司多職能隊(duì)員(巡視)(儲備)招聘50人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年貴州六盤水市事業(yè)單位及國企業(yè)招聘應(yīng)征入伍大學(xué)畢業(yè)生【92】人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省江油市事業(yè)單位招聘95人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 農(nóng)村建設(shè)誠信承諾書模板
- 銀行網(wǎng)點(diǎn)智能系統(tǒng)布線合同
- 商場屋面瓦安裝合同
- 2024年租房合同終止協(xié)議3篇
- 2024年物業(yè)中介服務(wù)定金協(xié)議
- 以學(xué)增智-提升推進(jìn)高質(zhì)量發(fā)展的本領(lǐng)研討發(fā)言稿
- 2023年10月自考00055企業(yè)會計(jì)學(xué)真題及答案含評分標(biāo)準(zhǔn)
- 幼兒園人事工作總結(jié)
- 可修改版五年級數(shù)學(xué)期中考試答題卡模板
- 精裝修工程工作界面劃分
- 山東省青島市市北區(qū)2023-2024學(xué)年九年級上學(xué)期11月期中數(shù)學(xué)試題
- 【語文】上海市三年級上冊期末復(fù)習(xí)試題(含答案)
- 遙感技術(shù)基礎(chǔ)第二版課后答案
- 項(xiàng)目式高中化學(xué)教學(xué)《保護(hù)珊瑚礁的措施-沉淀溶解平衡》
- 犯罪現(xiàn)場勘察題庫(348道)
- 八段錦操作評分標(biāo)準(zhǔn)
評論
0/150
提交評論