我正在研究 Struts,遇到了一些奇怪的行为。虽然它没有产生任何错误或错误,但我只是认为与你们分享它会很有趣。
也许你们中的一个可以解释为什么会发生这种情况。
使用以下代码创建一个 Struts 动作 -
public class MyAction extends ActionSupport {
private Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>();
public String execute() {
System.out.println(map);
return SUCCESS;
}
public Map<String, Map<String, Object>> getMap() {
return map;
}
public void setMap(Map<String, Map<String, Object>> map) {
this.map = map;
}
}
创建关联的映射和所需的 Jsp 并执行操作。您将在控制台上看到以下输出 -
{systemProperties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.6.0_32\jre\bin, java.vm.version=20.7-b02, shared.loader=${catalina.base}/shared/classes ....
显然,Struts 正在将系统属性注入到我的地图中。但它为什么这样做呢?我没有要求它这样做。我没有使用任何特殊的 XML 配置或注释。Struts 的哪一部分(什么拦截器)对此负责?我刚刚发现了一个错误还是这是正常行为?如果这很正常,为什么 Struts 开发人员认为注入每个Map<String, Map<String, Object>>
系统属性是明智的?