HTTPSession在setAttribute时,保存的对象是否需要序列化?
查看StandardSession源码中,在setAttribute()中有如下代码
if ((manager != null) && manager.getDistributable() &&
!isAttributeDistributable(name, value))
throw new IllegalArgumentException
(sm.getString("standardSession.setAttribute.iae", name));
protected boolean isAttributeDistributable(String name, Object value) {
return value instanceof Serializable;
}
manager接口:
/**
* Return the distributable flag for the sessions supported by
* this Manager.
*/
public boolean getDistributable();
/**
* Set the distributable flag for the sessions supported by this
* Manager. If this flag is set, all user data objects added to
* sessions associated with this manager must implement Serializable.
*
* @param distributable The new distributable flag
*/
public void setDistributable(boolean distributable);
在web.xml配置<distributable/>后, manager中的distributable变量为true,在setAttribute时会检查对象是否序列化。
因此,session中的对象需不需要实现序列化,取决于是否支持分布式session。