今天接手一个09年的老项目,这个项目是Struts2的,早就忘光了,配置文件也一大堆,废了老大劲解决出现的错误,跑起来了,登录成功后跳转到首页出现500错误,报错:“org.apache cannot be resolved or is not a field”
如图所示:
根据这个提示应该是EL表达式${ctxpath}没有定义
但是报错地方上面也有用${ctxpath}的地方,例如:
<link href="${ctxpath}/jsp/newframe/themes/default/style.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="${ctxpath}/jsp/newframe/themes/css/core.css" rel="stylesheet" type="text/css" media="screen"/>
这就特别奇怪了。
于是我初步怀疑是不是因为EL在javascript里会出错,找了半天还是没有找到相关的解决办法,直到我逐条把js代码都删掉,最后只剩下一个EL表达式变量了,但是还是报错。
没办法了,只能怀疑tomcat版本太高的缘故,更换为tomcat6后,错误依然。
于是我还得逐步调试,终于发现问题所在^_^。
原因是在报错代码之前有一段java程序,把java程序去掉就不会出现500错误,难道这段java代码会把${ctxpath}的值删掉?
又逐条检查发现一个读取session的语句有问题
Organization org = (Organization)request.getSession().getAttribute(“abc”);
if(org!=null){
dept = org.getName();
}
这句话看起来挺正常的,但是request.getSession().getAttribute(“abc”)的值为null,按照我理解若是null的话转换为任何对象不会报错,但是实际上在jsp里出现错误了,但是又不输出错误。这样导致jsp无法被编译,从而导致上面的EL表达式${ctxpath}找不到
最后解决办法有两种:
1.在登录的代码里添加上这个session,保证不能为空
2.先判断是否为null然后再强转类型