信产部考试题第一套题库.docx
- 文档编号:7194555
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:15
- 大小:333.76KB
信产部考试题第一套题库.docx
《信产部考试题第一套题库.docx》由会员分享,可在线阅读,更多相关《信产部考试题第一套题库.docx(15页珍藏版)》请在冰豆网上搜索。
信产部考试题第一套题库
答案:
E
答案:
A
答案:
B
答案:
C
答案:
D
答案:
C
答案:
A
答案:
A
答案:
C
答案:
D
答案:
B
答案:
B
答案:
A
答案:
A
答案:
C
答案:
BC
答案:
BC
答案:
ABC
答案:
ABD
答案:
BC
答案:
AC
答案:
AC
JSP的隐含对象
在JSP页面中,总共有9个隐含对象:
request,response,pageContext,session,application,out,config,page和exception。
在基于HTTP协议的实现中,这9个隐含对象与它们各自的类型如表12-3所示。
表12-3JSP隐含对象的类型
隐含对象
类型
request
javax.servlet.http.HttpServletRequest
response
javax.servlet.http.HttpServletResponse
pageContext
javax.servlet.jsp.PageContext
session
javax.servlet.http.HttpSession
application
javax.servlet.ServletContext
out
javax.servlet.jsp.JspWriter
config
javax.servlet.ServletConfig
page
java.lang.Object
exception
java.lang.Throwable
其中request,response,session,application和config对象所属的类及其用法在前面的Servlet章节中我们已经介绍过了,下面主要介绍一下其他的对象。
12.4.1pageContext
pageContext对象提供了访问其他隐含对象的方法,如下:
?
publicabstractjavax.servlet.ServletRequestgetRequest()
?
publicabstractjavax.servlet.ServletResponsegetResponse()
?
publicabstractjavax.servlet.http.HttpSessiongetSession()
?
publicabstractjavax.servlet.ServletContextgetServletContext()
?
publicabstractJspWritergetOut()
?
publicabstractjavax.servlet.ServletConfiggetServletConfig()
?
publicabstractjava.lang.ObjectgetPage()
?
publicabstractjava.lang.ExceptiongetException()
在pageContext对象中,可以使用下面两个方法来保存和获取属性。
?
publicabstractvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue)
?
publicabstractjava.lang.ObjectgetAttribute(java.lang.Stringname)
在pageContext对象中保存的属性,只能在当前页面中去获取,也就是说,pageContext对象具有页面范围(详见12.5节)。
利用pageContext对象,还可以设置和得到在其他范围对象中保存的属性。
pageContext对象提供了另外两个setAttribute()和getAttribute()方法,如下:
?
publicabstractvoidsetAttribute(java.lang.Stringname,java.lang.Objectvalue,intscope)
?
publicabstractjava.lang.ObjectgetAttribute(java.lang.Stringname,intscope)
其中的scope参数用于指定要获取哪一个范围对象的属性,有四个可能的取值,其中PageContext.PAGE_SCOPE表示页面范围,PageContext.REQUEST_SCOPE表示请求范围,PageContext.SESSION_SCOPE表示会话范围,PageContext.APPLICATION_SCOPE表示Web应用程序范围。
在pageContext对象中,可以使用下面两个方法来删除范围中的属性。
?
publicabstractvoidremoveAttribute(java.lang.Stringname,intscope)
删除指定范围内名字为name的属性。
?
publicabstractvoidremoveAttribute(java.lang.Stringname)
删除所有范围内名字为name的属性。
pageContext对象还提供了搜索属性的方法:
?
publicabstractjava.lang.ObjectfindAttribute(java.lang.Stringname)
该方法会按照page,request,session和application范围的顺序搜索指定名字的属性,如果找到,则返回属性的值,如果没有找到,则返回null。
关于范围,请参见12.5节。
pageContext对象也提供了请求转发的两个方法forward()和include(),其内部实现是调用RequestDispatcher对象的forward()和include()方法。
从pageContext对象提供的方法可以看出,pageContext对象实际上是为我们提供了访问其他隐含对象的统一入口,在多数情况下,直接利用pageContext对象就可以完成想要实现的功能。
12.4.2out
out对象的类型是javax.servlet.jsp.JspWriter,该类从java.io.Writer类派生,以字符流的形式输出数据。
out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
在out对象中,提供了几个和缓冲区操作相关的方法,如下所示。
?
publicabstractvoidclear()throwsjava.io.IOException
清除缓冲区中的内容。
如果缓冲区已经被刷新,clear()方法将抛出IOException异常。
?
publicabstractvoidclearBuffer()throwsjava.io.IOException
清除缓冲区中的当前内容。
这个方法和clear()方法的区别是,如果缓冲区已经被刷新,这个方法不会抛出IOException异常。
?
publicabstractvoidclose()throwsjava.io.IOException
刷新缓冲区,关闭输出流。
注意,我们在编写JSP页面时,不需要显式地去调用这个方法,因为在JSP容器所生成的代码中会自动包含对close()方法的调用。
?
publicabstractvoidflush()throwsjava.io.IOException
刷新缓冲区。
?
publicintgetBufferSize()
获得out对象使用的缓冲区的大小。
?
publicabstractintgetRemaining()
获得缓冲区中未使用的字节数。
?
publicbooleanisAutoFlush()
判断out对象是否是自动刷新。
out对象针对不同的数据类型,提供了多个重载的print()和println()方法,用于输出数据。
要注意的是,虽然println()方法会输出一个换行,但是客户端的浏览器在显示页面时会忽略输出的换行。
12.4.3page
page对象是当前页面转换后的Servlet类的实例。
从转换后的Servlet类的代码中,可以看到这种关系:
Objectpage=this;
在JSP页面中,很少使用page对象。
12.4.4exception
exception对象表示了JSP页面运行时产生的异常,该对象只有在错误页面(在page指令中指定属性isErrorPage=true的页面)中才可以使用。
在JSP页面中,我们可以利用page指令的errorPage属性指定一个错误处理页面,当JSP页面运行发生错误时,JSP容器会自动调用指定的错误处理页面。
要注意的是,如果一个JSP页面使用errorPage属性定义了错误页面,那么在web.xml文件中定义的任何错误页面将不会被使用。
下面我们看一个例子:
price.jsp
<%@pageerrorPage="excep.jsp"%>
<%
StringstrPrice=request.getParameter("price");
doubleprice=Double.parseDouble(strPrice);
out.println("Totalprice="+price*3);
%>
excep.jsp
<%@pageisErrorPage="true"%>
<%
out.println("exception.toString():
");
out.println("
");
out.println(exception.toString());
out.println("
");
out.println("exception.getMessage():
");
out.println("
");
out.println(exception.getMessage());
%>
在price.jsp页面中,通过page指令的errorPage属性指定错误处理页面为excep.jsp。
在excep.jsp页面中,通过page指令的isErrorPage属性指定当前页面是错误处理页面,只有设置了isErrorPage为true,在此页面中才可以使用exception对象。
我们访问price.jsp页面时,输入URL:
http:
//localhost:
8080/ch12/price.jsp?
price=5.0
将看到输出:
Totalprice=15.0
如果输入:
http:
//localhost:
8080/ch12/price.jsp?
price=abc
将看到如下的错误信息:
exception.toString():
java.lang.NumberFormatException:
Forinputstring:
"abc"
exception.getMessage():
Forinputstring:
"abc"
在JSP页面中的对象,包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,都有一个范围属性。
范围定义了在什么时间内,在哪一个JSP页面中可以访问这些对象。
例如,session对象在会话期间内,可以在多个页面中被访问。
application对象在整个Web应用程序的生命周期中都可以被访问。
在JSP中,有4种范围,如下所示。
?
page范围
具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中。
在这个范围内的对象,只能在创建对象的页面中访问。
可以调用pageContext这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象(pageContext对象还提供了访问其他范围对象的getAttribute方法),pageContext对象本身也属于page范围。
当Servlet类的_jspService()方法执行完毕,属于page范围的对象的引用将被丢弃。
page范围内的对象,在客户端每次请求JSP页面时创建,在页面向客户端发送回响应或请求被转发(forward)到其他的资源后被删除。
?
request范围
具有request范围的对象被绑定到javax.servlet.ServletRequest对象中,可以调用request这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。
在调用forward()方法转向的页面或者调用include()方法包含的页面中,都可以访问这个范围内的对象。
要注意的是,因为请求对象对于每一个客户请求都是不同的,所以对于每一个新的请求,都要重新创建和删除这个范围内的对象。
?
session范围
具有session范围的对象被绑定到javax.servlet.http.HttpSession对象中,可以调用session这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。
JSP容器为每一次会话,创建一个HttpSession对象,在会话期间,可以访问session范围内的对象。
?
application范围
具有application范围的对象被绑定到javax.servlet.ServletContext中,可以调用application这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。
在Web应用程序运行期间,所有的页面都可以访问在这个范围内的对象。
下面我们通过几个简单的例子,来看一下这4种范围对象的应用。
1.测试page范围
test1.jsp
<%
pageContext.setAttribute("name","zhangsan");
out.println("test1.jsp:
");
out.println(pageContext.getAttribute("name"));
out.println("
");
pageContext.include("test2.jsp");
%>
test2.jsp
<%
out.println("test2.jsp:
");
out.println(pageContext.getAttribute("name"));
%>
访问test1.jsp,将看到如下的输出:
test1.jsp:
zhangsan
test2.jsp:
null
说明保存在pageContext对象中的属性具有page范围,只能在同一个页面中被访问。
2.测试request范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
request.setAttribute("name","zhangsan");
out.println("test1.jsp:
");
out.println(request.getAttribute("name"));
out.println("
");
pageContext.include("test2.jsp");
%>
test2.jsp
<%
out.println("test2.jsp:
");
out.println(request.getAttribute("name"));
%>
访问test1.jsp,将看到如下的输出:
test1.jsp:
zhangsan
test2.jsp:
zhangsan
说明保存在request对象中的属性具有request范围,在请求对象存活期间,可以访问这个范围内的对象。
将
pageContext.include("test2.jsp");
这一句注释起来,先访问test1.jsp,再访问test2.jsp,可以看到如下输出:
test2.jsp:
null
这是因为客户端开始了一个新的请求。
3.测试session范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
session.setAttribute("name","zhangsan");
%>
test2.jsp
<%
out.println("test2.jsp:
");
out.println(session.getAttribute("name"));
%>
先访问test1.jsp,然后在同一个浏览器窗口中访问test2.jsp,可以看到如下输出:
test2.jsp:
zhangsan
说明保存在session对象中的属性具有session范围,在会话期间,可以访问这个范围内的对象。
如果我们在访问完test1.jsp后,关闭浏览器,重新打开浏览器窗口,访问test2.jsp,将看到如下输出:
test2.jsp:
null
这是因为客户端与服务器开始了一次新的会话。
4.测试application范围
修改test1.jsp和test2.jsp,如下所示。
test1.jsp
<%
application.setAttribute("name","zhangsan");
%>
test2.jsp
<%
out.println("test2.jsp:
");
out.println(application.getAttribute("name"));
%>
先访问test1.jsp,然后关闭浏览器,再打开浏览器窗口,访问test2.jsp,可以看到如下输出:
test2.jsp:
zhangsan
说明保存在application对象中的属性具有application范围,在Web应用程序运行期间,都可以访问这个范围内的对象。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信产部 考试题 第一 题库