的index.jsp
<form action="a.jsp" method="post">
<input type="text" name="a">
<input type="radio" name="b" value="admin">admin <input type="radio" name="b" value="member">member
<input type="submit" value="c">
</form>
a.jsp
<% String a=request.getParameter("a"); String b=request.getParameter("b");
session.setAttribute("a",a); session.setAttribute("b",b);
response.sendRedirect("b.jsp"); %>
b.jsp
<%
String b = (String)session.getAttribute("b");
if(b!="")
{
if(b.equals("admin"))
{
out.print(session.getAttribute("a"));
out.print("this is admin");
}
else if(b.equals("member"))
{
out.print(session.getAttribute("a"));
out.print("this is member");
}
}
else
{
out.print(session.getAttribute("a"));
out.print("this is guest");
}
%>
<form action="d.jsp" method="post">
<input type="submit" value="d" />
</form>
d.jsp
<%
session.invalidate();
response.sendRedirect("index.jsp");
%>
代码工作正常,但如果我没有选择admin
或member
值,理想情况下应该转到b.jsp
页面中的访客状况,但我的意思是获取是第5行的错误。
错误 在第5行处理JSP页面/c/b.jsp时发生异常
2: String b = (String)session.getAttribute("b");
3: if(b!="")
4: {
5: if(b.equals("admin"))
6: {
7: out.print(session.getAttribute("a"));
8: out.print("this is admin");
答案 0 :(得分:0)
在b.jsp
中,您似乎正在尝试检查会话映射中的密钥为b
的条目,然后根据该值确定正在查看该页面的用户类型。< / p>
有问题的代码是b.jsp
中的scriptlet的第二行:
if (b!="")
{
如果会话映射中没有b
条目,则此比较应为true
,从而导致执行检查admin或成员的代码。这反过来会导致在b
等比较中取消引用b.equals("admin")
,这将导致NullPointerException
。我的意图是在会话映射中检查b
是否有任何条目。如果未找到任何条目,则您将该用户视为访客。如果会话中没有键b
的条目,则返回null
,而不是空字符串。所以你应该检查null
:
if (b != null)
{
或者,如果您还想将空字符串值视为来宾,那么您可以尝试:
if (b != null && !b.equals(""))
{
答案 1 :(得分:0)
例外原因:
当且仅当未设置参数值时,b.jsp才会调用nullPointerException。
如上所述,在不选择任何单选按钮的情况下提交表格必须视为访客。
所以这是2个解决方案:
解决方案1:
而不是将参数检查为
if(b!="")
{
下面的代码工作正常,用这个
替换你的b.jsp
<%
String b = (String)session.getAttribute("b");
if(b==null)
{
out.print(session.getAttribute("a"));
out.print("this is guest");
}
else {
if(b.equals("admin"))
{
out.print(session.getAttribute("a"));
out.print("this is admin");
}
else if(b.equals("member"))
{
out.print(session.getAttribute("a"));
out.print("this is member");
}
}
%>
<form action="d.jsp" method="post">
<input type="submit" value="d" />
</form>
解决方案2:
将Guest单选按钮也放在表单中,以便访客用户直接选择&#34; guest&#34;选项。 (这里避免了nullPointerException,因为参数&#34; b&#34;的值将被设置。)