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 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题