java内核

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:35:09
j2ee中有test.jsp文件如下:
<html>
<jsp:userBean id="buffer" scope="page" type="java.lang.StringBuffer"/>
<% buffer.append("ABC");%>
buffer is<%=buffer%>
</html>
请选择?(并请对每项说明理由。北京)
A:转译期出错
B:编译期出错
C:执行编译后出错
D:运行后,浏览器显示:bufer is null
E:运行后,浏览器显示:buffer is ABC
(各位大虾们我主要是要理解理由,连贯的分析)

hackdeek 给出的答案 应该是错误的。
我觉的这道题的答案应该选C,执行编译后出错,这是一个运行时候的异常。
我估计 楼主 是不是正在复习SCWCD认证哦 呵呵
加油哦。
<jsp:userBean id="buffer" scope="page" type="java.lang.StringBuffer"/> 这种是很容易让人出错的题,如果将type转化class ,就确实能得出 buffer is ABC的 解。
type 指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。

<jsp:userBean id="buffer" scope="page" type="java.lang.StringBuffer"/> 的 真正再后台jsp转化成servlet后的java代码(以下代码依赖于容器, 我用的是tomcat 5.5.9,如果是jboss的化 那么代码肯定也生成的不一样)是:

java.lang.StringBuffer buffer = null;
synchronized (_jspx_page_context) {
buffer = (java.lang.StringBuffer) _jspx_page_context.getAttribute("buffer", PageContext.PAGE_SCOPE);
if (buffer == null){
throw new java.lang.InstantiationException("bean buffer not found within scope");
}

看到没,使用此属性 type ,必须保证相应的scope中存在bean实例,如果没有就会报错Instantiat