我正在尝试在Google App Engine
上编写我的第一个应用程序,我正在尝试维护会话,我在提交时创建了一个登录页面,它调用了servlet
,servlet验证了用户并创建了使用以下代码的新会话。
void createSession(String Username) {
getThreadLocalRequest().getSession(true).setAttribute("Username", Username);
}
调用servlet后,登录页面重定向到某个页面,即abc.jsp
,我的abc.jsp
页面包含
<body><%
try {
if (request.getSession(false) == null) {
} else {
%>
Welcome to
<%=session.getAttribute("Username")%>
<%
if (session.getAttribute("Username").equals("")) {
%>
<a href="login.jsp"><b>Login </b></a>
<%
} else {
%>
<a href="logout.jsp"><b>Logout</b></a>
<%
}
}
} catch (Exception e) {
}
%></body>
它工作正常,但是当我访问abc.jsp
而没有创建会话时,它会在此if (session.getAttribute("Username").equals(""))
行引发异常,我不知道为什么要帮助我。我认为它不会检测会话是否存在。但我读了很多线程,比如this它给了我这个解决方案,我不知道我做错了什么。
答案 0 :(得分:13)
据我记得
session.getAttribute("xyz")
如果属性不存在,返回null
...
所以你的NullPointerException发生是因为你试图在equals
上调用null
。
我建议在验证其内容之前检查您的属性:
if (session.getAttribute("Username") == null || session.getAttribute("Username").equals(""))
答案 1 :(得分:0)
<%
if (session.getAttribute("Username") != null) {
…
}
%>
答案 2 :(得分:0)
在检查会话的属性之前,您必须查看会话本身。
所以,第一次:
HttpSession session = request.getSession(false);
if(session != null){...}
和然后,
if(session.getAttribute("xyz") != null){...}
更好的解决方案可能在一行中:
if(session != null && session.getAttribute("xyz") != null)
如果属性不存在,返回null ...所以你的 发生NullPointerException是因为您尝试在null上调用equals。
显然,在验证其内容(如上所述)之前,严格建议 检查您的属性。
答案 3 :(得分:0)
对我有用。试试这个
String userName;
userName = (String)session.getAttribute("uname");
if (session.getAttribute("userName").equals(""))