jsp中多个页面可以引用同一个Session对象吗?

时间:2021-12-02 19:55:36
我在写一个博客系统,在登录页面设置一个session对象用来在登录成功后记录登录用户id:
session.setAttribute("logID",logid);//logid是从登录界面获得的用户id变量是int型;
在显示个人博客页面获得用户id成功:
String userid =(String)session.getAttribute("userID").toString();
想在显示个人信息页面同样获得,再写同样一句就提示错误:
String userid =(String)session.getAttribute("userID").toString();
错误信息:
org.apache.jasper.JasperException: An exception occurred processing JSP page /readblog.jsp at line 26

23: 
24:   </head>
25: <%
26: String userid =(String)session.getAttribute("userID").toString();
27: String logid=request.getParameter("id");
28: String username=null,author=null;
29: DB_Conn db_conn =new DB_Conn();


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.lang.NullPointerException
org.apache.jsp.readblog_jsp._jspService(readblog_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

是不能在多个页面中引用啊,还是我写的有什么错误,请各高手指教!

26 个解决方案

#1


完全可以。

#2


String userid =(String)session.getAttribute("userID"). toString();
 不要 toString()

因为如果你的 session 中如果不存在userID 会报空指针异常

你可以这样
String userid =session.getAttribute("userID")+"";
  会自动转成 String

#3


String userid =(String)session.getAttribute("userID").toString();

报了空指针异常,应该是你的session中的数据丢失了.
你试试
String userid =(String)session.getAttribute("userID");
if(userid == null){
  System.out.println("userid 为空了.");
}

你检查下自己的代码吧,这样用是没有问题的`肯定哪里出现了编码的逻辑错误.

#4


你明明是session.setAttribute("logID",logid);//
怎么取的时候变成
String userid =(String)session.getAttribute("userID").toString();

logID?userID?
既然已经用了(String)就不需要toString了,如果值是空的还会报错。

#5


对,如果你的session.getAttribute("userID")==null,你说还能toString()吗

#6


谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

#7


引用 6 楼 fengjinchaowangbadan 的回复:
谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

session.setAttribute("logID",logid);//
你session里设的不是logID么,怎么取的时候用的userID?

#8


可以  String userid =(String)session.getAttribute("userID").toString(); 这一句出错啦   大家都说了,session里存的值跟你取得时候不一样啊

#9


7楼说的正确!!

#10


同意楼上

#11


这个倒也能获取到,你想要获取同样的ID,可以定义一个公共类,第一次取出ID时把userid保存在xxx类中里,xxxForm.setUserid(userid);第二次取比较容易取,而且不会出错...

#12


实践过。。是完全没有问题的!

#13


程序里都是userID,我发帖时不小心写错的,谢谢各位了,我也不知道怎么回事,我又改了一下午了,还是不行,不指示那句错了,但还是所有有那句的都错,同一个错误提示:java.lang.ClassCastException: java.lang.Integer;
org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Integer
我再改改看吧,谢谢各位了!

#14


这个是数据类型转换错误啊,不是取值问题

#15


引用 7 楼 justlearn 的回复:
引用 6 楼 fengjinchaowangbadan 的回复:
谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

session.setAttribute("logID",logid);//
你sessi……


同意

#16


引用错了,重写一遍

出现了空指针一场,表示在某个地方,值为空。检查可知

session.setAttribute("logID",logid);
String userid =(String)session.getAttribute("userID").toString()

出现了错误。
原因:logID != userID

#17


反正是可以引用同一个session

#18


你修改以后出现的错误时数据类型转换错误,应该不是这里出错了,仔细看看代码,是不是String类型与int型相互转化时侯代码写错了

#19


打个断点调试一下不就知道了!

#20


String userid =(String)session.getAttribute("logID")//
这样,不过你的的logid是int型的,也有可能(String) 有问题,换种转换方式

#21


session.setAttribute("logID",logid);
session.getAttribute("logID",logid);//
不用toString();

#22


Integer.parseInt(session.getAtrribute(XXXXX)).toString();
是否可行?????

#23


把session的id取出来,然后别的页面通过id找session试试,这是我的想法,不一定好使哈

#24


一个Session是绝对可以在多个JSP页面引用的,因为我就用过,还有这个

session.setAttribute("logID",logid);//logid是从登录界面获得的用户id变量是int型;
在显示个人博客页面获得用户id成功:
String userid =(String)session.getAttribute("userID").toString();
想在显示个人信息页面同样获得,再写同样一句就提示错误:
String userid =(String)session.getAttribute("userID").toString();
toString()和(String)转换是不行的,而且你获得的Session一个是logID,一个是userID,名字应该一致吧。如果你用了Struts,转换问题还好解决。

#25


可以可以

#26


谢谢大家了!用session传int型的还得转来转去的,容易出错,最后改传的username,全是String型不用类型转换就没事了。谢谢各位了!呵呵

#1


完全可以。

#2


String userid =(String)session.getAttribute("userID"). toString();
 不要 toString()

因为如果你的 session 中如果不存在userID 会报空指针异常

你可以这样
String userid =session.getAttribute("userID")+"";
  会自动转成 String

#3


String userid =(String)session.getAttribute("userID").toString();

报了空指针异常,应该是你的session中的数据丢失了.
你试试
String userid =(String)session.getAttribute("userID");
if(userid == null){
  System.out.println("userid 为空了.");
}

你检查下自己的代码吧,这样用是没有问题的`肯定哪里出现了编码的逻辑错误.

#4


你明明是session.setAttribute("logID",logid);//
怎么取的时候变成
String userid =(String)session.getAttribute("userID").toString();

logID?userID?
既然已经用了(String)就不需要toString了,如果值是空的还会报错。

#5


对,如果你的session.getAttribute("userID")==null,你说还能toString()吗

#6


谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

#7


引用 6 楼 fengjinchaowangbadan 的回复:
谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

session.setAttribute("logID",logid);//
你session里设的不是logID么,怎么取的时候用的userID?

#8


可以  String userid =(String)session.getAttribute("userID").toString(); 这一句出错啦   大家都说了,session里存的值跟你取得时候不一样啊

#9


7楼说的正确!!

#10


同意楼上

#11


这个倒也能获取到,你想要获取同样的ID,可以定义一个公共类,第一次取出ID时把userid保存在xxx类中里,xxxForm.setUserid(userid);第二次取比较容易取,而且不会出错...

#12


实践过。。是完全没有问题的!

#13


程序里都是userID,我发帖时不小心写错的,谢谢各位了,我也不知道怎么回事,我又改了一下午了,还是不行,不指示那句错了,但还是所有有那句的都错,同一个错误提示:java.lang.ClassCastException: java.lang.Integer;
org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Integer
我再改改看吧,谢谢各位了!

#14


这个是数据类型转换错误啊,不是取值问题

#15


引用 7 楼 justlearn 的回复:
引用 6 楼 fengjinchaowangbadan 的回复:
谢谢各位了!那是之前我写String userid =(String)session.getAttribute("userID");时报错,我自作聪明加上的toString().不过现在我去掉了,还是报错,只要有这句的页面都出错了

session.setAttribute("logID",logid);//
你sessi……


同意

#16


引用错了,重写一遍

出现了空指针一场,表示在某个地方,值为空。检查可知

session.setAttribute("logID",logid);
String userid =(String)session.getAttribute("userID").toString()

出现了错误。
原因:logID != userID

#17


反正是可以引用同一个session

#18


你修改以后出现的错误时数据类型转换错误,应该不是这里出错了,仔细看看代码,是不是String类型与int型相互转化时侯代码写错了

#19


打个断点调试一下不就知道了!

#20


String userid =(String)session.getAttribute("logID")//
这样,不过你的的logid是int型的,也有可能(String) 有问题,换种转换方式

#21


session.setAttribute("logID",logid);
session.getAttribute("logID",logid);//
不用toString();

#22


Integer.parseInt(session.getAtrribute(XXXXX)).toString();
是否可行?????

#23


把session的id取出来,然后别的页面通过id找session试试,这是我的想法,不一定好使哈

#24


一个Session是绝对可以在多个JSP页面引用的,因为我就用过,还有这个

session.setAttribute("logID",logid);//logid是从登录界面获得的用户id变量是int型;
在显示个人博客页面获得用户id成功:
String userid =(String)session.getAttribute("userID").toString();
想在显示个人信息页面同样获得,再写同样一句就提示错误:
String userid =(String)session.getAttribute("userID").toString();
toString()和(String)转换是不行的,而且你获得的Session一个是logID,一个是userID,名字应该一致吧。如果你用了Struts,转换问题还好解决。

#25


可以可以

#26


谢谢大家了!用session传int型的还得转来转去的,容易出错,最后改传的username,全是String型不用类型转换就没事了。谢谢各位了!呵呵