




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
JavaWeb開發(fā)從入門到實踐JavaWebDevelopmentFromIntroductiontoPracticeJSP技術Chap05提綱JSP技術介紹JavaServerPages的基本概念及其與Servlet的關系,主要用于動態(tài)網(wǎng)頁開發(fā)。基本語法部分講解了JSP標簽、表達式和腳本的使用,內(nèi)置對象和文件上傳下載功能則涉及了JSP中常用的服務器對象和處理文件的技術。5.1JSP概述5.2基本語法5.3JSP內(nèi)置對象5.4文件的上傳與下載5.1JSP概述5.1.1什么是JSP5.1.2JSP運行原理5.1.1什么是JSPJSP(JavaServerPages,Java服務器頁面)是以Java為基礎開發(fā)的,它是在傳統(tǒng)的網(wǎng)頁HTML文件中插入Java程序段和JSP標記,后綴名為“.jsp”。JSP的主要特點:跨平臺:可以應用于Windows、Linux、Mac等系統(tǒng)中業(yè)務代碼分離組件重用預編譯多樣化和功能強大的開發(fā)工具的支持5.1.2JSP運行原理用戶訪問Servlet時,Web服務器根據(jù)請求的URL地址在web.xml文件中找到對應的<servlet-mapping>,然后將請求交給<servlet-mapping>對應的Servlet程序去處理。JSP文件不需要在web.xml配置文件中進行配置,因為Tomcat服務器的conf目錄的web.xml文件中實現(xiàn)了JSP的相關配置。<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運行原理JSP執(zhí)行過程:1、客戶端瀏覽器發(fā)出請求,請求訪問JSP文件。2、Web容器將JSP轉(zhuǎn)譯成Servlet源碼文件。3、Web容器將產(chǎn)生的源碼文件編譯成字節(jié)碼文件。4、Web容器加載編譯后的代碼并執(zhí)行。5、Web容器將執(zhí)行結(jié)果響應至客戶端瀏覽器。圖
5-1
JSP運行原理5.1.2JSP運行原理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腳本標記5.2.2JSP指令標記5.2.3JSP動作標記5.2.1JSP腳本標記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腳本標記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腳本標記JSP表達式:<%=變量或表達式%><body> <%inti=10;%> <%=i+"+1="+(i+1)%></body>案例:創(chuàng)建一個JSP頁面,使用JSP表達式輸出數(shù)據(jù)JSP注釋靜態(tài)注釋:<!--HTML風格的注釋-->Java注釋://單行注釋
/*
多行注釋
*/JSP注釋:<%--JSP注釋--%>5.2.2JSP指令標記常用的JSP指令標記包括page指令、include指令和taglib指令。page指令:<%@page屬性1="屬性1的值"屬性2="屬性2的值"%>表
5-1page指令的屬性及其描述屬性描述contentType確定響應的MIME類型和字符編碼,常見的MIME類型有text/html(HTML解析器)、application/msword(Word應用程序)、images/jpeg(JPEG圖形)等。例如,contentType="text/html;charset=UTF-8"language指定JSP頁面使用的腳本語言,一般設置為“java”import導入一個或多個包和類,例如,導入Java的sql包,import="java.sql.*"isErrorPage指定當前頁面是否可以作為另一頁面的錯誤處理頁面,例如,isErrorPage="true"errorPage指定當前網(wǎng)頁的出錯處理網(wǎng)頁的URL,例如,errorPage="err.jsp"5.2.2JSP指令標記include指令:<%@includefile="URL"%><body>
<%@includefile="head.jsp"%>
<p>
1.惟沉默是最高的輕蔑。<br/>
2.勇者憤怒,抽刃向更強者;怯者憤怒,卻抽刃向更弱者。<br/>
3.我之所謂生存,并不是茍活,所謂溫飽,不是奢侈,所謂發(fā)展,也不是放縱。<br/></p>
</body><body>
<h2><center>名言名句大全</center></h2>
</body>head.jspinclude.jsp5.2.2JSP指令標記taglib指令:<%@taglibprefix="前綴"uri="標簽庫URI"%>引入JSTL標簽庫:<%@taglibprefix="c"uri="/jsp/jstl/core"%>5.2.3JSP動作標記常用的JSP動作標記包括include、forward、param<jsp:include>、<jsp:param>動作標記動作標記<jsp:include>的作用是將JSP文件、HTML網(wǎng)頁文件或其他文本文件動態(tài)嵌入到當前JSP網(wǎng)頁中。<jsp:param>動作標記以“名稱-值”對的形式為對應頁面?zhèn)鬟f參數(shù),<jsp:param>動作標記不能單獨使用,可以作為<jsp:include>、<jsp:forward>動作標記的子標記使用,其基本語法如下:<jsp:includepage="URL">
<jsp:paramname="屬性名"value="屬性值"/></jsp:include>5.2.3JSP動作標記案例:使用遞歸求第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ù)的運行結(jié)果5.2.3JSP動作標記<jsp:forward>動作標記動作標記<jsp:forward>用于從該標記出現(xiàn)處停止當前JSP頁面執(zhí)行,重定向到其他指定頁面。重定向的目標可以是靜態(tài)的HTML頁面、JSP頁面,其基本語法如下:<jsp:forwardpage="頁面URL"><jsp:paramname="屬性名"value="屬性值"/></jsp:forward>5.2.3JSP動作標記1、forword.jsp案例:<jsp:forward>動作標記的使用<jsp:forwardpage="target.jsp">
<jsp:paramname="country"value="中國"/></jsp:forward>2、target.jsp<body>
<%
Stringcountry=request.getParameter("country");out.print(country+"加油!<br/>");
%>
紅星高懸,照亮了中國的前進道路,指引著我們奮勇向前。
</body>圖
5-7
<jsp:forward>動作標記的使用5.3JSP內(nèi)置對象5.3.1out對象5.3.2pageContext對象5.3.3exception對象5.3JSP內(nèi)置對象表5-2
JSP內(nèi)置對象、描述及其作用域?qū)ο竺枋鲎饔糜騬equestHttpServletRequest類的實例,用于獲取用戶請求信息requestresponseHttpServletResponse類的實例,用于向客戶端發(fā)送響應信息pagepageContextPageContext類的實例,用于獲取上下文信息pagesessionHttpSession類的實例,用于保存用戶信息sessionapplicationServletContext類的實例,用于保存整個應用的共享信息applicationoutJspWriter類的實例,用于頁面輸出pageconfigServletConfig類的實例,用于獲取web應用配置信息pagepage代表當前被訪問JSP頁面的實例化pageexceptionException類的對象,代表發(fā)生錯誤的JSP頁面中對應的異常對象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()關閉輸出流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對象(頁面上下文對象),用于獲取當前JSP頁面的相關信息表
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范圍、關鍵字為key的屬性對象voidsetAttribute(Stringkey,Objectvalue,intscope)設置scope范圍的屬性對象voidremoveAttribute(Stringkey,intscope)從scope范圍中移除關鍵字為key的屬性對象5.3.2pageContext對象案例:pageContext對象的使用<body>
<%
pageContext.getRequest().setAttribute("encoding","UTF-8");//設置屬性
//獲取屬性,默認返回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ù)學運算異常</title>
</head>
<body>
<%
inti=10;
intj=i/0;
%>
</body>
</html>5.3.3exception對象圖
5-8
運行結(jié)果exception對象是一個與Error有關的內(nèi)置對象,使用該對象的頁面必須設置page指令的isErrorPage屬性為true。5.4文件的上傳與下載5.4.1文件的上傳5.4.2文件的下載5.4.1文件的上傳文件上傳的表單設置表單method屬性必須設置為post,enctype設置為“multipart/form-data”。使用表單元素<inputtype=”file”>上傳文件,該元素包含一個按鈕,點擊按鈕選擇待上傳的文件<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)//設置最大文件大小為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();//原始文件名
//以當前日期作為文件名,避免與服務器已有文件重名
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmssSSS");
StringnewFilename=sdf.format(newDate());//當前日期格式化為字符串
Stringext=filename.substring(filename.lastIndexOf("."));//截取文件擴展名
Stringpath=uploadDir+File.separator+newFilename+ext;//拼接上傳路徑
part.write(path);//上傳文件到服務器upload目錄中
out.println("用戶名:"+username+"<br/>");out.println("原始文件名:"+filename+"<br/>");
out.println("文件上傳到:"+path);
}
}注意:上傳多個文件需要修改以下內(nèi)容。表單中多添加幾個表單元素<inputtype=”file”>,這些元素的name屬性設置成不一樣。Partpart=req.getPart("photo")改成Collection<Part>parts=req.getParts(),然后使用for循環(huán)遍歷parts集合,循環(huán)體內(nèi)代碼與單文件上傳類似。5.4.2文件的下載文件下載的二種方式:一是通過超鏈接實現(xiàn)下載二是通過編寫程序?qū)崿F(xiàn)下載,需要設置兩個報頭。一是設置Content-Type報頭為application/x-msdownload二是設置Content-Disposition報頭為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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際經(jīng)濟法國際海事法律事務考核試卷
- 2025年中國PE發(fā)泡鞋材數(shù)據(jù)監(jiān)測研究報告
- 2025年中國LED走廊燈數(shù)據(jù)監(jiān)測報告
- 2025年中國BD拋光輪數(shù)據(jù)監(jiān)測研究報告
- 2025年中國200#溶劑油數(shù)據(jù)監(jiān)測報告
- 2025至2030年中國輕觸延時開關市場分析及競爭策略研究報告
- 2025至2030年中國花崗巖Ⅴ型架市場分析及競爭策略研究報告
- 2025至2030年中國紙漿模塑寵物用品市場分析及競爭策略研究報告
- 2025至2030年中國瞄點式亮度計市場分析及競爭策略研究報告
- 2025至2030年中國瓷柱式斷路器市場分析及競爭策略研究報告
- 南平市浦城縣石陂鎮(zhèn)社區(qū)工作者招聘考試基礎題匯總2023
- 產(chǎn)能管理制度
- 《汽車發(fā)動機構(gòu)造與維修》(配實訓工單) 教案 5-1冷卻系結(jié)構(gòu)與循環(huán)線路(4學時)
- 員工反饋與投訴處理機制
- 《電力交易培訓》課件
- 研究污水處理中的微生物群落結(jié)構(gòu)
- 習近平新時代中國特色社會主義思想題庫(100道)
- 公司授權(quán)子公司簽訂合同委托書正規(guī)范本(通用版)
- 國開電大《管理英語1》參考答案
- 《MEMS技術及其應用》課件
- 技術在外語教育中的應用
評論
0/150
提交評論