${pageContext.session.new}服务器报错,但改成${pageContext.session.isNew()}就没问题,目的就是通过EL调用JSP内置对象的方法,查看是否是新session
${pageContext.session.id}
${pageContext.request.remoteAddr}
这两条都没问题到了
${pageContext.session.new} 就出错
改成${pageContext.session.isNew()}就可以了
求大神告知为什么 ,来自it编程新手的真挚问答
首先HttpSession只是一个接口,具体的实现在容器。如果是tomcat的实现类则是
org.apache.catalina.session.StandardSessionFacade,其代码如下:
publicclassStandardSessionFacadeimplementsHttpSession{privatefinalHttpSessionsession;publicStandardSessionFacade(HttpSessionsession){this.session=session;}publiclonggetCreationTime(){returnthis.session.getCreationTime();}publicStringgetId(){returnthis.session.getId();}publiclonggetLastAccessedTime(){returnthis.session.getLastAccessedTime();}publicServletContextgetServletContext(){returnthis.session.getServletContext();}publicvoidsetMaxInactiveInterval(intinterval){this.session.setMaxInactiveInterval(interval);}publicintgetMaxInactiveInterval(){returnthis.session.getMaxInactiveInterval();}/**@deprecated*/@DeprecatedpublicHttpSessionContextgetSessionContext(){returnthis.session.getSessionContext();}publicObjectgetAttribute(Stringname){returnthis.session.getAttribute(name);}/**@deprecated*/@DeprecatedpublicObjectgetValue(Stringname){returnthis.session.getAttribute(name);}publicEnumeration<String>getAttributeNames(){returnthis.session.getAttributeNames();}/**@deprecated*/@DeprecatedpublicString[]getValueNames(){returnthis.session.getValueNames();}publicvoidsetAttribute(Stringname,Objectvalue){this.session.setAttribute(name,value);}/**@deprecated*/@DeprecatedpublicvoidputValue(Stringname,Objectvalue){this.session.setAttribute(name,value);}publicvoidremoveAttribute(Stringname){this.session.removeAttribute(name);}/**@deprecated*/@DeprecatedpublicvoidremoveValue(Stringname){this.session.removeAttribute(name);}publicvoidinvalidate(){this.session.invalidate();}publicbooleanisNew(){returnthis.session.isNew();}}
楼主可看到这个类有getId()和isNew()这两个方法,因为按照el的取值规则
${pageContext.session.id}回去调用getId(),StandardSessionFacade有这个方法,所以没问题
${pageContext.session.new}因为是属性的引用,所以就会去找有没有getNew()这个方法,显然没有所以报错
改成${pageContext.session.isNew()},有这个方法当然没问题
希望对你有用,代码处问题最好的方式就是追踪溯源看代码
session里面有new这个方法吗
内置的session对象没有new属性,而是isNew属性,所以会报错啊。
javax.servlet.http
InterfaceHttpSession
参考。
http://tool.oschina.net/apidocs/apidoc?api=javaEE6
文档。
另外一点,tomcat的session实现StandardSessionFacade是一个门面模式,因为在不同的情况下底层的session机制会不一样
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。