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(){
try{
dbPath = 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(){
try{
FileOutputStream fos = new FileOutputStream(dbPath);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(visits);
dos.close();
}catch(Exception e){
log("Error storing persistent counter", e);
}
}
}
4.4 第4章习题解析
沈泽刚 秦玉平主编清华大学出版社
元素的子元素<session-timeout>设置最大超时时间,这里的最大超时时间是对整个应用程序的所有会话有效,<session-timeout>元素指定的时间单位是分钟。setMaxInactiveInterval()方法参数单位是秒。
3. 答:有些客户浏览器可能不支持Cookie或用户阻止所有的Cookie,此时不能用Cookie实现会话。
4. 答:使用响应对象(即HttpServletResponse接口)的encodeURL()方法或
encodeRedirectURL()方法。
5. 答:不能。因为许多用户是通过代理服务器访问Internet的,此时服务器得到的是代理服务器的IP地址而不是实际用户的IP地址,因此这些用户的IP地址不唯一。
6. 答:D 7. 答:A, B 8. 答:A, D
9. 答:C 10. 答:A,C 11. 答:C
12. 答:C, D 13. 答:B,C 14. 答:C
15. 答:B 16. 答:A 17. 答:C
18. 答:A,B,D,F
19. 答:具有很大的影响。该应用程序将不能维护用户的状态。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; %>
<%= int i = 20 %>
<%= sBuff.setLength(12); %>
沈泽刚 秦玉平主编清华大学出版社
3. 答:C
4. 答:正确声明应为:
<%! 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,C
A.非法:等号表明它是表达式,但表达式不能以分号结束,产生的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 3
10. 答:不能在japInit()方法中使用application对象。
沈泽刚 秦玉平主编清华大学出版社
out.print( ++count );
out.write("</body></html>\r\n");
16. 答:
Page改为page
<%! int count = 0 %> // 声明缺少分号
<% count++; %> // 去掉分号
17. 答:D
18. 答:
<% Float one = new Float(88.88) %> 小脚本
<%! int y = 3; %> 声明
<%@ page import="java.util.*" %> 指令
<jsp:include page="foo.jsp" /> 动作
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生JavaWeb编程技术(沈泽刚版)教材习题参考答案(2)在线全文阅读。
相关推荐: