Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.apache.catalina.core.DefaultInstanceManager不能强制转换为java.lang.String_Java_Apache_Jakarta Ee_Servlets_Tomcat7 - Fatal编程技术网

org.apache.catalina.core.DefaultInstanceManager不能强制转换为java.lang.String

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

我的servlet中有以下代码

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()