java – 从session属性获取数据返回空指针
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从session属性获取数据返回空指针,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2453字,纯文字阅读大概需要4分钟。
内容图文
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name"); // get param
List<String> list = new ArrayList<String>(); // create list
HttpSession session = request.getSession(); // create a session handler object
// if this is new session , add the param to the list, then set the list as session atr
if(session.isNew()) {
System.out.println("in new session");
// this is a new session , add the param to the new list, then add list to session atr
list.add(name);
session.setAttribute("list", list);
}else{
System.out.println("in old session");
// THIS SESSION ALREADY EXISTS (THERE IS DATA IN LIST THAT WE NEED, THAT DATA IS STORED IN SESSION ATR)
// get the session atr , then store the content of a atr list, to this new list
list = (List<String>)session.getAttribute("list");
// add the new item to the list
list.add(name);
// set the new session atr, now with this newly added item
session.setAttribute("list", list);
}
我的评论几乎就是这么说的.我从jsp页面重定向来自提交的地方,获取名称,创建列表和会话处理程序.
该程序的一点是将用户输入保存在列表中.显然,我需要会话,所以我可以在用户之间做出改变,并为不同的用户提供不同的列表.我在else语句中获取空指针异常,我尝试检索已存在的列表,以便我可以在其中添加更多项.我错过了什么?谢谢
解决方法:
这确实不是维护会话范围对象的正确方法.您依赖于HttpSession#isNew(),它只会在HTTP会话是新的时返回true,而不是在会话范围对象不存在时返回.如果在调用servlet之前已经(隐式)创建了会话,那么isNew()将返回false.例如,当您打开没有<%@ page session =“false”%>的JSP页面时事先在同一个会话中.
您应该检查是否存在感兴趣的会话作用域对象.
所以,而不是:
HttpSession session = request.getSession();
List<String> list = new ArrayList<String>();
if (session.isNew()) {
list.add(name);
session.setAttribute("list", list);
} else {
list = (List<String>) session.getAttribute("list");
list.add(name);
session.setAttribute("list", list);
}
你应该这样做:
HttpSession session = request.getSession();
List<String> list = (List<String>) session.getAttribute("list");
if (list == null) {
list = new ArrayList<String>();
session.setAttribute("list", list);
}
list.add(name);
请注意,您不需要将该列表放回会话中.会话不包含List对象的副本,正如您在PHP等过程语言中所期望的那样. Java是一种面向对象的语言.会话保存对List对象的引用的副本.对List等可变对象的所有更改都会反映在所有引用中.
要了解HTTP会话如何工作,请转到How do servlets work? Instantiation, sessions, shared variables and multithreading.
内容总结
以上是互联网集市为您收集整理的java – 从session属性获取数据返回空指针全部内容,希望文章能够帮你解决java – 从session属性获取数据返回空指针所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。