版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
[鍵入文字]
JavaWeb編程習(xí)題解析
習(xí)題解析
i.略。
什么是URL,什么是URL它們都由哪幾個(gè)部分組成,URL和URI之間有什么關(guān)系?
2.答:URL稱為統(tǒng)一資源定位符,URL通常由4部分組成:協(xié)議名稱、頁(yè)面所在主
機(jī)的DNS名、可選的端口號(hào)和資源的名稱。URI稱為統(tǒng)一資源標(biāo)識(shí)符,是以特定語(yǔ)法標(biāo)識(shí)
一個(gè)資源的字符串。URI由模式和模式特有的部分組成,它們之間用冒號(hào)隔開(kāi),一般格式
如下:
schema:schema-specific-part
URI是URL和URN的超集。
3.答:①是URL,①和②都是URL③是URN
動(dòng)態(tài)web文檔技術(shù)有哪些?服務(wù)器端動(dòng)態(tài)文檔技術(shù)的客戶端動(dòng)態(tài)文檔技術(shù)有何不同?
4.答:動(dòng)態(tài)Web文檔技術(shù)包括服務(wù)器端動(dòng)態(tài)文檔技術(shù)和客戶端動(dòng)態(tài)文檔技術(shù),前者
包括CGI技術(shù)、服務(wù)器擴(kuò)展技術(shù)和HTML頁(yè)面中嵌入腳本技術(shù)。其中HTML頁(yè)面中嵌入
腳本技術(shù)包括ASP,PHP和JSP技術(shù)。
最流行的客戶端動(dòng)態(tài)文檔技術(shù)是在HTML頁(yè)面中嵌入JavaScript腳本代碼。使用
JavaScript可以設(shè)計(jì)交互式頁(yè)面。.與服務(wù)器端動(dòng)態(tài)文檔不同,JavaScript腳本是在客戶端執(zhí)
行的。
什么是Servlet?什么是Servlet容器?它的主要作用是什么?
5.答:Servlet是用ServletAPI開(kāi)發(fā)的Java程序,它運(yùn)行在Servlet容器中。Servlet容
器是運(yùn)行Servlet的軟件,主要用來(lái)擴(kuò)展Web服務(wù)器的功能。
簡(jiǎn)述開(kāi)發(fā)一個(gè)Servlet的上體步驟
6.答:開(kāi)發(fā)Servlet的一般步驟包括:(1)編寫Servlet源程序;(2)編譯;(3)將
Servlet部署到Servlet容器中;(4)訪問(wèn)執(zhí)行Servlet。
要使一個(gè)Servlet能夠正確編譯的運(yùn)行,應(yīng)該將什么文件加到CLASSPATH環(huán)境變量中?
7.答:<fonjcaf-i”ss〃>\lib\servlet-api.jar文件。
web應(yīng)用程序的部署描述文件名是什么?它是什么類型的文件?應(yīng)該存放在什么
目錄中?
8.答:部署描述文件名是web.xml,它是XML文件,應(yīng)該存放在Web應(yīng)用程序的
WEB-INF目錄中。
什么是404錯(cuò)誤?
9.答:當(dāng)服務(wù)器找不到用戶請(qǐng)求的資源時(shí)將發(fā)生404錯(cuò)誤。
什么是JSP頁(yè)面?它與HTML頁(yè)面有什么關(guān)系?
10.答:JSP頁(yè)面是嵌入了Java腳本元素的HTML頁(yè)面。
Servlet與JSP各適用于什么場(chǎng)合?
11.答:Servlet主要用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯和控制邏輯,JSP頁(yè)面主要用來(lái)實(shí)現(xiàn)表示邏輯。
歲章習(xí)題解析
Servlet接口中定義了哪幾個(gè)方法?
I.答:Servlet接口定義了下面5個(gè)方法:
publicvoidinit(ServletConfigconfig)
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,lOException
publicvoiddestroy()
publicServletConfiggetServletConfig()
publicStringgetServletInfo()
簡(jiǎn)述Servlet的生命周期,生命周期方法有哪幾個(gè)?
2.答:Servlet是在容器中運(yùn)行的組件,有一個(gè)從創(chuàng)建到銷毀的過(guò)程,其中包括加載和
實(shí)例化、初始化、提供服務(wù)以及銷毀幾個(gè)階段。其中生命周期方法有init()、service()和destroy。
等3個(gè)。
發(fā)生哪些事件,瀏覽器會(huì)向服務(wù)器發(fā)出請(qǐng)求?
3.答:發(fā)生下列事件,瀏覽器向服務(wù)器發(fā)出請(qǐng)求。
(1)用戶點(diǎn)擊了HTML頁(yè)面中的超鏈接;
(2)用戶在HTML頁(yè)面中填寫一個(gè)表單并點(diǎn)擊提交按鈕;
(3)用戶在瀏覽器的地址欄中輸入U(xiǎn)RL并按回車鍵。
4.答:查詢串
5.答:HTTP請(qǐng)求結(jié)構(gòu)由請(qǐng)求行、請(qǐng)求頭、空行和請(qǐng)求數(shù)據(jù)組成。請(qǐng)求行由方法名、
請(qǐng)求資源的URI和使用的HTTP版本3部分組成。
6.答:HTTP響應(yīng)結(jié)構(gòu)由狀態(tài)行、響應(yīng)頭和響應(yīng)數(shù)據(jù)3部分組成。狀態(tài)行由HTTP版本、
狀態(tài)碼和簡(jiǎn)短描述3部分組成。
7.答:GET清求主要用來(lái)從服務(wù)器檢索資源,POST請(qǐng)求主要用來(lái)向服務(wù)器發(fā)送數(shù)據(jù)。
它們的詳細(xì)比較請(qǐng)參閱教材的表2.8。
8.答:在ServletRequet接口中定義了setAttribute。、getAttribute()>getAttributeNames()
和removeAttribute()方法來(lái)處理請(qǐng)求作用域的屬性。
9.答:forward。方法轉(zhuǎn)發(fā)請(qǐng)求是服務(wù)器端控制權(quán)的轉(zhuǎn)向,客戶端地址欄中不顯示轉(zhuǎn)發(fā)
后的資源地址。sendRedirect。方法是服務(wù)器向?yàn)g覽器發(fā)送302狀態(tài)碼,它使瀏覽器連接到新
的位置,瀏覽器地址欄可看到地址的變化。使用重定向,資源不能位于WEB-INF目錄中。
10.答:可先通過(guò)請(qǐng)求對(duì)象的getParameterNames()方法得到Enumeration對(duì)象,然后在
其上得到每個(gè)請(qǐng)求參數(shù)名,再通過(guò)getParameter。得到請(qǐng)求參數(shù)值。
11.答:A12.答:B13.答:E
14.答:
action=ncourseServlet.do"
HttpServlet
com.demo.CourseServlet
courseServlet
15.答:①E②D③C?B⑤A
駕章習(xí)題解析
1.答:Web應(yīng)用程序是運(yùn)行在應(yīng)用服務(wù)器之中的。應(yīng)用服務(wù)器為Web應(yīng)用程序提供一
種簡(jiǎn)單的和可管理的對(duì)系統(tǒng)資源的訪問(wèn)機(jī)制。
2.答:web.xmlbankapp\WEB-INF
3.答:D4.答:A5.答:D
6.答:F7.答:E8.答:D
9.答:getServletConfig().getServletContext()或getServletContext()
10.答:B11.答:B12.答:D
13.答:因?yàn)锳pplet只能運(yùn)行在客戶端,所以可以將它放在Web應(yīng)用程序的文檔根目
錄的任何位置,但不能將其放在WEB4NF目錄或其子目錄中。
14.答:不能這樣做,至少不能直接這樣。部署描述文件不允許為一個(gè)名稱指定多個(gè)
參數(shù),所以必須像下面這樣:
<init-param>
<param-name>countries</param-name>
<param-value>Australia,Brazil,India,UK,US</param-value>
<init-param>
然后在Servlet中解析param-value串的值并解釋字符串中列出的多個(gè)值。
15.答:
packagecom.demo;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.
publicclassHelioCounterServletextendsHttpServlet{
privateIntegervisits=0;
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwslOException,ServletException{
response.setContentType(ntext/html;charset=gb2312");
PrintWriterout=response.getWriter();
visits=visits+1;
try(
Thread.sleep(2000);
}catch(InterruptedExceptione){
log(uExceptionduringsleeping.;
)
out.printin(H<html><body>n);
out.printin("歡迎您!<br>"+”該Servlet已被訪問(wèn)”+visits+”次。n);
out.printin(H</body></html>n);
}
}
修改后的Servlet如下:
packagecom.demo;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
publicclassHelloCounterServletextendsHttpServlet{
privateIntegervisits=0;
privateStringdbPath=null;
publicvoidinit(){
try{
dbPath=getServletContext().getRealPath(n/WEB-INF/counter.dbn);
FileInputStreamfis=newFileinputstream(dbPath);
DataInputStreamdis=newDatalnputStream(fis);
visits=dis.readlnt();
dis.close();
}catch(Exceptione){
log(nErrorloadingpersistentcounter'1,e);
)
}
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwslOException,ServletException{
response.setContentType(ntext/html;charset=gb2312");
Printwriterout=response.getWriter();
synchronized(this){
visits=visits+1;
out.printIn(H<html><body>");
out.printin("歡迎您!<br>H+”該Servlet已被訪問(wèn)”+visits+”次?!?;
out.printIn(n</body></html>n);
}
|
publicvoiddestroy(){
try{
FileOutputStreamfos=newFileOutputStream(dbPath);
DataOutputStreamdos=newDataOutputStream(fos);
dos.writelnt(visits);
dos.close();
}catch(Exceptione){
log(*'Errorstoringpersistentcounter'*,e);
}
)
}
號(hào)章習(xí)題解析
1.答:使用請(qǐng)求對(duì)象(即HttpServletRequest接口)的getSession。方法。
2.答:如果客戶在指定時(shí)間內(nèi)沒(méi)有訪問(wèn)服務(wù)器,則該會(huì)話超時(shí)。對(duì)超時(shí)的會(huì)話對(duì)象,
服務(wù)器使其失效。通過(guò)會(huì)話對(duì)象的setMaxInactivelnterval。方法設(shè)置會(huì)話最大超時(shí)時(shí)間。
web.xml文件使用<session-config>元素的子元素vsession-timeouA設(shè)置最大超時(shí)時(shí)間,
如下所示。
<session-config>
<session-timeout>20</session-timeout>
</session-config>
這里的最大超時(shí)時(shí)間是對(duì)整個(gè)應(yīng)用程序的所有會(huì)話有效,<session-timeout>元素指定的
時(shí)間單位是分鐘。setMaxInactivelnterval。方法參數(shù)單位是秒。
3.答:有些客戶瀏覽器可能不支持Cookie或用戶阻止所有的Cookie,此時(shí)不能用Cookie
實(shí)現(xiàn)會(huì)話。
4.答:使用響應(yīng)對(duì)象(即HttpServletResponse接口)的encodeURL()方法或
encodeRedirectURL。方法。
5.答:不能。因?yàn)樵S多用戶是通過(guò)代理服務(wù)器訪問(wèn)Internet的,此時(shí)服務(wù)器得到的是代
理服務(wù)器的IP地址而不是實(shí)際用戶的IP地址,因此這些用戶的IP地址不唯一。
6.答:D7.答:A,B8.答:A,D
9.答:C10.答:A,C11.答:C
12.答:C,D13.答:B,C14.答:C
15.答:B16.答:A17.答:C
18.答:A,B,D,F
19.答:具有很大的影響。該應(yīng)用程序?qū)⒉荒芫S護(hù)用戶的狀態(tài)。Servlet容器將為每個(gè)
客戶的每次請(qǐng)求都創(chuàng)建一個(gè)新的會(huì)話。修改這個(gè)問(wèn)題的唯一方法是修改Servlet代碼加入
URL重寫功能。
駕章習(xí)題解析
1.答:包含JSP指令、JSP小腳本和JSP表達(dá)式。
2.答:合法的JSP表達(dá)式:
<%=500%>
<%=anlnt*3.5/100-500%>
<%=aBool%>
<%=false%>
<%=!false%>
<%=getChar()%>
<%=Math.random()%>
<%=aFloatObj%>
<%=aFloatObj.floatValue()%>
<%=aFloatObj.toString()%>
不合法的JSP表達(dá)式:
<%=aVector%>
<%=aBool;%>
<%=inti=20%>
<%=sBuff.setLength(12);%>
3.答:C
4.答:正確聲明應(yīng)為:
<%!inti=5;%>
<%!intgetI(){returni;}%>
5.答:B是合法的。解析:JSP表達(dá)式中百分號(hào)和等號(hào)之間不能有空格。
6.答:D。解析:A中import的屬性值中應(yīng)該有等號(hào)。B的import屬性值應(yīng)該在一個(gè)字
符串中指定。C,屬性之間不允許有逗號(hào)。E,bgcolor不是合法的屬性名。F,true不是buffer
屬性合法值。G,指令名、屬性名和值都是大小寫敏感的,Page應(yīng)為page。
7.答:B,C
A.非法:等號(hào)表明它是表達(dá)式,但表達(dá)式不能以分號(hào)結(jié)束,產(chǎn)生的Servlet代碼將發(fā)生
語(yǔ)法錯(cuò)誤。
out.print(myObj.ml(););
B.合法:<%=x=y%>將被轉(zhuǎn)換成:
out.print(x=y);//y的值5賦給x并將其打印輸出
C.合法:這是合法的小腳本,因?yàn)樵诜椒ㄕ{(diào)用語(yǔ)句的后面有分號(hào)。即使該方法返回一
個(gè)值,它也是合法的,因?yàn)榉祷氐闹祵⒈缓雎浴?/p>
8.答:不能在小腳本中定義方法。上面代碼一旦被轉(zhuǎn)換成Servlet,」spService()方法
就會(huì)像下面這樣:
publicvoid_jspService(...){
//其他代碼
intx=0;
intincr(){return++x;}
out.write(nThevalueofxis*');
out.print(incr());
)
由于incr()方法定義在」spService()方法內(nèi),所以代碼不能編譯。
9.答:Thevalueofiis3
注意:如果代碼寫成下面形式:
<%int1;%>
<%for(i=0;i<3;i++)%>Thevalueofiis<%=i%>
輸出結(jié)果將為:
ThevalueofiisThevalueofiisThevalueofiis3
10.答:不能在japlnit()方法中使用application對(duì)象。
11.答:Thesumofxandyis9
變量x將被聲明兩次:一次是作為類的全局變量,因?yàn)槭褂昧?lt;%!由1*=5;%>語(yǔ)句,
另一次是在」spService。方法中聲明的局部變量,因?yàn)槭褂玫拇a是<%intx=3;%>o
1答
24.卷:B13.答:C,E
口:②③⑥④①⑤
5.答
out.write(n<html><body>\r\nn);
intcount=0;
out.write(nThepagecountisnow:\r\nn);
out.print(++count);
out.write("</body>〈/html>\r\n");
16.答:
Page改為page
<%1intcount=0%>//聲明缺少分號(hào)
<%count++;%>//去掉分號(hào)
17.答:D
18.答:
<%Floatone=newFloat(88.88)%>小腳本
<%!inty=3;聲明
<%@pageimport='*java.util.*n%>}'旨令
<jsp:includepage=Mfoo.jsp"/>動(dòng)作
<%=pageContext.getAttribute(ufoo")表達(dá)式
email:${applicationscope.mail}EL表達(dá)式
19.答:A,B,C,E20.答:A,B,C,D
21.答:D22.答:C
23.答:
request(javax.servlet.http.HttpServletRequest)
response(javax.servlet.http.HttpServletResponse)
out(javax.servlet.jsp.JspWriter)
session(javax.servlet.http.HttpSession)
application(javax.servlet.ServletContext)
config(javax.servlet.ServletConfig)
exception(java.lang.Throwable)
pageContext(javax.servlet.jsp.PageContext)
page(java.lang.Object)
24.答:共有4個(gè)作用域?qū)ο螅篴pplication>session、request和pageContext。fflsetAttribute()
方法和getAltribute。方法在這些對(duì)象上設(shè)置和獲得屬性。在叩plication作用域上的對(duì)象可以
被Servlet容器的所有的Web應(yīng)用程序訪問(wèn)。
25.答:可以使用pageContext的findAttribute。方法,該方法將依次在頁(yè)面作用域、請(qǐng)
求作用域、會(huì)話作用域和應(yīng)用作用域中查找指定名稱的屬性。
第。章習(xí)題解析
1.答:B2.答:⑤
3.答:這兩種表示等價(jià),但第?種表示使用了JSP腳本元素,第二種表示使用的是動(dòng)
作。它們的功能類似,但有一點(diǎn)細(xì)微的差別。pageContext.include。方法在包含其他組件之
前總是刷新當(dāng)前頁(yè)面的輸出,而vjsp:include>只有在flush屬性值明確設(shè)置為true時(shí)才刷新
當(dāng)前頁(yè)面的輸出,如下所示:
<jsp:includepage="other.jsp*'flush=ntrueH/>
4.答:請(qǐng)求對(duì)象的getParameter。方法的返回值類型是String,因此display.jsp中的
Integer應(yīng)改為String0使用vjsp:param>和request.getParameter()機(jī)制只能傳遞和梅索String
類型的參數(shù)。要傳遞其他對(duì)象類型的參數(shù),必須在包含頁(yè)面中使用request.setAttribute(),
在被包含頁(yè)面中使用request.getAttribute()0
5.答:D6.答:C7.答:B
8.答:可以。頁(yè)面customerDisplay.jsp文件可以使用vjsp:getProperty>輸出bean的屬性
值,只要它也包含一個(gè)與customerlnput.jsp相同的vjsp:useBean>聲明并且該聲明出現(xiàn)在
<jsp:getProperty>明前面即可。
9.答:
<%@pageimport=ncom.model.CustomerBean,com.model.BusinessCustomerBean'1%>
<jsp:useBeanid=ncustomerHclass=ncom.model.BusinessCustomerBean**
type=ncom.model.CustomerBean”scope=Happlicationn/>
<jsp:setPropertyname=Hcustomer"value=HSH/>
<jsp:setPropertyname=,,customernva1ue=118899123'*/>
</jsp:useBean>
10.答:不能在同一個(gè)vjsp:useBean>聲明中同時(shí)使用beanName和class屬性。
11.答:必須使用property指定bean的屬性。param用來(lái)指定請(qǐng)求參數(shù),并且不能在
同一個(gè)vjsp:setProperty>動(dòng)作中同時(shí)指定param和value屬性。
12.答:使用代碼段1是只有在指定作用域中找不到customer的bean對(duì)象時(shí)才執(zhí)行標(biāo)簽
體,使用代碼段2在任何時(shí)候都執(zhí)行屬性設(shè)置標(biāo)簽。
13.答:可以在一個(gè)動(dòng)作中設(shè)置bean的全部屬性:
<jsp:setPropertyname=nbeanNamenproperty=n*"/>
但不能在一個(gè)動(dòng)作中獲得全部屬性值。
14.答:C
15.答:MVC模式稱為模型-視圖-控制器模式。該模式將Web應(yīng)用的組件分為模型、
視圖和控制器,每種組件完成各自的任務(wù)。該模型將業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)從表示層分離出
來(lái)。實(shí)現(xiàn)MVC模式的一般步驟:(1)定義JavaBeans表示數(shù)據(jù);(2)使用Servlet處理請(qǐng)
求;(3)填寫JavaBeans對(duì)象數(shù)據(jù);(4)將結(jié)果存儲(chǔ)在作用域?qū)ο笾?;?)將請(qǐng)求轉(zhuǎn)發(fā)到
JSP頁(yè)面;(6)最后在JSP頁(yè)面中從JavaBeans中取出數(shù)據(jù)。
雪章習(xí)題解析
1.答:兩層模型即客戶機(jī)/服務(wù)器模型,在兩層模型中應(yīng)用程序直接通過(guò)JDBC驅(qū)動(dòng)程
序訪問(wèn)數(shù)據(jù)庫(kù)。三層模型是瀏覽器/應(yīng)用服務(wù)器/數(shù)據(jù)庫(kù)服務(wù)器結(jié)構(gòu),在該結(jié)構(gòu)中瀏覽器向
應(yīng)用服務(wù)器發(fā)出請(qǐng)求,應(yīng)用服務(wù)器通過(guò)JDBC驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù)。
2.答:傳統(tǒng)的數(shù)據(jù)庫(kù)連接的一般步驟是:(1)加載JDBC驅(qū)動(dòng)程序。(2)建立連接對(duì)
象。(3)創(chuàng)建語(yǔ)句對(duì)象,語(yǔ)句對(duì)象有3種:StatementsPreparedStatement和CallableStatement(,
(4)執(zhí)行SQL語(yǔ)句得到結(jié)果集對(duì)象,調(diào)用ResultSet的有關(guān)方法就可以完成對(duì)數(shù)據(jù)庫(kù)的操
作。(5)關(guān)閉建立的各種對(duì)象。
缺點(diǎn)是每次訪問(wèn)數(shù)據(jù)庫(kù)都要建立連接對(duì)象,請(qǐng)求結(jié)束需關(guān)閉連接對(duì)象。這將耗費(fèi)大量
的時(shí)間,可能導(dǎo)致增大請(qǐng)求的響應(yīng)時(shí)間。
3.答:連接Oracle數(shù)據(jù)庫(kù)代碼如下。
Class.forName("oracle.jdbc.driver.OracleDriver");
Stringdburl="jdbc:oracle:thin:@:1521:ORCL";
Connectionconn=Drivermanager.getConnection(dburl,"scott","tiger");
上述代碼中,oracle.jdbc.driver.OracleDriver為JDBC驅(qū)動(dòng)程序名,jdbc:oracle:thin:@
:1521:ORCL為JDBCURL。
4.答:使用數(shù)據(jù)源是目前Web應(yīng)用開(kāi)發(fā)中建立數(shù)據(jù)庫(kù)連接的首選方法。這種方法是
事先建立如干連接對(duì)象,存放在連接池中。當(dāng)應(yīng)用程序需要一個(gè)連接對(duì)象時(shí)就從連接池中
取出一個(gè),使用完后再放回連接池。這樣就可避免每次請(qǐng)求都創(chuàng)建連接對(duì)象,從而降低請(qǐng)
求的響應(yīng)時(shí)間,提高效率。
使用數(shù)據(jù)源建立連接是通過(guò)JNDI技術(shù)實(shí)現(xiàn)的。這需要首先配置數(shù)據(jù)源(可以是局部
數(shù)據(jù)源或全局?jǐn)?shù)據(jù)源),然后在應(yīng)用程序中通過(guò)Context對(duì)象查找數(shù)據(jù)源對(duì)象。假設(shè)己經(jīng)
配置了名為sampleDS的數(shù)據(jù)源,建立連接代碼如下:
Contextcontext=newInitialcontext();
DataSourcedataSource=context.lookup("java:comp/env/jdbc/sampleDS*');
ConnectiondbConnection=dataSource.getConnection();
5.答:可滾動(dòng)的ResultSet是指在結(jié)果集對(duì)象上不但可以向前訪問(wèn)結(jié)果集中的記錄,
還可以向后訪問(wèn)結(jié)果集中的記錄??筛碌腞esultSet是指不但可以訪問(wèn)結(jié)果集中的記錄,
還可以通過(guò)結(jié)果集對(duì)象更新數(shù)據(jù)庫(kù)。
要?jiǎng)?chuàng)建可滾動(dòng)、可更新的ResultSet對(duì)象,必須使用Connection對(duì)象的帶兩個(gè)參數(shù)的
createStatement()方法創(chuàng)建的Statement,第一個(gè)參數(shù)用下面兩個(gè)常量之一:
?ResultSet.TYPE_SCROLL_SENSITIVE
?ResultSet.TYPE_SCROLL_INSENSITIVE
第二個(gè)參數(shù)使用下面常量:
?ResultSet.CONCUR_UPDATABLE
6.參考程序如下:
packagecom.control;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassBookQueryServletextendsHttpServlet{
Connectiondbconn;
publicvoidinit(){
Stringdriver=norg.postgresql.Driver,';
Stringdburl=*'jdbc:postgresql://:5432/bookstore";
Stringusername="bookstore";
Stringpassword="bookstore”;
try(
Class.forName(driver);
dbconn=DriverManager.getConnection(
dburl,username,password);
}catch(ClassNotFoundExceptionel){
}catch(SQLExceptione2){}
)
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,lOException{
response.setContentType("text/html;charset=gb2312n);
Printwriterout=response.getWriter();
out.printin(n<html><body>");
out.printin(n<table>");
try(
Stringsql=nSELECT*FROMbooks";
Statementstmt=dbconn.createStatement();
ResultSetrst=stmt.executeQuery(sql);
while(rst.next()){
out.printin(n<tr><td>n+rst.getString(1)+n</td>n);
out.printin(n<td>n+rst.getString(2)+”</td>“);
out.printin(n<td>n+rst.getString(3)+n</td>n);
out.printin(n<td>n+rst.getString(4)+”</td>“);
out.printin(n<td>n+rst.getDouble(5)+n</td></tr>n);
)
}catch(SQLExceptione){
e.printStackTrace();
)
out.printin(“〈/table〉”);
out.printin(n</body></html>,');
)
publicvoiddestroy(){
try(
dbconn.close();
}catch(Exceptione){
e.printStackTrace();
}
)
}
7.JSP頁(yè)面如下:
<%@pagecontentType=ntext/html;charset=gb2312n%>
<%0pageimport=njava.sql.*,java.io.*n%>
<htmlxbody>
<%
Stringdriver=norg.postgresql.Driver,';
Stringdburl=njdbc:postgresql://:5432/bookstoren;
Stringusername="bookstore";
Stringpassword="bookstore";
try(
Class.forName(driver);
Connectiondbconn=DriverManager.getConnection(
dburl,username,password);
DatabaseMetaDatadbmd=dbconn.getMetaData();
out.printsIn("數(shù)據(jù)庫(kù)名:H+dbmd.getDatabaseProductName()+n</br>n);
out.printin("數(shù)據(jù)庫(kù)版本:"+dbmd.getDatabaseProductVersion()+n</br>n);
out.printIn("連接的用戶:"+dbmd.getUserName()+n</br>");
out.printin("數(shù)據(jù)庫(kù)URL:n+dbmd.getURL()+H</br>n);
out.printin("馬區(qū)動(dòng)程序名:"+dbmd.getDriverName()+"</br>n);
out.printin("馬區(qū)動(dòng)程序版本:n+dbmd.getDriverVersion()+n</br>,T);
}catch(ClassNotFoundExceptionel){
out.printin(el);
}catch(SQLExceptione2){
out.printin(e2);
)
%>
</body></html>
8.JSP頁(yè)面如下:
<%@pagecontentType=Htext/html;charset=gb2312"%>
<%@pageimport=njava.sql.*,java.io.**'%>
<htmlxbody>
<%
Stringdriver=norg.postgresql.DriverM;
Stringdburl="jdbc:postgresql://:5432/bookstore°;
Stringusername="bookstore";
Stringpassword="bookstore";
try{
Class.forName(driver);
Connectiondbconn=DriverManager.getConnection(
dburl,username,password);
Stringsql=nSELECT*FROMpublic.books";
Statementstmt=dbconn.createStatement();
ResultSetrst=stmt.executeQuery(sql);
ResuitSetMetaDatarstmd=rst.getMetaData();
out.printin("結(jié)果集歹U數(shù):n+rstmd.getColumnCount()+”</br>");
out.printIn("第3歹U標(biāo)題:"4-rstmd.getColumnLabel(3)+”</br>”);
out.printin3列名:n+rstmd.getColumnName(3)+n</br>");
out.printin("第3歹U類型:"+rstmd.getColumnType(3)+”</br>");
out.printIn(n3歹U類型名:n+rstmd.getColumnTypeName(3)+H</br>n);
}catch(ClassNotFoundExceptionel){
out.printin(el);
}catch(SQLExceptione2){
out.printIn(e2);
}
%>
</body></html>
9.按教材7.7.2節(jié)建立局部或全局?jǐn)?shù)據(jù)源sampleDS。創(chuàng)建程序7.9的CustomerBean.java
程序和程序7.10的SampleDAO.java程序。
SelectCustomerServlet.java代碼如下:
packagecom.control;
importjava.io.*;
importjava.sql.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importcom.model.CustomerBean;
importcom.model.SampleDAO;
publicclassSelectCustomerServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,lOException{
SampleDAOdao=newSampleDAO();
ArrayList<CustomerBean>custs=dao.selectCustomer();
request.setAttribute("custs",custs);
RequestDispatcherview=getServletContext().
getRequestDispatcher("/displaycustomer.jsp");
view.forward(request,response);
)
)
displayCustomer.jsp頁(yè)面代碼如卜:
<%0pagecontentType=,,text/html;charset=gb2312n%>
<%0pageimport=ncom.model.CustomerBean,java.util.*n%>
<html><head><title>DisplayCustomer</title></head>
<body>
<%
ArrayList<CustomerBean>custs=
(ArrayList<CustomerBean>)request.getAttribute("custs");
for(CustomerBeancb:custs){
out.printIn(cb.getCustName()+**"+cb.getEmail()+*'"
+cb.getPhone()+'*</br>n);
}
%>
</body></html>
10.首先在SampleDAO類中定義下面兩個(gè)字符串常量:
privatestaticfinalStringDELETE_SQL=
“DELETEFROMcustomerWHEREcustName=?n;
privatestaticfinalStringUPDATE_SQL=
"UPDATEcustomerSETemail=?,phone=?WHEREcustName=?H;
下面是刪除客戶和修改客戶的方法:
//按姓名刪除客戶記錄
publicbooleandeleteCustomer(StringcustName){
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrst=null;
CustomerBeancustomer=null;
try{
conn=dataSource.getConnection();
pstmt=conn.prepareStatement(DELETE_SQL);
pstmt.setstring(1,custName);
intn=pstmt.executeUpdate();
if(n==1){
returntrue;
}else{
returnfalse;
}
}catch(SQLExceptionse){
returnfalse;
}finally{
try(
pstmt.close();
conn.close();
}catch(SQLExceptionse){}
)
)
//修改客戶記錄
publicbooleanupdateCustomer(CustomerBeancustomer){
Connectionconn=null;
PreparedStatementpstmt=null;
try(
conn=dataSource.getConnection();
pstmt=conn.prepareStatement(UPDATE_SQL);
pstmt.setstring(1,customer.getEmail());
pstmt.setstring(2,customer.getPhone());
pstmt.setstring(3,customer.getCustName());
intn=pstmt.executeUpdate();
if(n==1){
returntrue;
}else{
returnfalse;
)
}catch(SQLExceptionse){
returnfalse;
}finally{
try(
pstmt.close();
conn.close();
}catch(SQLExceptionse){}
)
}
11.首先在PostgreSQL數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)求整數(shù)階乘的函數(shù)my_factorial(),代碼如下:
CREATEORREPLACEFUNCTIONmy_factorial(valueinteger)
RETURNSintegerAS$$
DECLARE
arginteger;
BEGIN
arg:=value;
IFargISNULLORarg<0THEN
RAISENOTICE*InvalidNumber1;
RETURNNULL;
ELSE
IFarg=1THEN
RETURN1;
ELSE
DECLARE
next_valueinteger;
BEGIN
next_value:=my_factorial(arg-1)*arg;一函數(shù)遞歸調(diào)用
RETURNnext_value;
END;
ENDIF;
ENDIF;
END;
$$LANGUAGE'plpgsql';
創(chuàng)建JSP頁(yè)面compute.jsp,連接數(shù)據(jù)庫(kù),調(diào)用存儲(chǔ)過(guò)程:
<%@pagecontentType=ntext/html;charsets=gb2312n%>
nH
<%0pageimport=java.sql.★fjava.io.*%>
<htmlxbody>
<formaction=Mnmethod="postH>
請(qǐng)輸入一個(gè)整數(shù):<inputtype=Htextnname="paramnsize=,,5H/>
<inputtype=wsubmitu確定”/>
</form>
<%
Stringdriver=Horg.postgresql.Driver;
Stringdburl=*'jdbc:postgresql://:5432/bookstoren;
Stringusername="bookstore";
Stringpassword="bookstore";
try{
Class.forName(driver);
Connectiondbconn=DriverManager.getConnection(
dburl,username,password);
Integernum=0;
if(request.getParameter("param")!=null)
num=Integer.parseInt(request.getParameter(nparamn));
Stringsql=H{?=callmy_factorial(?)}n;
CallableStatementcstmt=dbconn.prepareCall(sql);
cstmt.setInt(2,num);
cstmt.registerOutParameter(1,java.sql.Types.INTEGER);
cstmt.execute();
intresult=cstmt.getInt(1);
request.setAttribute(nresultn,result);
}catch(ClassNotFoundExceptionel){
out.printIn(el);
}catch(SQLExceptione2){
out.printIn(e2);
}catch(NumberFormatExceptione3){
out.printIn("輸入未合法!n);
}
%>
<p><%=request.getParameter("param”)宅>的階乘為:
<%=request.getAttribute("resultn)%></p>
</body></html>
該頁(yè)面的運(yùn)行結(jié)果如下:
地址U/http://1ocalhost:8080/helloapp/compute.jsp
請(qǐng)輸入一個(gè)整數(shù):5|晅
5的階乘為:120
12.略。
雪章習(xí)題解析
1.答:表達(dá)式語(yǔ)言是JSP頁(yè)面中使用的一種簡(jiǎn)潔的數(shù)據(jù)訪問(wèn)語(yǔ)言。它定義了運(yùn)算符實(shí)
現(xiàn)算術(shù)、關(guān)系等運(yùn)算;可以對(duì)作用域變量、JavaBeans對(duì)象、集合的元素、請(qǐng)求參數(shù)、Cookie
等進(jìn)行簡(jiǎn)單的訪問(wèn);還可以訪問(wèn)Java語(yǔ)言定義的函數(shù)(靜態(tài)方法)。
2.答:使用點(diǎn)(.)運(yùn)算符可以訪問(wèn)Map對(duì)象一個(gè)鍵的值和bean對(duì)象的屬性值。使用
方括號(hào)([])運(yùn)算符還可以List對(duì)象和數(shù)組對(duì)象的元素。
3.答:(1)作用域變量;(2)JavaBeans的屬性;(3)訪問(wèn)集合元素;(4)訪問(wèn)
隱含變量。
4.答:(1)定義public類和靜態(tài)方法;(2)創(chuàng)建標(biāo)簽庫(kù)描述文件(TLD);(3)
在JSP頁(yè)面中訪問(wèn)EL函數(shù)。
5.答:將page指令的isELIgnored屬性設(shè)置為true,如下所示:
<%@pageisELIgnored='*truen%>
6.答:A7.答:A8.答:E
9.答:B,E10.答:B
11.答:由于paramValues返回的是包含String口的Map,所以需要訪問(wèn)數(shù)組的單個(gè)元
素。使用${paramValues.result[O]}和${paramValues.resultJ'O"]}都可以,但使用
${paramValues.result.O}不可以。
記住,paramValues和headerValues返回String]]的Map對(duì)象。
12.答:A,C13.答:C14.答:A
15.答:D16.答:B
17.答:${(5+3>0)?true:false}
18.參考程序如下:
(1)定義Java函數(shù)
packagecom.demo;
publicclassFunctions{
publicstaticbooleanpalindrome(Strings){
intlow=0;
inthigh=s.length()-1;
while(low<high){
if(s.charAt(low)!=s.charAt(high))
returnfalse;
low++;
high——;
)
returntrue;
)
)
(2)創(chuàng)建標(biāo)簽庫(kù)描述文件
<?xmlversion=H1.0"encoding=**UTF-8*'?>
<taglibxmlns=n/xml/ns/j2een
xmlns:xsi=,,/2001/XMLSchema-instance"
xsi:schemaLocation=*'/xml/ns/j2ee
/xml/ns/j2ee/web-jsptaglibrary_2_0.xsdn
version='*2.0',>
<description>ASimpleTagLibrary</description>
<tlib-version>l.0</tlib-version>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電話銷售策略總結(jié)
- 旅游行業(yè)導(dǎo)游服務(wù)技巧總結(jié)
- 冷鏈物流保安工作總結(jié)
- 2023年廣西壯族自治區(qū)河池市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年吉林省白山市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年遼寧省鞍山市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年四川省綿陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 青海省果洛藏族自治州(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版階段練習(xí)(下學(xué)期)試卷及答案
- 2024年樓梯配件項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2025年梅毒診斷抗原項(xiàng)目申請(qǐng)報(bào)告
- GB/T 33859-2017環(huán)境管理水足跡原則、要求與指南
- GB/T 1927.4-2021無(wú)疵小試樣木材物理力學(xué)性質(zhì)試驗(yàn)方法第4部分:含水率測(cè)定
- GB/T 18838.5-2015涂覆涂料前鋼材表面處理噴射清理用金屬磨料的技術(shù)要求第5部分:鋼絲切丸
- 時(shí)間軸公司發(fā)展歷程企業(yè)大事記PPT模板
- 中國(guó)地圖各省圖標(biāo)(可拆分著色)
- 消防水系統(tǒng)綜合調(diào)試方案
- 《秦統(tǒng)一中國(guó)》教學(xué)反思
- 國(guó)家開(kāi)放大學(xué)《企業(yè)集團(tuán)財(cái)務(wù)管理》形考任務(wù)1-4參考答案
- 經(jīng)鼻腸梗阻導(dǎo)管護(hù)理課件
- 動(dòng)態(tài)變形模量Evd試驗(yàn)記錄
- 年產(chǎn)90000噸聚丁二烯工廠聚合工段的物料衡算
評(píng)論
0/150
提交評(píng)論