![用JSP腳本元素調(diào)用Java課件_第1頁(yè)](http://file4.renrendoc.com/view/4e0e6843969ffd8ac1f9c1c650345bcd/4e0e6843969ffd8ac1f9c1c650345bcd1.gif)
![用JSP腳本元素調(diào)用Java課件_第2頁(yè)](http://file4.renrendoc.com/view/4e0e6843969ffd8ac1f9c1c650345bcd/4e0e6843969ffd8ac1f9c1c650345bcd2.gif)
![用JSP腳本元素調(diào)用Java課件_第3頁(yè)](http://file4.renrendoc.com/view/4e0e6843969ffd8ac1f9c1c650345bcd/4e0e6843969ffd8ac1f9c1c650345bcd3.gif)
![用JSP腳本元素調(diào)用Java課件_第4頁(yè)](http://file4.renrendoc.com/view/4e0e6843969ffd8ac1f9c1c650345bcd/4e0e6843969ffd8ac1f9c1c650345bcd4.gif)
![用JSP腳本元素調(diào)用Java課件_第5頁(yè)](http://file4.renrendoc.com/view/4e0e6843969ffd8ac1f9c1c650345bcd/4e0e6843969ffd8ac1f9c1c650345bcd5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用JSP腳本元素調(diào)用Java代碼用JSP腳本元素調(diào)用Java代碼議程靜態(tài)和動(dòng)態(tài)文本動(dòng)態(tài)代碼和好的JSP設(shè)計(jì)JSP表達(dá)式servlet和JSP頁(yè)面對(duì)類似任務(wù)的處理JSPscriptletJSP聲明預(yù)定義變量表達(dá)式、scriptlet和聲明之間的對(duì)比議程靜態(tài)和動(dòng)態(tài)文本不同JSP構(gòu)造的應(yīng)用不同JSP構(gòu)造的應(yīng)用設(shè)計(jì)策略:限制JSP頁(yè)面內(nèi)的Java代碼有兩種選擇:將25行Java代碼直接放在JSP頁(yè)面中將這25行代碼放在單獨(dú)的Java類中,在JSP頁(yè)面中用一行代碼調(diào)用它為什么第二種選擇更好?開(kāi)發(fā)。我們可以在Java開(kāi)發(fā)環(huán)境(編輯器或IDE)中編寫(xiě)單獨(dú)的類,而非在HTML環(huán)境中。調(diào)試。如果代碼中含有語(yǔ)法錯(cuò)誤,在編譯時(shí)就能夠直接看到。簡(jiǎn)單的打印語(yǔ)句可以直接看到結(jié)果。測(cè)試。我們可以編寫(xiě)測(cè)試過(guò)程,每次更改后都通過(guò)循環(huán)進(jìn)行上萬(wàn)次的測(cè)試。重用。多個(gè)頁(yè)面都可以使用同一個(gè)類。設(shè)計(jì)策略:限制JSP頁(yè)面內(nèi)的Java代碼有兩種選擇:基本語(yǔ)法HTML文本<H1>Blah</H1>不加更改地傳遞給客戶。實(shí)際上是由類似于下面的servlet代碼生成:
out.print("<H1>Blah</H1>");HTML注釋<!--注釋內(nèi)容-->和其他HTMl一樣:直接傳遞給客戶JSP注釋<%--注釋內(nèi)容--%>并不發(fā)送給客戶要輸出<%,使用<\%基本語(yǔ)法HTML文本腳本元素的類型表達(dá)式格式:<%=expression%>求值并插入到servlet的輸出中。也就是會(huì)產(chǎn)生類似于out.print(expression)的語(yǔ)句scriptlet格式:<%code%>逐字地插入到servlet的_jspService方法中(由service調(diào)用)聲明格式:<%!code%>逐字地插入到servlet類的定義體中,不在任何方法之內(nèi)腳本元素的類型表達(dá)式JSP表達(dá)式格式<%=JavaExpression%>結(jié)果表達(dá)式被求值,轉(zhuǎn)換成字符串,將按照它在JSP頁(yè)面中出現(xiàn)的位置插入到HTML頁(yè)面中。即,表達(dá)式在out.print內(nèi)放置在Thatis,expressionplacedin_jspServiceinsideout.print示例當(dāng)前時(shí)間:<%=newjava.util.Date()%>您的主機(jī)名:<%=request.getRemoteHost()%>XML兼容的語(yǔ)法<jsp:expression>JavaExpression</jsp:expression>在單個(gè)頁(yè)面中不能混合使用不同的版本。如果使用jsp:expression就必須整個(gè)頁(yè)面都使用XML。JSP表達(dá)式格式JSP/servlet的對(duì)應(yīng)原始的JSP <H1>ARandomNumber</H1> <%=Math.random()%>
所產(chǎn)生的具有代表性的servlet代碼
publicvoid_jspService(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(true); JspWriterout=response.getWriter(); out.println("<H1>ARandomNumber</H1>"); out.println(Math.random()); ... }JSP/servlet的對(duì)應(yīng)原始的JSPJSP表達(dá)式:示例
…<BODY><H2>JSPExpressions</H2><UL><LI>Currenttime:<%=newjava.util.Date()%><LI>Server:<%=application.getServerInfo()%><LI>SessionID:<%=session.getId()%><LI>The<CODE>testParam</CODE>formparameter:<%=request.getParameter("testParam")%></UL></BODY></HTML>JSP表達(dá)式:示例
…<BODY>預(yù)定義變量requestHttpServletRequest(service/doGet的第一個(gè)參數(shù))responseHttpServletResponse(service/doGet的第二個(gè)參數(shù))out用來(lái)將輸出發(fā)送到客戶程序的Writer(JspWriter帶緩沖的版本)session與請(qǐng)求關(guān)聯(lián)的HttpSession(除非用page指令的session屬性將之禁止)applicationServletContext(用于數(shù)據(jù)共享),可通過(guò)getServletContext()獲取預(yù)定義變量requestservlet和JSP的比較:讀取三個(gè)參數(shù)(Servlet)publicclassThreeParamsextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{…out.println(docType+"<HTML>\n"+"<HEAD><TITLE>"+title+"</TITLE></HEAD>\n"+"<BODYBGCOLOR=\"#FDF5E6\">\n"+"<H1ALIGN=\"CENTER\">"+title+"</H1>\n"+"<UL>\n"+"<LI><B>param1</B>:"+request.getParameter("param1")+"\n"+"<LI><B>param2</B>:"+request.getParameter("param2")+"\n"+"<LI><B>param3</B>:"+request.getParameter("param3")+"\n"+"</UL>\n"+"</BODY></HTML>");}}servlet和JSP的比較:讀取三個(gè)參數(shù)(Servlet)servlet和JSP的比較:讀取三個(gè)參數(shù)(JSP)<!DOCTYPE…><HTML><HEAD><TITLE>ReadingThreeRequestParameters</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><H1>ReadingThreeRequestParameters</H1><UL><LI><B>param1</B>:<%=request.getParameter("param1")%><LI><B>param2</B>:<%=request.getParameter("param2")%><LI><B>param3</B>:<%=request.getParameter("param3")%></UL></BODY></HTML>servlet和JSP的比較:讀取三個(gè)參數(shù)(JSP)<!DOJSPscriptlet格式<%JavaCode%>結(jié)果代碼被逐字地插入到servlet的_jspService方法中示例<%StringqueryData=request.getQueryString();out.println("AttachedGETdata:"+queryData);%><%response.setContentType("text/plain");%>XML兼容的語(yǔ)法<jsp:scriptlet>JavaCode</jsp:scriptlet>JSPscriptlet格式JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP <H2>foo</H2><%=bar()%><%baz();%>所產(chǎn)生的具有代表性的servlet代碼
publicvoid_jspService(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(); JspWriterout=response.getWriter(); out.println("<H2>foo</H2>"); out.println(bar()); baz();
... }JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSPJSPscriptlet:示例假定您希望能夠讓最終用戶定制頁(yè)面的背景色下面的代碼有什么問(wèn)題?<BODYBGCOLOR="<%=request.getParameter("bgColor")%>">無(wú)法進(jìn)行缺失和異常數(shù)據(jù)的檢查JSPscriptlet:示例假定您希望能夠讓最終用戶定制JSPscriptlet:示例<!DOCTYPE…><HTML><HEAD><TITLE>ColorTesting</TITLE></HEAD><%StringbgColor=request.getParameter("bgColor");if((bgColor==null)||(bgColor.trim().equals(""))){bgColor="WHITE";}%><BODYBGCOLOR="<%=bgColor%>"><H2ALIGN="CENTER">TestingaBackgroundof"<%=bgColor%>"</H2></BODY></HTML>JSPscriptlet:示例<!DOCTYPE…>使用scriptlet將JSP文件的某些部分條件化要點(diǎn)scriplet會(huì)被嚴(yán)格按照所寫(xiě)的樣子插入到servlet中不需要是完整的Java表達(dá)式但完整的表達(dá)式常常更清楚且易于維護(hù)示例<%if(Math.random()<0.5){%>Havea<B>nice</B>day!<%}else{%>Havea<B>lousy</B>day!<%}%>具有代表性的結(jié)果if(Math.random()<0.5){out.println("Havea<B>nice</B>day!");}else{out.println("Havea<B>lousy</B>day!");}使用scriptlet將JSP文件的某些部分條件化要點(diǎn)JSP聲明格式<%!JavaCode%>結(jié)果代碼被逐字地插入到servlet類的定義中,在任何現(xiàn)有方法以外示例<%!privateintsomeField=5;%><%!privatevoidsomeMethod(...){...}%>設(shè)計(jì)上的考慮字段當(dāng)然有用,但對(duì)于方法而言,通常在單獨(dú)的Java類中定義更好一些。XML兼容的語(yǔ)法<jsp:declaration>JavaCode</jsp:declaration>JSP聲明格式JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP
<H1>SomeHeading</H1><%!privateStringrandomHeading(){return("<H2>"+Math.random()+"</H2>");}%><%=randomHeading()%>
也可以使randomHeading成為單獨(dú)Java類的靜態(tài)方法)JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP
JSP/servlet之間的對(duì)應(yīng)關(guān)系生成的servlet代碼
publicclassxxxximplementsHttpJspPage{ privateStringrandomHeading() { return("<H2>"+Math.random()+"</H2>"); } publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(true); JspWriterout=response.getWriter(); out.println("<H1>SomeHeading</H1>"); out.println(randomHeading());...}...}JSP/servlet之間的對(duì)應(yīng)關(guān)系生成的servlet代碼JSP聲明:示例<!DOCTYPE…><HTML><HEAD><TITLE>JSPDeclarations</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><H1>JSPDeclarations</H1><%!privateintaccessCount=0;%><H2>Accessestopagesinceserverreboot:<%=++accessCount%></H2></BODY></HTML>JSP聲明:示例<!DOCTYPE…>JSP聲明:jspInit和jspDestroyJSP頁(yè)面,如同常規(guī)servlet,有時(shí)需要用到init和destroy
問(wèn)題在于:根據(jù)JSP頁(yè)面構(gòu)建的servlet有可能已經(jīng)使用了init和destroy覆蓋它們會(huì)引發(fā)問(wèn)題。因此,使用JSP聲明來(lái)聲明init或destroy是不合法的。
解決方案:使用jspInit和jspDestroy。根據(jù)JSP頁(yè)面生成的servlet一定會(huì)init和destroy中調(diào)用這些方法,而標(biāo)準(zhǔn)版的jspInit和jspDestroy是空的(僅為占位符,由用戶覆蓋。publicvoidjspInit(){System.out.println("thisisjspInitin"+this);}publicvoidjspDestroy(){System.out.println("thisisjspDestroyin"+this);}JSP聲明:jspInit和jspDestroyJSP頁(yè)面,JSP聲明和預(yù)定義變量問(wèn)題預(yù)定義變量(request,response,out,session,等)是_jspService方法中的局部變量。因而,由JSP聲明定義的方法或輔助類中的方法都不能使用它們。怎么處理這種情況呢?
解決方案:將它們作為參數(shù)傳遞,例如<%!privatevoidsomeMethod(HttpSessions){doSomethingWith(s);}%><%someMethod(session);%>
要注意:JspWriter的println方法拋出IOException異常使用println的方法要使用“throwsIOException”JSP聲明和預(yù)定義變量問(wèn)題表達(dá)式、scriptlet和聲明的對(duì)比任務(wù)1輸出由從1到10之間的5個(gè)隨機(jī)整數(shù)構(gòu)成的項(xiàng)目列表。由于本頁(yè)的結(jié)構(gòu)固定,并且對(duì)于randomInt方法,我們使用單獨(dú)的輔助類,JSP表達(dá)式完全能夠勝任。
任務(wù)2生成1到10數(shù)據(jù)項(xiàng)構(gòu)成的列表(隨機(jī)選定),每一項(xiàng)為1到10之間的整數(shù)。由于列表中的數(shù)據(jù)項(xiàng)是動(dòng)態(tài)的,所以需要JSPscriptlet。
任務(wù)3在首次請(qǐng)求時(shí)生成一個(gè)隨機(jī)數(shù),然后向所有的用戶展示這個(gè)隨機(jī)數(shù),直到服務(wù)器重新啟動(dòng)。實(shí)例變量(字段)是完成這種持續(xù)性的自然方式。使用JSP聲明來(lái)完成這項(xiàng)任務(wù)。表達(dá)式、scriptlet和聲明的對(duì)比任務(wù)1輔助類:RanUtilitiespackageXXX;//Alwaysusepackages!!publicclassRanUtilities{/**Arandomintfrom1torange(inclusive).*/ publicstaticintrandomInt(intrange) { return(1+((int)(Math.random()*range))); } publicstaticvoidmain(String[]args) { intrange=10; try { range=Integer.parseInt(args[0]); }catch(Exceptione){//Arrayindexornumberformat //Donothing:rangealreadyhasdefaultvalue. } for(inti=0;i<100;i++){ System.out.println(randomInt(range)); }
}}輔助類:RanUtilitiespackageXXX;/任務(wù)1:JSP表達(dá)式(代碼)<!DOCTYPE…><HTML><HEAD><TITLE>RandomNumbers</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><H1>RandomNumbers</H1><UL><LI><%=XXX.RanUtilities.randomInt(10)%><LI><%=XXX.RanUtilities.randomInt(10)%><LI><%=XXX.RanUtilities.randomInt(10)%><LI><%=XXX.RanUtilities.randomInt(10)%><LI><%=XXX.RanUtilities.randomInt(10)%></UL></BODY></HTML>任務(wù)1:JSP表達(dá)式(代碼)<!DOCTYPE…>任務(wù)2:JSPscriptlet
(代碼:版本1)<!DOCTYPE…><HTML><HEAD><TITLE>RandomList(Version1)</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css“TYPE="text/css"></HEAD><BODY><H1>RandomList(Version1)</H1><UL><%intnumEntries=XXX.RanUtilities.randomInt(10);for(inti=0;i<numEntries;i++){out.println("<LI>"+XXX.RanUtilities.randomInt(10));}%></UL></BODY></HTML>任務(wù)2:JSPscriptlet
(代碼:版本1)<!DO任務(wù)2:JSPscriptlet
(代碼:版本2)<!DOCTYPE…><HTML><HEAD><TITLE>RandomList(Version2)</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css“TYPE="text/css"></HEAD><BODY><H1>RandomList(Version2)</H1><UL><%intnumEntries=XXX.RanUtilities.randomInt(10);for(inti=0;i<numEntries;i++){%><LI><%=XXX.RanUtilities.randomInt(10)%><%}%></UL></BODY></HTML>任務(wù)2:JSPscriptlet
(代碼:版本2)<!DO任務(wù)3:JSP聲明(代碼)<!DOCTYPE…><HTML><HEAD><TITLE>Semi-RandomNumber</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><%!privateintrandomNum=XXX.RanUtilities.randomInt(10);%><H1>Semi-RandomNumber:<BR><%=randomNum%></H1></BODY></HTML>任務(wù)3:JSP聲明(代碼)<!DOCTYPE…>小結(jié)JSP表達(dá)式格式:<%=expression%>封裝到out.print中,并插入到_jspServiceJSPscriptlet格式:<%code%>逐字地插入到servlet的_jspService方法中JSP聲明格式:<%!code%>逐字地插入到servlet類的定義體中預(yù)定義變量request,response,out,session,application限制直接放在頁(yè)面中的Java代碼考慮使用輔助類、bean、servlet/JSP的組合(MVC)、JSP表達(dá)式語(yǔ)言、定制標(biāo)簽。小結(jié)JSP表達(dá)式用JSP腳本元素調(diào)用Java代碼用JSP腳本元素調(diào)用Java代碼議程靜態(tài)和動(dòng)態(tài)文本動(dòng)態(tài)代碼和好的JSP設(shè)計(jì)JSP表達(dá)式servlet和JSP頁(yè)面對(duì)類似任務(wù)的處理JSPscriptletJSP聲明預(yù)定義變量表達(dá)式、scriptlet和聲明之間的對(duì)比議程靜態(tài)和動(dòng)態(tài)文本不同JSP構(gòu)造的應(yīng)用不同JSP構(gòu)造的應(yīng)用設(shè)計(jì)策略:限制JSP頁(yè)面內(nèi)的Java代碼有兩種選擇:將25行Java代碼直接放在JSP頁(yè)面中將這25行代碼放在單獨(dú)的Java類中,在JSP頁(yè)面中用一行代碼調(diào)用它為什么第二種選擇更好?開(kāi)發(fā)。我們可以在Java開(kāi)發(fā)環(huán)境(編輯器或IDE)中編寫(xiě)單獨(dú)的類,而非在HTML環(huán)境中。調(diào)試。如果代碼中含有語(yǔ)法錯(cuò)誤,在編譯時(shí)就能夠直接看到。簡(jiǎn)單的打印語(yǔ)句可以直接看到結(jié)果。測(cè)試。我們可以編寫(xiě)測(cè)試過(guò)程,每次更改后都通過(guò)循環(huán)進(jìn)行上萬(wàn)次的測(cè)試。重用。多個(gè)頁(yè)面都可以使用同一個(gè)類。設(shè)計(jì)策略:限制JSP頁(yè)面內(nèi)的Java代碼有兩種選擇:基本語(yǔ)法HTML文本<H1>Blah</H1>不加更改地傳遞給客戶。實(shí)際上是由類似于下面的servlet代碼生成:
out.print("<H1>Blah</H1>");HTML注釋<!--注釋內(nèi)容-->和其他HTMl一樣:直接傳遞給客戶JSP注釋<%--注釋內(nèi)容--%>并不發(fā)送給客戶要輸出<%,使用<\%基本語(yǔ)法HTML文本腳本元素的類型表達(dá)式格式:<%=expression%>求值并插入到servlet的輸出中。也就是會(huì)產(chǎn)生類似于out.print(expression)的語(yǔ)句scriptlet格式:<%code%>逐字地插入到servlet的_jspService方法中(由service調(diào)用)聲明格式:<%!code%>逐字地插入到servlet類的定義體中,不在任何方法之內(nèi)腳本元素的類型表達(dá)式JSP表達(dá)式格式<%=JavaExpression%>結(jié)果表達(dá)式被求值,轉(zhuǎn)換成字符串,將按照它在JSP頁(yè)面中出現(xiàn)的位置插入到HTML頁(yè)面中。即,表達(dá)式在out.print內(nèi)放置在Thatis,expressionplacedin_jspServiceinsideout.print示例當(dāng)前時(shí)間:<%=newjava.util.Date()%>您的主機(jī)名:<%=request.getRemoteHost()%>XML兼容的語(yǔ)法<jsp:expression>JavaExpression</jsp:expression>在單個(gè)頁(yè)面中不能混合使用不同的版本。如果使用jsp:expression就必須整個(gè)頁(yè)面都使用XML。JSP表達(dá)式格式JSP/servlet的對(duì)應(yīng)原始的JSP <H1>ARandomNumber</H1> <%=Math.random()%>
所產(chǎn)生的具有代表性的servlet代碼
publicvoid_jspService(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(true); JspWriterout=response.getWriter(); out.println("<H1>ARandomNumber</H1>"); out.println(Math.random()); ... }JSP/servlet的對(duì)應(yīng)原始的JSPJSP表達(dá)式:示例
…<BODY><H2>JSPExpressions</H2><UL><LI>Currenttime:<%=newjava.util.Date()%><LI>Server:<%=application.getServerInfo()%><LI>SessionID:<%=session.getId()%><LI>The<CODE>testParam</CODE>formparameter:<%=request.getParameter("testParam")%></UL></BODY></HTML>JSP表達(dá)式:示例
…<BODY>預(yù)定義變量requestHttpServletRequest(service/doGet的第一個(gè)參數(shù))responseHttpServletResponse(service/doGet的第二個(gè)參數(shù))out用來(lái)將輸出發(fā)送到客戶程序的Writer(JspWriter帶緩沖的版本)session與請(qǐng)求關(guān)聯(lián)的HttpSession(除非用page指令的session屬性將之禁止)applicationServletContext(用于數(shù)據(jù)共享),可通過(guò)getServletContext()獲取預(yù)定義變量requestservlet和JSP的比較:讀取三個(gè)參數(shù)(Servlet)publicclassThreeParamsextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{…out.println(docType+"<HTML>\n"+"<HEAD><TITLE>"+title+"</TITLE></HEAD>\n"+"<BODYBGCOLOR=\"#FDF5E6\">\n"+"<H1ALIGN=\"CENTER\">"+title+"</H1>\n"+"<UL>\n"+"<LI><B>param1</B>:"+request.getParameter("param1")+"\n"+"<LI><B>param2</B>:"+request.getParameter("param2")+"\n"+"<LI><B>param3</B>:"+request.getParameter("param3")+"\n"+"</UL>\n"+"</BODY></HTML>");}}servlet和JSP的比較:讀取三個(gè)參數(shù)(Servlet)servlet和JSP的比較:讀取三個(gè)參數(shù)(JSP)<!DOCTYPE…><HTML><HEAD><TITLE>ReadingThreeRequestParameters</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><H1>ReadingThreeRequestParameters</H1><UL><LI><B>param1</B>:<%=request.getParameter("param1")%><LI><B>param2</B>:<%=request.getParameter("param2")%><LI><B>param3</B>:<%=request.getParameter("param3")%></UL></BODY></HTML>servlet和JSP的比較:讀取三個(gè)參數(shù)(JSP)<!DOJSPscriptlet格式<%JavaCode%>結(jié)果代碼被逐字地插入到servlet的_jspService方法中示例<%StringqueryData=request.getQueryString();out.println("AttachedGETdata:"+queryData);%><%response.setContentType("text/plain");%>XML兼容的語(yǔ)法<jsp:scriptlet>JavaCode</jsp:scriptlet>JSPscriptlet格式JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP <H2>foo</H2><%=bar()%><%baz();%>所產(chǎn)生的具有代表性的servlet代碼
publicvoid_jspService(HttpServletRequestrequest, HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(); JspWriterout=response.getWriter(); out.println("<H2>foo</H2>"); out.println(bar()); baz();
... }JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSPJSPscriptlet:示例假定您希望能夠讓最終用戶定制頁(yè)面的背景色下面的代碼有什么問(wèn)題?<BODYBGCOLOR="<%=request.getParameter("bgColor")%>">無(wú)法進(jìn)行缺失和異常數(shù)據(jù)的檢查JSPscriptlet:示例假定您希望能夠讓最終用戶定制JSPscriptlet:示例<!DOCTYPE…><HTML><HEAD><TITLE>ColorTesting</TITLE></HEAD><%StringbgColor=request.getParameter("bgColor");if((bgColor==null)||(bgColor.trim().equals(""))){bgColor="WHITE";}%><BODYBGCOLOR="<%=bgColor%>"><H2ALIGN="CENTER">TestingaBackgroundof"<%=bgColor%>"</H2></BODY></HTML>JSPscriptlet:示例<!DOCTYPE…>使用scriptlet將JSP文件的某些部分條件化要點(diǎn)scriplet會(huì)被嚴(yán)格按照所寫(xiě)的樣子插入到servlet中不需要是完整的Java表達(dá)式但完整的表達(dá)式常常更清楚且易于維護(hù)示例<%if(Math.random()<0.5){%>Havea<B>nice</B>day!<%}else{%>Havea<B>lousy</B>day!<%}%>具有代表性的結(jié)果if(Math.random()<0.5){out.println("Havea<B>nice</B>day!");}else{out.println("Havea<B>lousy</B>day!");}使用scriptlet將JSP文件的某些部分條件化要點(diǎn)JSP聲明格式<%!JavaCode%>結(jié)果代碼被逐字地插入到servlet類的定義中,在任何現(xiàn)有方法以外示例<%!privateintsomeField=5;%><%!privatevoidsomeMethod(...){...}%>設(shè)計(jì)上的考慮字段當(dāng)然有用,但對(duì)于方法而言,通常在單獨(dú)的Java類中定義更好一些。XML兼容的語(yǔ)法<jsp:declaration>JavaCode</jsp:declaration>JSP聲明格式JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP
<H1>SomeHeading</H1><%!privateStringrandomHeading(){return("<H2>"+Math.random()+"</H2>");}%><%=randomHeading()%>
也可以使randomHeading成為單獨(dú)Java類的靜態(tài)方法)JSP/servlet之間的對(duì)應(yīng)關(guān)系原始的JSP
JSP/servlet之間的對(duì)應(yīng)關(guān)系生成的servlet代碼
publicclassxxxximplementsHttpJspPage{ privateStringrandomHeading() { return("<H2>"+Math.random()+"</H2>"); } publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { response.setContentType("text/html"); HttpSessionsession=request.getSession(true); JspWriterout=response.getWriter(); out.println("<H1>SomeHeading</H1>"); out.println(randomHeading());...}...}JSP/servlet之間的對(duì)應(yīng)關(guān)系生成的servlet代碼JSP聲明:示例<!DOCTYPE…><HTML><HEAD><TITLE>JSPDeclarations</TITLE><LINKREL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD><BODY><H1>JSPDeclarations</H1><%!privateintaccessCount=0;%><H2>Accessestopagesinceserverreboot:<%=++accessCount%></H2></BODY></HTML>JSP聲明:示例<!DOCTYPE…>JSP聲明:jspInit和jspDestroyJSP頁(yè)面,如同常規(guī)servlet,有時(shí)需要用到init和destroy
問(wèn)題在于:根據(jù)JSP頁(yè)面構(gòu)建的servlet有可能已經(jīng)使用了init和destroy覆蓋它們會(huì)引發(fā)問(wèn)題。因此,使用JSP聲明來(lái)聲明init或destroy是不合法的。
解決方案:使用jspInit和jspDestroy。根據(jù)JSP頁(yè)面生成的servlet一定會(huì)init和destroy中調(diào)用這些方法,而標(biāo)準(zhǔn)版的jspInit和jspDestroy是空的(僅為占位符,由用戶覆蓋。publicvoidjspInit(){System.out.println("thisisjspInitin"+this);}publicvoidjspDestroy(){System.out.println("thisisjspDestroyin"+this);}JSP聲明:jspInit和jspDestroyJSP頁(yè)面,JSP聲明和預(yù)定義變量問(wèn)題預(yù)定義變量(request,response,out,session,等)是_jspService方法中的局部變量。因而,由JSP聲明定義的方法或輔助類中的方法都不能使用它們。怎么處理這種情況呢?
解決方案:將它們作為參數(shù)傳遞,例如<%!privatevoidsomeMethod(HttpSessions){doSomethingWith(s);}%><%someMethod(session);%>
要注意:JspWriter的println方法拋出IOException異常使用println的方法要使用“throwsIOException”JSP聲明和預(yù)定義變量問(wèn)題表達(dá)式、scriptlet和聲明的對(duì)比任務(wù)1輸出由從1到10之間的5個(gè)隨機(jī)整數(shù)構(gòu)成的項(xiàng)目列表。由于本頁(yè)的結(jié)構(gòu)固定,并且對(duì)于randomInt方法,我們使用單獨(dú)的輔助類,JSP表達(dá)式完全能夠勝任。
任務(wù)2生成1到10數(shù)據(jù)項(xiàng)構(gòu)成的列表(隨機(jī)選定),每一項(xiàng)為1到10之間的整數(shù)。由于列表中的數(shù)據(jù)項(xiàng)是動(dòng)態(tài)的,所以需要JSPscriptlet。
任務(wù)3在首次請(qǐng)求時(shí)生成一個(gè)隨機(jī)數(shù),然后向所有的用戶展示這個(gè)隨機(jī)數(shù),直到服務(wù)器重新啟動(dòng)。實(shí)例變量(字段)是完成這種持續(xù)性的自然方式。使用JSP聲明來(lái)完成這項(xiàng)任務(wù)。表達(dá)式、scriptlet和聲明的對(duì)比任務(wù)1輔助類:RanUtilitiespackageXXX;//Alwaysusepackages!!publicclassRanUtilities{/**Arandomintfrom1torange(inclusive).*/ publicstaticintrandomInt(intrange) { return(1+((int)(Math.random()*range))); } publicstaticvoidmain(String[]args) { intrange=10; try { range=Integer.parseInt(args[0]); }catch(Exceptione){//Arrayindexornumberformat //Donothing:rangealreadyhasdefaultvalue. } for(inti=0;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程施工合同合同風(fēng)險(xiǎn)預(yù)警與防范措施協(xié)議
- 2025年中國(guó)兩性霉素B行業(yè)市場(chǎng)全景監(jiān)測(cè)及投資策略研究報(bào)告
- 上海bim合同范本
- 農(nóng)場(chǎng)自建旅館合同范本
- 代理退稅合同范本
- 2025年度高新技術(shù)產(chǎn)業(yè)公司總經(jīng)理專項(xiàng)聘用合同
- 養(yǎng)殖競(jìng)標(biāo)合同范本
- 駕校教練車承包合同范本
- 2025年陶瓷化工填料項(xiàng)目可行性研究報(bào)告
- 第一章:公共政策理論模型
- 中藥審核處方的內(nèi)容(二)
- (完整)金正昆商務(wù)禮儀答案
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 高支模專項(xiàng)施工方案(專家論證)
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學(xué)課件
- 房地產(chǎn)標(biāo)準(zhǔn)踩盤(pán)表格模板
- 物聯(lián)網(wǎng)項(xiàng)目實(shí)施進(jìn)度計(jì)劃表
- MDD指令附錄一 基本要求檢查表2013版
評(píng)論
0/150
提交評(píng)論