1。关于所谓session被覆盖问题
当一个用户登录后访问首页面,只要你点击这个页面而打开的窗口都属于同一session,这个时候假如你在其中某一窗口页面里,直接修改URL访问登录页面重新以另一用户名登录,然后你刷新其他的页面,你会发现其他的页面也会相应的定向到后面登录的用户session里,因为这些窗口都是关联属于一个session的,改变一个,其他也会改变。刚开始没注意到这一点,以为是代码有问题导致session被覆盖,其实这个时候,前一个session仍然存在,并未消失。
我当初的想法就是:同时登录两个用户,进行在线聊天的测试。只是没注意到上面的问题,总是在登录一个用户后,访问首页,点一个连接出来一个窗口页,再点这个页面里的一个连接进入聊天系统,我这个时候就图方便直接把前一个页面的URL改了访问登录页面来登录另一用户名,结果刷新的时候,所有页面都归属到后来登录用户的session了。没想明白之前,怀疑是自己代码问题,导致后面登录的会覆盖前面的,后来才发现其实只要你不是在前面打开的窗口里直接修改URL登录另一用户,而是重新启动浏览器打开新窗口来登录就不会出现上面的问题,这样就能保证两个用户同时访问相互不干扰
2。当将一个临时对象A set给另一对象B,然后保存B时经常会看到这样的异常:org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lingirl.domain.News#1]
比如:User user=new User();
news.setUser(user);
newsDao.save(news);
这个时候的user是个临时对象,当执行newsDao.save(news);的时候就会抛上面的异常。
解决方法:先userDao.save(user)将user临时对象持久化,然后再news.setUser(user);newsDao.save(news);
(User,News一对多双向关联)
3。类型为Integer的字段最好初始化为0,否则默认为NULL容易抛空指针异常NullPointerException
比如News实体类里的字段hit为Integer,我没有对hit初始化,结果执行到news.setHit(news.getHit()+1);这行代码就出了空指针异常
news.getHit()取值为NULL,解决方法:News里set方法里进行判断后再初始化给值:
public void setHit(Integer hit) {
if(hit==null)
hit=new Integer(0);
else this.hit = hit;
}
4。还经常一不小心就碰到这样的问题:org.apache.jasper.JasperException: /list.jsp(14,12) quote symbol expected
一般是因为${user.isadmin}少了双引号
比如:
<c:if test="${user.isadmin}">
写成了
<c:if test="${user.isadmin}"></c:if></c:if>
当一个用户登录后访问首页面,只要你点击这个页面而打开的窗口都属于同一session,这个时候假如你在其中某一窗口页面里,直接修改URL访问登录页面重新以另一用户名登录,然后你刷新其他的页面,你会发现其他的页面也会相应的定向到后面登录的用户session里,因为这些窗口都是关联属于一个session的,改变一个,其他也会改变。刚开始没注意到这一点,以为是代码有问题导致session被覆盖,其实这个时候,前一个session仍然存在,并未消失。
我当初的想法就是:同时登录两个用户,进行在线聊天的测试。只是没注意到上面的问题,总是在登录一个用户后,访问首页,点一个连接出来一个窗口页,再点这个页面里的一个连接进入聊天系统,我这个时候就图方便直接把前一个页面的URL改了访问登录页面来登录另一用户名,结果刷新的时候,所有页面都归属到后来登录用户的session了。没想明白之前,怀疑是自己代码问题,导致后面登录的会覆盖前面的,后来才发现其实只要你不是在前面打开的窗口里直接修改URL登录另一用户,而是重新启动浏览器打开新窗口来登录就不会出现上面的问题,这样就能保证两个用户同时访问相互不干扰
2。当将一个临时对象A set给另一对象B,然后保存B时经常会看到这样的异常:org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lingirl.domain.News#1]
比如:User user=new User();
news.setUser(user);
newsDao.save(news);
这个时候的user是个临时对象,当执行newsDao.save(news);的时候就会抛上面的异常。
解决方法:先userDao.save(user)将user临时对象持久化,然后再news.setUser(user);newsDao.save(news);
(User,News一对多双向关联)
3。类型为Integer的字段最好初始化为0,否则默认为NULL容易抛空指针异常NullPointerException
比如News实体类里的字段hit为Integer,我没有对hit初始化,结果执行到news.setHit(news.getHit()+1);这行代码就出了空指针异常
news.getHit()取值为NULL,解决方法:News里set方法里进行判断后再初始化给值:
public void setHit(Integer hit) {
if(hit==null)
hit=new Integer(0);
else this.hit = hit;
}
4。还经常一不小心就碰到这样的问题:org.apache.jasper.JasperException: /list.jsp(14,12) quote symbol expected
一般是因为${user.isadmin}少了双引号
比如:
java 代码
- <c:if test="${user.isadmin}">
写成了
java 代码
- <c:if test=${user.isadmin}>