Java Web 開發(fā)從入門到實(shí)踐課件 第5章 - JSP技術(shù)_第1頁
Java Web 開發(fā)從入門到實(shí)踐課件 第5章 - JSP技術(shù)_第2頁
Java Web 開發(fā)從入門到實(shí)踐課件 第5章 - JSP技術(shù)_第3頁
Java Web 開發(fā)從入門到實(shí)踐課件 第5章 - JSP技術(shù)_第4頁
Java Web 開發(fā)從入門到實(shí)踐課件 第5章 - JSP技術(shù)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論