程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 對象-${pageContext.session.new}服務器報錯

對象-${pageContext.session.new}服務器報錯

編輯:編程解疑
${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編程新手的真摯問答

最佳回答:


首先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()},有這個方法當然沒問題

希望對你有用,代碼處問題最好的方式就是追蹤溯源看代碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved