我试图获取不良维护上下文的attributeNames,然后使用带反射的名称。
这是一些粗略思想的伪代码。 例如。我在上下文中有一个ArrayList和一个HashMap。
enum = getServletContext().getAttributeNames();
for (; enum.hasMoreElements(); ) {
String name = (String)enum.nextElement();
// Get the value of the attribute
Object value = getServletContext().getAttribute(name);
if (value instanceof HashMap){
HashMap hmap = (HashMap) value;
//iterate and print key value pair here
}else if(value instanceof ArrayList){
//do arraylist iterate here and print
}
}
答案 0 :(得分:10)
这里的代码可以满足您的需求:
Enumeration<?> e = getServletContext().getAttributeNames();
while (e.hasMoreElements())
{
String name = (String) e.nextElement();
// Get the value of the attribute
Object value = getServletContext().getAttribute(name);
if (value instanceof Map) {
for (Map.Entry<?, ?> entry : ((Map<?, ?>)value).entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
} else if (value instanceof List) {
for (Object element : (List)value) {
System.out.println(element);
}
}
}
注意:
List
和Map
(接口),而不是ArrayList
和HashMap
(具体实现);考虑如果上下文向您发送LinkedList
而不是ArrayList
,或者Map
不是HashMap
- 您的代码会(不必要地)爆炸while (condition)
而不是for (;condition;)
- 这只是丑陋的Map<String, Object>
:所以代码可以变成
for (Map.Entry<String, Object> entry : ((Map<String, Object>)value).entrySet()) {
String entryKey = entry.getKey();
Object entryValue = entry.getValue();
}