我想问一下jsp中的session

时间:2016-06-10 01:17:08

标签: jsp jsp-tags

的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");
%>

代码工作正常,但如果我没有选择adminmember值,理想情况下应该转到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");

2 个答案:

答案 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;的值将被设置。)