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 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含