sinat_36675540 2016-12-23 04:20 采纳率: 100%
浏览 1336
已采纳

${pageContext.session.new}服务器报错

${pageContext.session.new}服务器报错,但改成${pageContext.session.isNew()}就没问题,目的就是通过EL调用JSP内置对象的方法,查看是否是新session

${pageContext.session.id}
${pageContext.request.remoteAddr}

这两条都没问题到了
${pageContext.session.new} 就出错
改成${pageContext.session.isNew()}就可以了

求大神告知为什么 ,来自it编程新手的真挚问答

  • 写回答

5条回答 默认 最新

  • noWayBinding 2016-12-23 06:46
    关注

    首先HttpSession只是一个接口,具体的实现在容器。如果是tomcat的实现类则是
    org.apache.catalina.session.StandardSessionFacade,其代码如下:

     public class StandardSessionFacade implements HttpSession {
        private final HttpSession session;
    
        public StandardSessionFacade(HttpSession session) {
            this.session = session;
        }
    
        public long getCreationTime() {
            return this.session.getCreationTime();
        }
    
        public String getId() {
            return this.session.getId();
        }
    
        public long getLastAccessedTime() {
            return this.session.getLastAccessedTime();
        }
    
        public ServletContext getServletContext() {
            return this.session.getServletContext();
        }
    
        public void setMaxInactiveInterval(int interval) {
            this.session.setMaxInactiveInterval(interval);
        }
    
        public int getMaxInactiveInterval() {
            return this.session.getMaxInactiveInterval();
        }
    
        /** @deprecated */
        @Deprecated
        public HttpSessionContext getSessionContext() {
            return this.session.getSessionContext();
        }
    
        public Object getAttribute(String name) {
            return this.session.getAttribute(name);
        }
    
        /** @deprecated */
        @Deprecated
        public Object getValue(String name) {
            return this.session.getAttribute(name);
        }
    
        public Enumeration<String> getAttributeNames() {
            return this.session.getAttributeNames();
        }
    
        /** @deprecated */
        @Deprecated
        public String[] getValueNames() {
            return this.session.getValueNames();
        }
    
        public void setAttribute(String name, Object value) {
            this.session.setAttribute(name, value);
        }
    
        /** @deprecated */
        @Deprecated
        public void putValue(String name, Object value) {
            this.session.setAttribute(name, value);
        }
    
        public void removeAttribute(String name) {
            this.session.removeAttribute(name);
        }
    
        /** @deprecated */
        @Deprecated
        public void removeValue(String name) {
            this.session.removeAttribute(name);
        }
    
        public void invalidate() {
            this.session.invalidate();
        }
    
        public boolean isNew() {
            return this.session.isNew();
        }
    }
    

    楼主可看到这个类有getId()和isNew()这两个方法,因为按照el的取值规则

    ${pageContext.session.id}回去调用getId(),StandardSessionFacade有这个方法,所以没问题

    ${pageContext.session.new} 因为是属性的引用,所以就会去找有没有getNew()这个方法,显然没有所以报错

    改成${pageContext.session.isNew()},有这个方法当然没问题

    希望对你有用,代码处问题最好的方式就是追踪溯源看代码

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 怎么让数码管亮的同时让led执行流水灯代码
  • ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串
  • ¥85 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)