admin 管理员组文章数量: 887239
2024年1月12日发(作者:netstat命令原理)
第4章4.1 第1章习题解析schema:schema-specific-part
Java Web编程习题解析1. 略。2. 答:URL称为统一资源定位符, URL通常由4部分组成:协议名称、页面所在主机的DNS名、可选的端口号和资源的名称。URI称为统一资源标识符,是以特定语法标识一个资源的字符串。URI由模式和模式特有的部分组成,它们之间用冒号隔开,一般格式如下:URI是URL和URN的超集。3. 答:①是URL,①和②都是URI,③是URN4. 答:动态Web文档技术包括服务器端动态文档技术和客户端动态文档技术,前者包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术。其中HTML页面中嵌入脚本技术包括ASP、PHP和JSP技术。最流行的客户端动态文档技术是在HTML页面中嵌入JavaScript脚本代码。使用JavaScript可以设计交互式页面。与服务器端动态文档不同,JavaScript脚本是在客户端执行的。5. 答:Servlet是用Servlet API开发的Java程序,它运行在Servlet容器中。Servlet容器是运行Servlet的软件,主要用来扩展Web服务器的功能。6. 答:开发Servlet的一般步骤包括:(1)编写Servlet源程序;(2)编译;(3)将Servlet部署到Servlet容器中;(4)访问执行Servlet。7. 答:
4.2 第2章习题解析 action="" HttpServlet Servlet courseServletpublic void init(ServletConfig config) public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException public void destroy() public ServletConfig getServletConfig() public String getServletInfo()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. 答:15. 答: ① E ② D ③ C ④ B ⑤ A
1. 答:Servlet接口定义了下面5个方法: Java Web编程习题解析93第4章
94Java实验指导与习题解析
4.3 第3章习题解析1. 答:Web应用程序是运行在应用服务器之中的。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。2. 答: 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. 答:不能这样做,至少不能直接这样。部署描述文件不允许为一个名称指定多个参数,所以必须像下面这样:修改后的Servlet如下:package ;import t.*;import .*;import .*;
HttpServletResponse response) throws IOException,ServletException { tentType("text/html;charset=gb2312"); PrintWriter out = ter();
visits = visits +1; try{ (2000); }catch(InterruptedException e){ log("Exception during sleeping."); } n("
"); n("欢迎您!" + "该Servlet已被访问 " + visits +" 次。"); n(""); }}
4.4 第4章习题解析package ;import t.*;import .*;import .*;public class HelloCounterServlet extends HttpServlet{ private Integer visits = 0; private String dbPath = null; public void init(){ try{dbPath = getServletContext().getRealPath("/WEB-INF/");FileInputStream fis = new FileInputStream(dbPath);DataInputStream dis = new DataInputStream(fis);visits = t();();}catch(Exception e){log("Error loading persistent counter", e);} } public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException,ServletException { tentType("text/html;charset=gb2312"); PrintWriter out = ter();
synchronized(this){ visits = visits +1; n("
"); n("欢迎您!" +"该Servlet已被访问 " + visits +" 次。"); n(""); } } public void destroy(){try{FileOutputStream fos = new FileOutputStream(dbPath);DataOutputStream dos = new DataOutputStream(fos);nt(visits);();}catch(Exception e){log("Error storing persistent counter", e);}}}1. 答:使用请求对象(即HttpServletRequest接口)的getSession()方法。2. 答:如果客户在指定时间内没有访问服务器,则该会话超时。对超时的会话对象,服务器使其失效。通过会话对象的setMaxInactiveInterval()方法设置会话最大超时时间。 Java Web编程习题解析95第4章
96Java实验指导与习题解析
12. 答:C, D
15. 答:B
18. 答:A,B,D,F
4.5 第5章习题解析不合法的JSP表达式:13. 答:B,C
16. 答:A
3. 答:C4. 答:正确声明应为:B.合法:<%=x=y%>将被转换成:输出结果将为:(myObj.m1(););<%! int i = 5; %><% !int getI() { return i; } %>(x=y); // y的值5赋给x并将其打印输出public void _jspService(...){// 其他代码int x = 0;int incr() { return ++x; }("The value of x is ");(incr());}由于incr()方法定义在_jspService()方法内,所以代码不能编译。9. 答:The value of i is 3注意:如果代码写成下面形式:10. 答:不能在japInit()方法中使用application对象。<% 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 35. 答:B是合法的。解析:JSP表达式中百分号和等号之间不能有空格。6. 答:D。解析:A中import的属性值中应该有等号。B的import属性值应该在一个字符串中指定。C,属性之间不允许有逗号。E,bgcolor不是合法的属性名。F,true不是buffer属性合法值。G,指令名、属性名和值都是大小写敏感的,Page应为page。7. 答:B,CA.非法:等号表明它是表达式,但表达式不能以分号结束,产生的Servlet代码将发生语法错误。11. 答:The sum of x and y is 9变量x将被声明两次:一次是作为类的全局变量,因为使用了<%! int x = 5; %>语句,另一次是在_jspService()方法中声明的局部变量,因为使用的代码是<% int x = 3; %>。12. 答:B 13. 答:C,EC. 合法:这是合法的小脚本,因为在方法调用语句的后面有分号。即使该方法返回一个值,它也是合法的,因为返回的值将被忽略。8. 答:不能在小脚本中定义方法。上面代码一旦被转换成Servlet,_jspService()方法就会像下面这样: Java Web编程习题解析97第4章
98Java实验指导与习题解析
18. 答:16. 答:17. 答:D14. 答:②③⑥④①⑤15. 答:24. 答:共有4个作用域对象:application、session、request和pageContext。用setAttribute()方法和getAttribute()方法在这些对象上设置和获得属性。在application作用域上的对象可以被Servlet容器的所有的Web应用程序访问。25. 答:可以使用pageContext的findAttribute()方法,该方法将依次在页面作用域、请求作用域、会话作用域和应用作用域中查找指定名称的属性。 <% Float one = new Float(88.88) %> 小脚本 <%! int y = 3; %> 声明 <%@ page import=".*" %> 指令
21. 答:D
23. 答:
Page改为page <%! int count = 0 %> // 声明缺少分号<% count++; %> // 去掉分号
("
rn");int count = 0 ;(" The page count is now:rn");( ++count );("rn");20. 答:A,B,C,D22. 答:Crequest (rvletRequest)response (rvletResponse)out (ter)session (ssion)application (tContext)config (tConfig)exception (ble )pageContext (ntext)page ()1. 答:B 2. 答:⑤3. 答:这两种表示等价,但第一种表示使用了JSP脚本元素,第二种表示使用的是4. 答:请求对象的getParameter()方法的返回值类型是String,因此中的Integer应改为String。使用
转发到JSP页面;(6)最后在JSP页面中从JavaBeans中取出数据。
100Java实验指导与习题解析
6. 参考程序如下:第二个参数使用下面常量:_UPDATABLEpackage l;import .*;import .*;import t.*;import .*;e("Driver");
String dburl = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";Connection conn = nection(dburl, "scott", "tiger");2. 答:传统的数据库连接的一般步骤是:(1)加载JDBC驱动程序。(2)建立连接对象。(3)创建语句对象,语句对象有3种:Statement、PreparedStatement和CallableStatement。(4)执行SQL语句得到结果集对象,调用ResultSet的有关方法就可以完成对数据库的操作。(5)关闭建立的各种对象。缺点是每次访问数据库都要建立连接对象,请求结束需关闭连接对象。这将耗费大量的时间,可能导致增大请求的响应时间。3. 答:连接Oracle数据库代码如下。上述代码中,Driver为JDBC驱动程序名,jdbc:oracle:thin:@
127.0.0.1:1521:ORCL为JDBC URL。4. 答:使用数据源是目前Web应用开发中建立数据库连接的首选方法。这种方法是事先建立如干连接对象,存放在连接池中。当应用程序需要一个连接对象时就从连接池中取出一个,使用完后再放回连接池。这样就可避免每次请求都创建连接对象,从而降低请求的响应时间,提高效率。使用数据源建立连接是通过JNDI技术实现的。这需要首先配置数据源(可以是局部数据源或全局数据源),然后在应用程序中通过Context对象查找数据源对象。假设已经配置了名为sampleDS的数据源,建立连接代码如下:Context context = new InitialContext();DataSource dataSource = ("java:comp/env/jdbc/sampleDS");Connection dbConnection = nection();5. 答:可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录,还可以向后访问结果集中的记录。可更新的ResultSet是指不但可以访问结果集中的记录,还可以通过结果集对象更新数据库。要创建可滚动、可更新的ResultSet对象,必须使用Connection对象的带两个参数的createStatement()方法创建的Statement,第一个参数用下面两个常量之一:_SCROLL_SENSITIVE
_SCROLL_INSENSITIVEpublic class BookQueryServlet extends HttpServlet{
7. JSP页面如下:<%@ page contentType="text/html;charset=gb2312" %><%@ page import=".*,.*"%>
Connection dbconn; public void init() { String driver = ""; String dburl = "jdbc:postgresql://127.0.0.1:5432/bookstore"; String username = "bookstore"; String password = "bookstore"; try{ e(driver); dbconn = nection( dburl,username,password); }catch(ClassNotFoundException e1){ }catch(SQLException e2){} } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ tentType("text/html;charset=gb2312"); PrintWriter out = ter();n("
"); n(""+ing(1)+" | ");"+ing(2)+" | ");"+ing(3)+" | ");"+ing(4)+" | ");"+ble(5)+" |
102Java实验指导与习题解析
<%@ page contentType="text/html;charset=gb2312" %><%@ page import=".*,.*"%>
<% String driver = ""; String dburl = "jdbc:postgresql://127.0.0.1:5432/bookstore"; String username = "bookstore"; String password = "bookstore"; try{ e(driver); Connection dbconn = nection( dburl,username,password); String sql="SELECT * FROM "; Statement stmt = Statement(); ResultSet rst = eQuery(sql); ResultSetMetaData rstmd = aData(); n("结果集列数:"+umnCount()+""); n("第3列标题:"+umnLabel(3)+""); n("第3列名:"+umnName(3)+""); n("第3列类型:"+umnType(3)+""); n("第3列类型名:"+umnTypeName(3)+""); }catch(ClassNotFoundException e1){ n(e1);}catch(SQLException e2){ n(e2);
8. JSP页面如下: <% String driver = ""; String dburl = "jdbc:postgresql://127.0.0.1:5432/bookstore"; String username = "bookstore"; String password = "bookstore"; try{ e(driver); Connection dbconn = nection( dburl,username,password); DatabaseMetaData dbmd = aData(); n("数据库名:"+abaseProductName()+""); n("数据库版本:"+abaseProductVersion()+""); n("连接的用户:"+rName()+""); n("数据库URL:"+()+""); n("驱动程序名:"+verName()+""); n("驱动程序版本:"+verVersion()+""); }catch(ClassNotFoundException e1){ n(e1);
}catch(SQLException e2){ n(e2);
} %>
} %>package l;页面代码如下:import .*;import .*;import .*;import t.*;import .*;import erBean;import DAO;10. 首先在SampleDAO类中定义下面两个字符串常量:public class SelectCustomerServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ SampleDAO dao = new SampleDAO(); ArrayList
"DELETE FROM customer WHERE custName = ?";private static final String UPDATE_SQL =
<%@ page contentType="text/html; charset=gb2312" %><%@ page import="erBean,.*" %>
ArrayList
104Java实验指导与习题解析
下面是删除客户和修改客户的方法:// 按姓名删除客户记录public boolean deleteCustomer(String custName){
Connection conn = null; PreparedStatement pstmt = null; ResultSet rst = null; CustomerBean customer =null; try{ conn = nection(); pstmt = eStatement(DELETE_SQL);
ing(1,custName); int n = eUpdate(); if(n ==1){ return true; }else{ return false; } }catch(SQLException se){ return false; }finally{ try{ (); (); }catch(SQLException se){} }
}
// 修改客户记录 public boolean updateCustomer(CustomerBean customer){
Connection conn = null; PreparedStatement pstmt = null; try{ conn = nection(); pstmt = eStatement(UPDATE_SQL);
ing(1,il()); ing(2,ne()); ing(3,tName()); int n = eUpdate(); if(n ==1){ return true; }else{ return false; } }catch(SQLException se){ return false; }finally{ try{ ();"UPDATE customer SET email=? , phone=? WHERE custName=?";
(); }catch(SQLException se){} }
}创建JSP页面,连接数据库,调用存储过程:11. 首先在PostgreSQL数据库中创建一个求整数阶乘的函数my_factorial(),代码如下:CREATE OR REPLACE FUNCTION my_factorial(value integer)
RETURNS integer AS $$DECLARE arg integer;BEGIN arg := value; IF arg IS NULL OR arg < 0 THEN RAISE NOTICE 'Invalid Number'; RETURN NULL; ELSE IF arg = 1 THEN RETURN 1; ELSE DECLARE next_value integer; BEGIN next_value := my_factorial(arg - 1) * arg; -- 函数递归调用 RETURN next_value; END; END IF; END IF;END;$$ LANGUAGE 'plpgsql';<%@ page contentType="text/html;charset=gb2312" %><%@ page import=".*,.*"%>
<% String driver = ""; String dburl = "jdbc:postgresql://127.0.0.1:5432/bookstore"; String username = "bookstore"; String password = "bookstore"; try{ e(driver); Connection dbconn = nection( dburl,username,password); Integer num = 0; Java Web编程习题解析105第4章106Java实验指导与习题解析
该页面的运行结果如下:12. 略。4.8 第8章习题解析 if(ameter("param")!=null) num = nt(ameter("param")); String sql = "{?=call my_factorial(?)}";
CallableStatement cstmt = eCall(sql); (2,num); erOutParameter(1,R); e(); int result = (1); ribute("result",result); }catch(ClassNotFoundException e1){ n(e1);
}catch(SQLException e2){ n(e2);
}catch(NumberFormatException e3){ n("输入不合法!");
} %>
<%=ameter("param")%>的阶乘为:<%=ribute("result")%>
1. 答:表达式语言是JSP页面中使用的一种简洁的数据访问语言。它定义了运算符实现算术、关系等运算;可以对作用域变量、JavaBeans对象、集合的元素、请求参数、Cookie等进行简单的访问;还可以访问Java语言定义的函数(静态方法)。2. 答:使用点(.)运算符可以访问Map对象一个键的值和bean对象的属性值。使用方括号([])运算符还可以List对象和数组对象的元素。3. 答:(1)作用域变量;(2)JavaBeans的属性;(3)访问集合元素;(4)访问隐含变量。4. 答:(1)定义public类和静态方法;(2)创建标签库描述文件(TLD);(3)在JSP页面中访问EL函数。5. 答:将page指令的isELIgnored属性设置为true,如下所示:<%@ page isELIgnored="true"%>package ;public class Functions{ public static boolean palindrome(String s){ int low = 0; int high = () -1; while(low < high){ if((low)!=(high)) return false; low ++; high --; } return true;} }(2)创建标签库描述文件6. 答:A 7. 答:A 8. 答:E9. 答:B,E 10. 答:B11. 答:由于paramValues返回的是包含String[]的Map,所以需要访问数组的单个元素。使用${[0]}和${["0"]}都可以,但使用${.0}不可以。记住,paramValues和headerValues返回String[]的Map对象。12. 答:A,C 13. 答:C 14. 答:A15. 答:D 16. 答:B17. 答:${(5 + 3 > 0) ? true : false}18. 参考程序如下:(1)定义Java函数
108Java实验指导与习题解析
4.9 第9章习题解析(3)在JSP页面中访问函数,。<%@ page contentType="text/html;charset=gb2312" %><%@ taglib prefix="demo" uri="/sample" %>
判断字符串是否是回文
字符串:${param.x}${demo:palindrome(param.x)?"是":"不是"}回文。public void setJspContext(JspContext pc)public void setParent(JspTag parent)public void setJspBody(JspFragment jspBody)public JspTag getParent()public void doTag() throws JspException, IOException在JSP页面中使用该标签:13. 答:C
动态属性的使用
110Java实验指导与习题解析
7. 答:E
5. 答:C
2. 答:验证用户的机制包括:(1)HTTP基本验证。优点:实现简单。缺点:用户名和口令没有加密。(2)HTTP摘要验证。优点:用户名和口令加密,比基本验证安全。(3)HTTPS客户证书验证。优点:是罪安全的。缺点:需要授权机构的证书。(4)基于表单的验证。优点:实现容易。缺点:用户名和口令不加密。3. 答:声明式安全和程序式安全是Web应用实现安全性的两种方法。声明式安全是在程序外配置安全信息,程序式安全是在程序内实施安全措施。4. 答:D 5. 答:C6. 答:E,F,H 7. 答:A,D8. 答:A,C9. 答:① j_security_check ② j_username ③ FORM4.13 第13章习题解析2. 答:Web应用程序启动时将通知ServletContextListener事件监听器。3. 答:B4. 答:1. 答:Web应用的安全性主要包括4个方面:(1)身份验证;(2)授权;(3)数据完整性;(4)数据保密性。进入大楼出示证件属于身份验证。④ form-login-page
10. 答:A,C4.12 第12章习题解析8. 答:D
4.14 第14章习题解析null或空,表示验证通过,否则验证没有通过。4. 答:要上传文件应将
版权声明:本文标题:JavaWeb编程技术(沈泽刚版)教材习题参考答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705056297h471463.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论