org.apache.catalina.core.DefaultInstanceManager不能强制转换为java.lang.String
我的servlet中有以下代码org.apache.catalina.core.DefaultInstanceManager不能强制转换为java.lang.String,java,apache,jakarta-ee,servlets,tomcat7,Java,Apache,Jakarta Ee,Servlets,Tomcat7,我的servlet中有以下代码 PrintWriter out = response.getWriter(); out.println("Getting Context scoped attributes<br>"); ServletContext sc = getServletConfig().getServletContext(); Enumeration contextAttribNames = sc.getAttributeNames(); while(contextAttr
PrintWriter out = response.getWriter();
out.println("Getting Context scoped attributes<br>");
ServletContext sc = getServletConfig().getServletContext();
Enumeration contextAttribNames = sc.getAttributeNames();
while(contextAttribNames.hasMoreElements()){
String attribName = (String) contextAttribNames.nextElement();
String attribValue = (String) sc.getAttribute(attribName);//Line#21
out.println("<b>" + attribName + ":</b> " + attribValue + "<br>");
}
PrintWriter out=response.getWriter();
println(“获取上下文范围的属性
”;
ServletContext sc=getServletConfig().getServletContext();
枚举contextAttribNames=sc.getAttributeNames();
while(contextAttribNames.hasMoreElements()){
字符串attribName=(字符串)contextAttribNames.nextElement();
String attribValue=(String)sc.getAttribute(attribName);//第21行
out.println(“+attribName+”:“+attribValue+”
”;
}
它只是尝试获取与应用程序/上下文范围关联的所有属性,并打印它们的值
代码编译得很好,但当我从url模式调用此servlet时失败
下面是我得到的错误
“无法将HTTP状态500-org.apache.catalina.core.DefaultInstanceManager转换为java.lang.String”
java.lang.ClassCastException:org.apache.catalina.core.DefaultInstanceManager不能强制转换为java.lang.String
com.servlet.scopes.GetContextScopeServlet.doGet(GetContextScopeServlet.java:21)
javaservlet.http.HttpServlet.service(HttpServlet.java:621)
javaservlet.http.HttpServlet.service(HttpServlet.java:728)
根据文档,javax.servlet.ServletContext有一个方法来获取具有以下签名的属性
公共对象getAttribute(字符串attribName)
这就是为什么我要在第21行选弦
请帮助我理解问题并解决问题
环境详情:
操作系统-Windows7
服务器-ApacheTomcat7.x
JavaEE-6规范属性不一定是所有类型的
字符串
。它们可以是任何对象类型。但是您试图将它们全部用作字符串对象
String attribValue = (String) sc.getAttribute(attribName);//Line#21
你不知道他们的类型,所以你可以
Object attribValue = sc.getAttribute(attribName);//Line#21
ServletContext
中的属性并不总是String
对象;它们可以是任何东西,通常是数据库池之类的项。您几乎不应该将对象强制转换为字符串
;相反,正确地将枚举
参数化为枚举
,并在属性值上使用toString()
,或者只在字符串连接中使用裸对象
,以使编译器隐式调用toString()