欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《JavaWeb编程技术》课后习题答案.docx

    • 资源ID:60084393       资源大小:75.50KB        全文页数:20页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《JavaWeb编程技术》课后习题答案.docx

    Java Web编程习题解析 第1章习题解析1. 略。什么是URL,什么是URI,它们都由哪几个部分组成,URL和URI之间有什么关系 ?2. 答:URL称为统一资源定位符, URL通常由4部分组成:协议名称、页面所在主机的DNS名、可选的端口号和资源的名称。URI称为统一资源标识符,是以特定语法标识一个资源的字符串。URI由模式和模式特有的部分组成,它们之间用冒号隔开,一般格式如下:schema:schema-specific-part URI是URL和URN的超集。3. 答:是URL,和都是URI,是URN动态web文档技术有哪些?服务器端动态文档技术的客户端动态文档技术有何不同?4. 答:动态Web文档技术包括服务器端动态文档技术和客户端动态文档技术,前者包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术。其中HTML页面中嵌入脚本技术包括ASP、PHP和JSP技术。最流行的客户端动态文档技术是在HTML页面中嵌入JavaScript脚本代码。使用JavaScript可以设计交互式页面。与服务器端动态文档不同,JavaScript脚本是在客户端执行的。什么是Servlet?什么是Servlet容器?它的主要作用是什么?5. 答:Servlet是用Servlet API开发的Java程序,它运行在Servlet容器中。Servlet容器是运行Servlet的软件,主要用来扩展Web服务器的功能。简述开发一个Servlet的上体步骤6. 答:开发Servlet的一般步骤包括:(1)编写Servlet源程序;(2)编译;(3)将Servlet部署到Servlet容器中;(4)访问执行Servlet。要使一个Servlet能够正确编译的运行,应该将什么文件加到CLASSPATH环境变量中?7. 答:<tomcat-install>libservlet-api.jar文件。应用程序的部署描述文件名是什么?它是什么类型的文件?应该存放在什么目录中?8. 答:部署描述文件名是web.xml,它是XML文件,应该存放在Web应用程序的WEB-INF目录中。什么是错误?9. 答:当服务器找不到用户请求的资源时将发生404错误。什么是JSP页面?它与HTML页面有什么关系?10. 答:JSP页面是嵌入了Java脚本元素的HTML页面。Servlet与JSP各适用于什么场合?11. 答:Servlet主要用来实现业务逻辑和控制逻辑,JSP页面主要用来实现表示逻辑。 第2章习题解析Servlet接口中定义了哪几个方法?1. 答:Servlet接口定义了下面5个方法:public void init(ServletConfig config) public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException public void destroy() public ServletConfig getServletConfig() public String getServletInfo()简述Servlet的生命周期,生命周期方法有哪几个?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请求主要用来向服务器发送数据。它们的详细比较请参阅教材的表2.8。8. 答:在ServletRequet接口中定义了setAttribute()、getAttribute()、getAttributeNames()和removeAttribute()方法来处理请求作用域的属性。9. 答:forward()方法转发请求是服务器端控制权的转向,客户端地址栏中不显示转发后的资源地址。sendRedirect()方法是服务器向浏览器发送302状态码,它使浏览器连接到新的位置,浏览器地址栏可看到地址的变化。使用重定向,资源不能位于WEB-INF目录中。10. 答:可先通过请求对象的getParameterNames()方法得到Enumeration对象,然后在其上得到每个请求参数名,再通过getParameter()得到请求参数值。11. 答:A 12. 答:B 13. 答:E14. 答: action="courseServlet.do" HttpServlet com.demo.CourseServlet courseServlet15. 答: E D C B A 第3章习题解析1. 答:Web应用程序是运行在应用服务器之中的。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。2. 答:web.xml bankappWEB-INF3. 答:D 4. 答:A 5. 答:D6. 答:F 7. 答:E 8. 答:D9. 答:getServletConfig().getServletContext()或getServletContext()10. 答:B 11. 答:B 12. 答:D13. 答:因为Applet只能运行在客户端,所以可以将它放在Web应用程序的文档根目录的任何位置,但不能将其放在WEB-INF目录或其子目录中。14. 答:不能这样做,至少不能直接这样。部署描述文件不允许为一个名称指定多个参数,所以必须像下面这样:<init-param><param-name>countries</param-name><param-value>Australia,Brazil,India,UK,US</param-value><init-param> 然后在Servlet中解析param-value串的值并解释字符串中列出的多个值。15. 答:package com.demo;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class HelloCounterServlet extends HttpServlet private Integer visits = 0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); visits = visits +1; try Thread.sleep(2000); catch(InterruptedException e) log("Exception during sleeping."); out.println("<html><body>"); out.println("欢迎您!<br>" + "该Servlet已被访问 " + visits +" 次。"); out.println("</body></html>"); 修改后的Servlet如下:package com.demo;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class HelloCounterServlet extends HttpServlet private Integer visits = 0; private String dbPath = null; public void init() trydbPath = getServletContext().getRealPath("/WEB-INF/counter.db");FileInputStream fis = new FileInputStream(dbPath);DataInputStream dis = new DataInputStream(fis);visits = dis.readInt();dis.close();catch(Exception e)log("Error loading persistent counter", e); public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); synchronized(this) visits = visits +1; out.println("<html><body>"); out.println("欢迎您!<br>" +"该Servlet已被访问 " + visits +" 次。"); out.println("</body></html>"); public void destroy()tryFileOutputStream fos = new FileOutputStream(dbPath);DataOutputStream dos = new DataOutputStream(fos);dos.writeInt(visits);dos.close();catch(Exception e)log("Error storing persistent counter", e); 第4章习题解析1. 答:使用请求对象(即HttpServletRequest接口)的getSession()方法。2. 答:如果客户在指定时间内没有访问服务器,则该会话超时。对超时的会话对象,服务器使其失效。通过会话对象的setMaxInactiveInterval()方法设置会话最大超时时间。web.xml文件使用<session-config>元素的子元素<session-timeout>设置最大超时时间,如下所示。<session-config><session-timeout>20</session-timeout></session-config>这里的最大超时时间是对整个应用程序的所有会话有效,<session-timeout>元素指定的时间单位是分钟。setMaxInactiveInterval()方法参数单位是秒。3. 答:有些客户浏览器可能不支持Cookie或用户阻止所有的Cookie,此时不能用Cookie实现会话。4. 答:使用响应对象(即HttpServletResponse接口)的encodeURL()方法或encodeRedirectURL()方法。5. 答:不能。因为许多用户是通过代理服务器访问Internet的,此时服务器得到的是代理服务器的IP地址而不是实际用户的IP地址,因此这些用户的IP地址不唯一。6. 答:D 7. 答:A, B 8. 答:A, D9. 答:C 10. 答:A,C 11. 答:C12. 答:C, D 13. 答:B,C 14. 答:C15. 答:B 16. 答:A 17. 答:C18. 答:A,B,D,F 19. 答:具有很大的影响。该应用程序将不能维护用户的状态。Servlet容器将为每个客户的每次请求都创建一个新的会话。修改这个问题的唯一方法是修改Servlet代码加入URL重写功能。 第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; %><%= int i = 20 %><%= sBuff.setLength(12); %>3. 答:C4. 答:正确声明应为:<%! int i = 5; %><% !int getI() return i; %>5. 答:B是合法的。解析:JSP表达式中百分号和等号之间不能有空格。6. 答:D。解析:A中import的属性值中应该有等号。B的import属性值应该在一个字符串中指定。C,属性之间不允许有逗号。E,bgcolor不是合法的属性名。F,true不是buffer属性合法值。G,指令名、属性名和值都是大小写敏感的,Page应为page。7. 答:B,CA.非法:等号表明它是表达式,但表达式不能以分号结束,产生的Servlet代码将发生语法错误。out.print(myObj.m1(););B.合法:<%=x=y%>将被转换成:out.print(x=y); / y的值5赋给x并将其打印输出C. 合法:这是合法的小脚本,因为在方法调用语句的后面有分号。即使该方法返回一个值,它也是合法的,因为返回的值将被忽略。8. 答:不能在小脚本中定义方法。上面代码一旦被转换成Servlet,_jspService()方法就会像下面这样:public void _jspService(.)/ 其他代码int x = 0;int incr() return +x; out.write("The value of x is ");out.print(incr();由于incr()方法定义在_jspService()方法内,所以代码不能编译。9. 答:The value of i is 3注意:如果代码写成下面形式:<% int i; %><% for(i = 0; i<3; i+)%>The value of i is <%=i%>输出结果将为:The value of i is The value of i is The value of i is 310. 答:不能在japInit()方法中使用application对象。11. 答:The sum of x and y is 9变量x将被声明两次:一次是作为类的全局变量,因为使用了<%! int x = 5; %>语句,另一次是在_jspService()方法中声明的局部变量,因为使用的代码是<% int x = 3; %>。12. 答:B 13. 答:C,E14. 答:15. 答:out.write("<html><body>rn");int count = 0 ;out.write(" The page count is now:rn");out.print( +count );out.write("</body></html>rn");16. 答:Page改为page <%! int count = 0 %> / 声明缺少分号<% count+; %> / 去掉分号 17. 答:D18. 答: <% Float one = new Float(88.88) %> 小脚本 <%! int y = 3; %> 声明 <% page import="java.util.*" %> 指令 <jsp:include page="foo.jsp" /> 动作 <%=pageContext.getAttribute("foo") %> 表达式 email:$applicationScope.mail EL表达式19. 答:A,B,C,E 20. 答:A,B,C,D21. 答:D 22. 答:C23. 答: 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个作用域对象:application、session、request和pageContext。用setAttribute()方法和getAttribute()方法在这些对象上设置和获得属性。在application作用域上的对象可以被Servlet容器的所有的Web应用程序访问。25. 答:可以使用pageContext的findAttribute()方法,该方法将依次在页面作用域、请求作用域、会话作用域和应用作用域中查找指定名称的属性。 第6章习题解析1. 答:B 2. 答:3. 答:这两种表示等价,但第一种表示使用了JSP脚本元素,第二种表示使用的是动作。它们的功能类似,但有一点细微的差别。pageContext.include()方法在包含其他组件之前总是刷新当前页面的输出,而<jsp:include>只有在flush属性值明确设置为true时才刷新当前页面的输出,如下所示: <jsp:include page="other.jsp" flush="true" />4. 答:请求对象的getParameter()方法的返回值类型是String,因此display.jsp中的Integer应改为String。使用<jsp:param>和request.getParameter()机制只能传递和检索String类型的参数。要传递其他对象类型的参数,必须在包含页面中使用request.setAttribute(),在被包含页面中使用request.getAttribute()。5. 答:D 6. 答:C 7. 答:B8. 答:可以。页面customerDisplay.jsp文件可以使用<jsp:getProperty>输出bean的属性值,只要它也包含一个与customerInput.jsp相同的<jsp:useBean>声明并且该声明出现在<jsp:getProperty>声明前面即可。9. 答:<% page import="com.model.CustomerBean,com.model.BusinessCustomerBean"%><jsp:useBean id="customer" class="com.model.BusinessCustomerBean"type="com.model.CustomerBean" scope="application"/><jsp:setProperty name="customer" value="Smith"/><jsp:setProperty name="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:setProperty name="beanName" property="*" />但不能在一个动作中获得全部属性值。14. 答:C15. 答:MVC模式称为模型-视图-控制器模式。该模式将Web应用的组件分为模型、视图和控制器,每种组件完成各自的任务。该模型将业务逻辑和数据访问从表示层分离出来。实现MVC模式的一般步骤:(1)定义JavaBeans表示数据;(2)使用Servlet处理请求;(3)填写JavaBeans对象数据;(4)将结果存储在作用域对象中;(5)将请求转发到JSP页面;(6)最后在JSP页面中从JavaBeans中取出数据。 第7章习题解析1. 答:两层模型即客户机/服务器模型,在两层模型中应用程序直接通过JDBC驱动程序访问数据库。三层模型是浏览器/应用服务器/数据库服务器结构,在该结构中浏览器向应用服务器发出请求,应用服务器通过JDBC驱动程序访问数据库。2. 答:传统的数据库连接的一般步骤是:(1)加载JDBC驱动程序。(2)建立连接对象。(3)创建语句对象,语句对象有3种:Statement、PreparedStatement和CallableStatement。(4)执行SQL语句得到结果集对象,调用ResultSet的有关方法就可以完成对数据库的操作。(5)关闭建立的各种对象。缺点是每次访问数据库都要建立连接对象,请求结束需关闭连接对象。这将耗费大量的时间,可能导致增大请求的响应时间。3. 答:连接Oracle数据库代码如下。Class.forName("oracle.jdbc.driver.OracleDriver"); String dburl = "jdbc:oracle:thin:127.0.0.1:1521:ORCL"Connection conn = Drivermanager.getConnection(dburl, "scott", "tiger");上述代码中,oracle.jdbc.driver.OracleDriver为JDBC驱动程序名,jdbc:oracle:thin: 127.0.0.1:1521:ORCL为JDBC URL。4. 答:使用数据源是目前Web应用开发中建立数据库连接的首选方法。这种方法是事先建立如干连接对象,存放在连接池中。当应用程序需要一个连接对象时就从连接池中取出一个,使用完后再放回连接池。这样就可避免每次请求都创建连接对象,从而降低请求的响应时间,提高效率。使用数据源建立连接是通过JNDI技术实现的。这需要首先配置数据源(可以是局部数据源或全局数据源),然后在应用程序中通过Context对象查找数据源对象。假设已经配置了名为sampleDS的数据源,建立连接代码如下:Context context = new InitialContext();DataSource dataSource = context.lookup("java:comp/env/jdbc/sampleDS");Connection dbConnection = dataSource.getConnection();5. 答:可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录,还可以向后访问结果集中的记录。可更新的ResultSet是指不但可以访问结果集中的记录,还可以通过结果集对象更新数据库。要创建可滚动、可更新的ResultSet对象,必须使用Connection对象的带两个参数的createStatement()方法创建的Statement,第一个参数用下面两个常量之一:· ResultSet.TYPE_SCROLL_SENSITIVE · ResultSet.TYPE_SCROLL_INSENSITIVE 第二个参数使用下面常量:· ResultSet.CONCUR_UPDATABLE6. 参考程序如下:package com.control;import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;public class BookQueryServlet extends HttpServlet Connection dbconn; public void init() String driver = "org.postgresql.Driver" String dburl = "jdbc:postgresql:/127.0.0.1:5432/bookstore" String username = "bookstore" String password = "bookstore" try Class.forName(driver); dbconn = DriverManager.getConnection( dburl,username,password); catch(ClassNotFoundException e1) catch(SQLException e2) public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<table>"); try String sql="SELECT * FROM books" Statement stmt = dbconn.createStatement(); ResultSet rst = 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(SQLException e) e.printStackTrace(); out.println("</table>"); out.println("</body></html>"); public void destroy() try dbconn.close(); catch(Exception e) e.printStackTrace(); 7. JSP页面如下:<% page contentType="text/html;charset=gb2312" %><% page import="java.sql.*,java.io.*"%><html><body> <% String driver = "org.postgresql.Driver" String dburl = "jdbc:postgresql:/127.0.0.1:5432/bookstore" String username = "bookstore" String password = "bookstore" try Class.forName(driver); Connection dbconn = DriverManager.getConnection( dburl,username,password); DatabaseMetaData dbmd = dbconn.getMetaData(); out.println("数据库名:"+dbmd.getDatabaseProductName()+"</br>"); out.println("数据库版本:"+dbmd.getDatabaseProductVersion()+"</br>"); out.println("连接的用户:"+dbmd.getUserName()+"</br>"); out.println("数据库URL:"+dbmd.getURL()+"</br>"); out.println("驱动程序名:"+dbmd.getDriverName()+"</br>"); out.println("驱动程序版本:"+dbmd.getDriverVersion()+"</br>"); catch(ClassNotFoundException e1) out.println(e1); catch(SQLException e2) out.println(e2); %></body></html>8. JSP页面如下:<% page contentType="text/html;charset=gb2312" %><% page import="java.sql.*,java.io.*"%><html><body> <% String driver = "org.postgresql.Driver" String dburl = "jdbc:postgresql:/127.0.0.1:5432/bookstore" String username = "bookstore" String password = "bookstore" try Class.forName(driver); Connection dbconn = DriverManager.getConnection( dburl,username,password); String sql="SELECT * FROM public.books" Statement stmt = dbconn.createStatement(); ResultSet rs

    注意事项

    本文(《JavaWeb编程技术》课后习题答案.docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开