JavaWeb编程技术(沈泽刚版)教材习题习题与讲解_第1页
JavaWeb编程技术(沈泽刚版)教材习题习题与讲解_第2页
JavaWeb编程技术(沈泽刚版)教材习题习题与讲解_第3页
JavaWeb编程技术(沈泽刚版)教材习题习题与讲解_第4页
JavaWeb编程技术(沈泽刚版)教材习题习题与讲解_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章JavaWeb编程习题解析4.1第1章习题解析1.略。2.答:URL称为统一资源定位符,URL通常由4部分组成:协议名称、页面所在主机的DNS名、可选的端口号和资源的名称。URI称为统一资源标识符,是以特定语法标识一个资源的字符串。URI由模式和模式特有的部分组成,它们之间用冒号隔开,一般格式如下:schema:schema-specific-partURI是URL和URN的超集。3.答:4.答:动态Web文档技术包括服务器端动态文档技术和客户端动态文档技术,前者包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术。其中HTML页面中嵌入脚本技术包括ASP、PHP和JSP技术。动态文档技术是在HTML页面中嵌入JavaScript脚本代码。JavaScript可以动态文档不同,JavaScript脚本是在①是URL,①和②都是URI,③是URN最流行的客户端使用设计交互式页面。与服务器端客户端执行的。5.答:Servlet是用器是运行Servlet的软件,主要用来扩展Web服务器的6.答:开发Servlet的一般(1)编写Servlet源程序;(2)编译;(3)将Servlet部署到Servlet容器中;(4)访问执行Servlet。7.答:<tomcat-install>\lib\servlet-api.jar文件。8.答:部署描述文件名是web.xml,它是XML文件,应该存放在Web应用程序的\WEB-INF目录中。9.答:当服务器找不到用10.答:JSP页面是嵌入了Java脚本元素的HTML页面。11.答:Servlet主要用来实现业务逻辑和控制逻辑,JSP页面主ServletAPI开发的Java程序,它运行在Servlet容器中。Servlet容功能。步骤包括:户请求的资源时将发生404错误。要用来实现表示逻辑。4.2第2章习题解析1.答:Servlet接口定义了下面5个方法:publicvoidinit(ServletConfigconfig)publicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOExceptionpublicvoiddestroy()publicServletConfiggetServletConfig()publicStringgetServletInfo()2.答:Servlet是在容器中运行的组件,有一个从创建到销毁的过程,其中包括加载和实例化、初始化、提供服务以及销毁几个阶段。其中生命周期方法有init()、service()和destroy()等3个。3.答:发生下列事件,浏览器向服务器发出请求。(1)用户点击了HTML页面中的超链接;(2)用户在HTML页面中填写一个表单并点击提交按钮;(3)用户在浏览器的地址栏中输入URL并按回车键。4.答:查询串5.答:HTTP请求结构由请求行、请求头、空行和请求数据组成。请求行由方法名、请求资源的URI和使用的HTTP版本3部分组成。6.答:HTTP响应结构由状态行、响应头和响应数据3部分组成。状态行由HTTP版本、状态码和简短描述3部分组成。7.答:GET请求主要用来从服务器检索资源,POST请求主要用来向服务器发送数据。它们的详细比较8.答:在ServletRequet接口中定义了setAttribute()、getAttribute()、getAttributeNames()和removeAttribute()方法来处理请求作用域的属性9.答:forward()方法转发请求是服务器端控制权的转向,客户端地址栏中不显示转后的资源地址。sendRedirect()方法是服务器向浏览器发送302状态码,它使浏览器连接到新的位置,浏览器地址栏可看到地址的变化。使用重定向,资源不能位于WEB-INF目录中。10.答:可先通过请求对象的getParameterNames()方法得到Enumeration对象,然后过getParameter()得到请求参数值。12.答:B13.答:E请参阅教材的表2.8。。发在其上得11.答:A14.答:到每个请求参数名,再通action="courseServlet.do"HttpServletcom.demo.CourseServletcourseServlet第415.答:①E②D③C④B⑤A章JavaWeb编程习题解析93Java实验指导与习题解析4.3第3章习题解析1.答:Web应用程序是运行在应用服务器之中的。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。2.答:web.xml3.答:6.答:9.答:getServletConfig().getServletContext()或getServletContext()10.答:11.答:12.答:13.答:因为Applet只能运行在客户端,所以可以将它放在Web应用程序的文档根目任何位置,但不能将其放在WEB-INF目录或其子目录中14.答:bankapp\WEB-INFD4.答:A5.答:DF7.答:E8.答:DBBD录的。不能这样做,至少不能直接这样。部署描述文件不允许为一个名称指定多个参数,所以必须像下面这样:<init-param><param-name>countries</param-name><param-value>Australia,Brazil,India,UK,US</param-value><init-param>然后在Servlet中解析param-value串的值并解释字符串中列出的多个值。15.答:packagecom.demo;importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassHelloCounterServletextendsHttpServlet{privateIntegervisits=0;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();visits=visits+1;try{Thread.sleep(2000);}catch(InterruptedExceptione){log("Exceptionduringsleeping.");}out.println("<html><body>");out.println("欢迎您!<br>"+"该Servlet已被访问"+visits+"次。");out.println("</body></html>");}}修改后的Servlet如下:94packagecom.demo;importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassHelloCounterServletextendsHttpServlet{privateIntegervisits=0;privateStringdbPath=null;publicvoidinit(){try{dbPath=getServletContext().getRealPath("/WEB-INF/counter.db");FileInputStreamfis=newFileInputStream(dbPath);DataInputStreamdis=newDataInputStream(fis);visits=dis.readInt();dis.close();}catch(Exceptione){log("Errorloadingpersistentcounter",e);}}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();synchronized(this){visits=visits+1;out.println("<html><body>");out.println("欢迎您!<br>"+"该Servlet已被访问"+visits+"次。");out.println("</body></html>");}}publicvoiddestroy(){try{FileOutputStreamfos=newFileOutputStream(dbPath);DataOutputStreamdos=newDataOutputStream(fos);dos.writeInt(visits);dos.close();}catch(Exceptione){log("Errorstoringpersistentcounter",e);}}}4.4第4章习题解析1.答:使用请求对象(即HttpServletRequest接口)的getSession()方法。第42.答:如果客户在指定时间内没有访问服务器,则该会话超时。对超时的会话对象,服务器使其失效。通过会话对象的setMaxInactiveInterval()方法设置会话最大超时时间。章JavaWeb编程习题解析95Java实验指导与习题解析web.xml文件使用<session-config>元素的子元素<session-timeout>设置最大超时时间,如下所示。<session-config><session-timeout>20</session-timeout></session-config>这里的最大超时时间是对整个应用程序的所有会话有效,时间单位是分钟。setMaxInactiveInterval()方法参数单位是秒。3.答:有些客户浏览器可能不支持Cookie或用户阻止所有的Cookie,此时不能用Cookie实现会话。<session-timeout>元素指定的4.答:使用响应对象(即encodeRedirectURL()方法。5.答:不能。因为许多用户是通过代理服务器访问Internet的,此时服务器得到的是代IP地址而不是实际用户的IP地址,因此这些用户的IP地址不唯一。8.答:A,D11.答:14.答:17.答:HttpServletResponse接口)的encodeURL()方法或理服务器的6.答:9.答:12.答:C,D15.答:18.答:A,B,D,FD7.答:A,B10.答:A,C13.答:B,CCCCB16.答:AC19.答:具有很大的影响。该应用程序将不能维护用户的状态。Servlet容器将为每个客户的每次请求都创建一个新的会话。修改这个问题的唯一方法是修改Servlet代码加入URL重写功能。4.5第5章习题解析1.答:包含JSP指令、JSP小脚本和JSP。式2.答:合法的JSP:式<%=500%><%=anInt*3.5/100-500%><%=aBool%><%=false%><%=!false%><%=getChar()%><%=Math.random()%><%=aFloatObj%><%=aFloatObj.floatValue()%><%=aFloatObj.toString()%>不合法的JSP:式<%=aVector%><%=aBool;%><%=inti=20%><%=sBuff.setLength(12);%>963.答:C4.答:正确声明应为:<%!inti=5;%><%!intgetI(){returni;}%>5.答:6.答:D。解析:C,属性之间不允许有逗号。G,指令名、属性名和值都是大小写敏感的,Page应为page。7.答:B,CA.非法:等号表明但表达式不能以分号结束,产生的Servlet代码将发生语法错误。B是合法的。解析:JSP表达式中百分号和等号之间不能有空格。A中import的属性值中应该有等号。B的import属性值应该在一个字E,bgcolor不是合法的属性名。F,true不是buffer符串中指定。属性合法值。它是表达式,out.print(myObj.m1(););B.合法:<%=x=y%>将被转换成:out.print(x=y);//y的值5赋给x并将其打印输出C.合法:这是合法的小脚本,因为在方法调用语句的后面有分号。即使该方法返回一它也是合法的,因为返回的值8.答:不能在上面代码一旦被转换成Servlet,_jspService()方法个值,将被忽略。小脚本中定义方法。就会像下面这样:publicvoid_jspService(...){//其他代码intx=0;intincr(){return++x;}out.write("Thevalueofxis");out.print(incr());}由于incr()方法定义在_jspService()方法内,所以代码不能编译。9.答:Thevalueofiis3注意:如果代码写成下面形式:<%inti;%><%for(i=0;i<3;i++)%>Thevalueofiis<%=i%>输出结果将为:ThevalueofiisThevalueofiisThevalueofiis310.答:不能在japInit()方法中使用application对象。11.答:变量x将被声明两次:一次是作为类的另一次是在_jspService()方法中声明的局部变量,因为使用的12.答:13.答:C,EThesumofxandyis9全局变量,因为使用了<%!intx=5;%>语句,第4代码是<%intx=3;%>。B章JavaWeb编程习题解析97Java实验指导与习题解析14.答:②③⑥④①⑤15.答:out.write("<html><body>\r\n");intcount=0;out.write("Thepagecountisnow:\r\n");out.print(++count);out.write("</body></html>\r\n");16.答:Page改为page<%!intcount=0%>//声明缺少分号<%count++;%>//去掉分号17.答:D18.答:<%Floatone=newFloat(88.88)%><%!inty=3;%>小脚本声明<%@pageimport="java.util.*"%><jsp:includepage="foo.jsp"/><%=pageContext.getAttribute("foo")%>email:${applicationScope.mail}指令动作表达式EL表达式19.答:A,B,C,E20.答:A,B,C,D21.答:D22.答:C23.答:requestresponseoutsessionapplicationconfigexceptionpageContextpage(javax.servlet.http.HttpServletRequest)(javax.servlet.http.HttpServletResponse)(javax.servlet.jsp.JspWriter)(javax.servlet.http.HttpSession)(javax.servlet.ServletContext)(javax.servlet.ServletConfig)(java.lang.Throwable)(javax.servlet.jsp.PageContext)(java.lang.Object)24.答:共有4个作用域对象:application、session、request和pageContext。用setAttribute()方法和getAttribute()方法在这些对象上设置和获得属性。在application作用域上的对象可以被Servlet容器的所有的Web应用程序访问。25.答:可以使用pageContext的findAttribute()方法,该方法将依次在页面作用域、请求作用域、会话作用域和应用作用域中查找指定名称的属性。4.6第6章习题解析1.答:B2.答:⑤3.答:这两种表示等价,但第一种表示使用了JSP脚本元素,第二种表示使用的是动98作。它们的功能类似,但有一点细微的差别。pageContext.include()方法在包含其他组件之前总是刷新当前页面的输出,而<jsp:include>只有在flush属性值明确设置为true时才刷新当前页面的输出,如下所示:<jsp:includepage="other.jsp"flush="true"/>4.答:请求对象的getParameter()方法的返回值类型是String,因此display.jsp中的Integer应改为String。使用<jsp:param>和request.getParameter()机制只能传递和检索String类型的参数。要传递其他对象类型的参数,必须在包含页面中使用request.setAttribute(),在被包含页面中使用request.getAttribute()。5.答:D6.答:C7.答:B8.答:可以。页面customerDisplay.jsp文件可以使用<jsp:getProperty>输出bean的属性值,只要它也包含一个与customerInput.jsp相同的<jsp:useBean>声明并且该声明出现在<jsp:getProperty>声明前面即可。9.答:<%@pageimport="com.model.CustomerBean,com.model.BusinessCustomerBean"%><jsp:useBeanid="customer"class="com.model.BusinessCustomerBean"type="com.model.CustomerBean"scope="application"/><jsp:setPropertyname="customer"value="Smith@163.com"/><jsp:setPropertyname="customer"value=""/></jsp:useBean>10.答:不能在同一个<jsp:useBean>声明中同时使用beanName和class属性。11.答:必须使用property指定bean的属性。param用来指定请求参数,并且不能在同一个<jsp:setProperty>动作中同时指定param和value属性。12.答:使用代码段1是只有在指定作用域中找不到customer的bean对象时才执行标签体,使用代码段2在任何时候都执行属性设置标签。13.答:可以在一个动作中设置bean的全部属性:<jsp:setPropertyname="beanName"property="*"/>但不能在一个动作中获得全部属性值。14.答:C15.答:MVC模式称为模型-视图-控制器模式。该模式将Web应用的组件分为模型、视图和控制器,每种组件完成各自的任务。该模型将业务逻辑和数据访问从表来。实现MVC模式的一般步骤:(1)定义JavaBeans表示数据;(2)使用Servlet处理5)将请求转发到示层分离出请求;(3)填写JavaBeans对象数据;(4)将结果存储在作用域对象中;(JSP页面;(6)最后在JSP页面中从JavaBeans中取出数据。4.7第7章习题解析1.答:两层模型即客户机/服务数据库。三层模型是浏览器/应用服务应用服务器发出请求,应用服务器通过JDBC驱动程序访问数据库。器模型,在两层模型中应用程序直接通过JDBC驱动程第4序访问器/数据库服务器结构,在该结构中浏览器向章JavaWeb编程习题解析99Java实验指导与习题解析2.答:传统的数据库连接的一般步骤是:(3)创建语句对象,语句对象有3种:Statement、PreparedStatement和CallableStatement。(4)执行SQL语句得到结果集对象,调用ResultSet的有5)关闭建立的1)加载JDBC驱动程序。(2)建立连接对象。(关方法就可以完成对数据库的操作。(各种对象。缺点是每次访问数据库都要建立连接对象,请求结束需关闭连接对象。这将耗费大量的时间,可能导致增大请求的响应时间。3.答:连接Oracle数据库代码如下。Class.forName("oracle.jdbc.driver.OracleDriver");Stringdburl="jdbc:oracle:thin:@:1521:ORCL";Connectionconn=Drivermanager.getConnection(dburl,"scott","tiger");上述代码中,oracle.jdbc.driver.OracleDriver为JDBC驱动程序名,jdbc:oracle:thin:@:1521:ORCL为JDBCURL。4.答:源是目前Web应用开发中建立数据库连接的使用数据首选方法。这种方法是事先建立如干连接对象,存放在连接池中。当应用程序需要一个连接对象时就从连接池中取出一个,使用完后再放回连接池。这样就可避免每次请求都创建连接对象,从而降低请求的响应时间,提高效率。使用数据源建立连接是通过JNDI技术实现的。这需要首先配置数据源(可以是局部源或全局源),然后在应用程序中通过Context对象配置了名为sampleDS的数据数据数据查找数据源对象。假设已经源,建立连接代码如下:Contextcontext=newInitialContext();DataSourcedataSource=context.lookup("java:comp/env/jdbc/sampleDS");ConnectiondbConnection=dataSource.getConnection();5.答:还可以向后访问结果集中的还可以通过结果集对象可滚动、可更新的ResultSet对象,createStatement()方法创建的Statement,第一个参数用下面两可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录,记录。可更新的ResultSet是指不但可以访问结果集中的记录,更新数据库。要创建必须使用Connection对象的带两个参数的个常量之一:•ResultSet.TYPE_SCROLL_SENSITIVE•ResultSet.TYPE_SCROLL_INSENSITIVE第二个参数使用下面常量:•ResultSet.CONCUR_UPDATABLE6.参考程序如下:packagecom.control;importjava.io.*;importjava.sql.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassBookQueryServletextendsHttpServlet{100Connectiondbconn;publicvoidinit(){Stringdriver="org.postgresql.Driver";Stringdburl="jdbc:postgresql://:5432/bookstore";Stringusername="bookstore";Stringpassword="bookstore";try{Class.forName(driver);dbconn=DriverManager.getConnection(dburl,username,password);}catch(ClassNotFoundExceptione1){}catch(SQLExceptione2){}}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();out.println("<html><body>");out.println("<table>");try{Stringsql="SELECT*FROMbooks";Statementstmt=dbconn.createStatement();ResultSetrst=stmt.executeQuery(sql);while(rst.next()){out.println("<tr><td>"+rst.getString(1)+"</td>");out.println("<td>"+rst.getString(2)+"</td>");out.println("<td>"+rst.getString(3)+"</td>");out.println("<td>"+rst.getString(4)+"</td>");out.println("<td>"+rst.getDouble(5)+"</td></tr>");}}catch(SQLExceptione){e.printStackTrace();}out.println("</table>");out.println("</body></html>");}publicvoiddestroy(){try{dbconn.close();}catch(Exceptione){e.printStackTrace();}}}7.JSP页面如下:第4<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*,java.io.*"%><html><body>章JavaWeb编程习题解析101Java实验指导与习题解析<%Stringdriver="org.postgresql.Driver";Stringdburl="jdbc:postgresql://:5432/bookstore";Stringusername="bookstore";Stringpassword="bookstore";try{Class.forName(driver);Connectiondbconn=DriverManager.getConnection(dburl,username,password);DatabaseMetaDatadbmd=dbconn.getMetaData();out.println("数据库名:out.println("数据库版本:out.println("连接的用户:out.println("数据库URL:"+dbmd.getURL()+"</br>");out.println("驱动程序名:out.println("驱动程序版本:"+dbmd.getDatabaseProductName()+"</br>");"+dbmd.getDatabaseProductVersion()+"</br>");"+dbmd.getUserName()+"</br>");"+dbmd.getDriverName()+"</br>");"+dbmd.getDriverVersion()+"</br>");}catch(ClassNotFoundExceptione1){out.println(e1);}catch(SQLExceptione2){out.println(e2);}%></body></html>8.JSP页面如下:<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*,java.io.*"%><html><body><%Stringdriver="org.postgresql.Driver";Stringdburl="jdbc:postgresql://:5432/bookstore";Stringusername="bookstore";Stringpassword="bookstore";try{Class.forName(driver);Connectiondbconn=DriverManager.getConnection(dburl,username,password);Stringsql="SELECT*FROMpublic.books";Statementstmt=dbconn.createStatement();ResultSetrst=stmt.executeQuery(sql);ResultSetMetaDatarstmd=rst.getMetaData();out.println("结果集列数:out.println("第3列标题:out.println("第3列名:out.println("第3列类型:"+rstmd.getColumnType(3)+"</br>");out.println("第3列类型名:"+rstmd.getColumnCount()+"</br>");"+rstmd.getColumnLabel(3)+"</br>");"+rstmd.getColumnName(3)+"</br>");"+rstmd.getColumnTypeName(3)+"</br>");}catch(ClassNotFoundExceptione1){out.println(e1);}catch(SQLExceptione2){out.println(e2);102}%></body></html>9.按教材7.7.2节建立局部或全局数据源sampleDS。创建程序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,IOException{SampleDAOdao=newSampleDAO();ArrayList<CustomerBean>custs=dao.selectCustomer();request.setAttribute("custs",custs);RequestDispatcherview=getServletContext().getRequestDispatcher("/displayCustomer.jsp");view.forward(request,response);}}displayCustomer.jsp页面代码如下:<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="com.model.CustomerBean,java.util.*"%><html><head><title>DisplayCustomer</title></head><body><%ArrayList<CustomerBean>custs=(ArrayList<CustomerBean>)request.getAttribute("custs");for(CustomerBeancb:custs){out.println(cb.getCustName()+""+cb.getEmail()+""+cb.getPhone()+"</br>");}%></body></html>10.首先在SampleDAO类中定义下面两个字符串常量:第4privatestaticfinalStringDELETE_SQL="DELETEFROMcustomerWHEREcustName=?";privatestaticfinalStringUPDATE_SQL=章JavaWeb编程习题解析103Java实验指导与习题解析"UPDATEcustomerSETemail=?,phone=?WHEREcustName=?";下面是删除客户和修改客户的方法://按姓名删除客户记录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();104conn.close();}catch(SQLExceptionse){}}}11.首先在PostgreSQL数据库中创建一个求整数阶乘的函数my_factorial(),代码如下:CREATEORREPLACEFUNCTIONmy_factorial(valueinteger)RETURNSintegerAS$$DECLAREarginteger;BEGINarg:=value;IFargISNULLORarg<0THENRAISENOTICE'InvalidNumber';RETURNNULL;ELSEIFarg=1THENRETURN1;ELSEDECLAREnext_valueinteger;BEGINnext_value:=my_factorial(arg-1)*arg;--函数递归调用RETURNnext_value;END;ENDIF;ENDIF;END;$$LANGUAGE'plpgsql';创建JSP页面compute.jsp,连接数据库,调用存储过程:<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*,java.io.*"%><html><body><formaction=""method="post">请输入一个整数:<inputtype="text"name="param"size="5"/><inputtype="submit"value="确定"/></form><%Stringdriver="org.postgresql.Driver";Stringdburl="jdbc:postgresql://:5432/bookstore";Stringusername="bookstore";Stringpassword="bookstore";try{Class.forName(driver);Connectiondbconn=DriverManager.getConnection(dburl,username,password);Integernum=0;第4if(request.getParameter("param")!=null)num=Integer.parseInt(request.getParameter("param"));章JavaWeb编程习题解析105Stringsql="{?=callmy_factorial(?)}";CallableStatementcstmt=dbconn.prepareCall(sql);cstmt.setInt(2,num);cstmt.registerOutParameter(1,java.sql.Types.INTEGER);cstmt.execute();intresult=cstmt.getInt(1);request.setAttribute("result",result);}catch(ClassNotFoundExceptione1){out.println(e1);}catch(SQLExceptione2){out.println(e2);}catch(NumberFormatExceptione3){out.println("输入不合法!");}%><p><%=request.getParameter("param")%>的阶乘为:<%=request.getAttribute("result")%></p></body></html>该页面的运行结果如下:12.略。4.8第8章习题解析1.答:表达式语言是JSP页面中使用的一种简洁的数据访问语言。它定义了运算符实现算术、关系等运算;可以对作用域变量、JavaBeans对象、集合的元素、请求参数、Cookie;还可以访问Java语言定义的2.答:使用点(.)运算符可以访问Map对象一个键的值和bean对象的方括号([])运算符还可以List对象和数3.答:(1)作用域变量;(2)JavaBeans的属性;(3)访问等进行简单的访问函数(静态方法)。属性值。使用组对象的元素。集合元素;(4)访问隐含变量。4.答:在JSP页面中访问EL函数。5.答:将page指令的isELIgnored属性设置为true,如下(1)定义public类和静态方法;(2)创建标签库描述文件(TLD);(3)所示:<%@pageisELIgnored="true"%>6.答:A7.答:A8.答:E9.答:B,E10.答:B10611.答:由于素。使用${paramValues.result[0]}和${paramValues.result["0"]}都可以,但使用${paramValues.result.0}不可以paramValues和headerValues返回String[]的Map对象。12.答:A,C13.答:15.答:16.答:17.答:${(5+3>0)?true:false}paramValues返回的是包含String[]的Map,所以需要访问数组的单个元。记住,C14.答:ADB18.参考程序如下:(1)定义Java函数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)创建标签库描述文件<?xmlversion="1.0"encoding="UTF-8"?><taglibxmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>ASimpleTagLibrary</description><tlib-version>1.0</tlib-version><short-name>SimpleTagLibrary</short-name><uri>/sample</uri><function><description>checkpalindrome</description><name>palindrome</name><function-class>com.demo.Functions</function-class><function-signature>booleanpalindrome(java.lang.String)</function-signature></function></taglib>第4(3)在JSP页面中访问函数,palindrome.jsp。章<%@pagecontentType="text/html;charset=gb2312"%>JavaWeb编程习题解析107Java实验指导与习题解析<%@taglibprefix="demo"uri="/sample"%><html><head><title>UsingFunction</title></head><body><p>判断字符串是否是回文</p><formaction="palindrome.jsp"method="post">输入字符串:<inputtype="text"name="x"size="15"/><inputtype="submit"value="确定"></form>字符串:${param.x}${demo:palindrome(param.x)?"是":"不是"}回文。</body></html>4.9第9章习题解析1.答:自定义标签的开发步骤:(1)创建标签处理类;(2)创建标签库描述文件TLD;(3)在JSP页面中引入2.答:下面按容器调用的顺序列出SimpleTag接口定标签库和使用标签。义的方法:publicvoidsetJspContext(JspContextpc)publicvoidsetParent(JspTagparent)publicvoidsetJspBody(JspFragmentjspBody)publicJspTaggetParent()publicvoiddoTag()throwsJspException,IOException3.答:6.答:9.答:11.答:C4.答:7.答:10.答:mimerandomthingsadviceusertrueC5.答:BDD8.答:ABF12.答:B,D15.答:B,F13.答:B14.答:B,C17.答:在TLD文件中定16.答:A义标签代码如下:<uri>/sample</uri><tag><name>echotag</name><tag-class>beans.EchoAttributesTag</tag-class><body-content>empty</body-content><danamic-attributes>true</danamic-attributes></tag>在JSP页面echoattribute.jsp中使用该标签:<%@pagecontentType="text/html;charset=gb2312"%><%@taglibprefix="demo"uri="/sample"%><html><body><p>动态属性的使用</p><demo:echotagone="111"two="222"three="333"></body></html>1084.10第10章习题解析1.答:获得JSTL有两种方法。(是jakarta-taglibs-standard-1.1.2.zip,将该文件解压到一个目录中,将其中stantard.jar文件复制到应用程序的WEB-INF\lib目录中即完成安装。(\webapps\examples\WEB-INF\lib目录中将上述两个文件复制到应用程序的WEB-INF\lib目录中。1)到下载,下载的文件名lib目录中的jstl.jar2)从Tomcat文件和安装目录的2.答:不需要。因为TLD文件包含在standard.jar文件中,容器能够自动找到该文件。3.答:通用目的的标签:<c:out>、<c:set>、<c:remove>、<c:catch>。条件控制标签:<c:if>、<c:choose>、<c:when>、<c:otherwise>。循环控制标签:URL处理标签:<c:url>、<c:import>、<c:redirect>、<c:param>。4.答:D。简单标签的标签体中不能包含脚本元素。<c:forEach>、<c:forToken>。5.答:在浏览器中输出下面一行。0369121518212427306.答:8.答:10.答:①varStatus11.答:12.答:将example.tag标签文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论