2012-02-19 35 views
1

在我的JSP页面的第一行中,我检查会话值是否为空。如果null重定向回登录页面。JSP - 退出执行代码的其余部分

当我通过登出检查并检查该页面时,它给出了一个org.apache.jasper.JasperException: java.lang.NullPointerException错误。

那么如何在sendRedirect行之后退出代码?

代码:

<% 
    if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user"))) 
    { 
     response.sendRedirect("login.jsp"); 

     //prevent executing rest of code. 
    } 
%> 

<html> 
    <head> 
    ....... 

要注销,我只用:session.invalidate();

+0

相反response.sendRedirect是...使用 ......这会直接将您重定向到登录页面,而不执行的休息代码... – 2012-02-19 07:56:00

+1

我发现了这个问题。我在该页面中有一个jsp:include标签。如果用户无效,则未提供使用该标记的页面。现在我已经包含一个条件来检查会话是否为空。如果为null,则避免使用该标签。这工作。 – 2012-02-19 08:06:58

+0

太棒了!在这里添加答案...因此,体力劳动员将至少与知道prblm是什么... – 2012-02-19 08:09:18

回答

1

你的JSP代码就相当于:

if (someCondition) { 
    redirect(); 
} 
doPlentyOfOtherThings(); 

如果你不想做很多其他的事情,代码应该是

if (someCondition) { 
    redirect(); 
} 
else { 
    doPlentyOfOtherThings(); 
} 

所以应该看起来像:

<% 
    if((session.getAttribute("user_type")==null) || (!session.getAttribute("user_type").equals("user"))) 
    { 
     response.sendRedirect("login.jsp"); 
    } 
    else 
    { 
%> 
<html> 
    <head> 
    ....... 
<% } %> 

  • 你不应该使用scriptlets,而是JSP页面中的JSP EL和JSTL
  • 这样的逻辑不应该在JSP中,它应该只能生成标记。它应该位于您首选的MVC框架的一个servlet中,该框架将重定向或派发到JSP。
+0

非常感谢你解释它。 – 2012-02-19 11:13:11

0

做一些更多的调试之后,我发现这个地方问题造成。

我有一个jsp:include标签。而在主代码中,如果用户有效(登录),我只分配要包含的页面。所以,当用户注销时,这个标签仍然试图包含它(我使用了一个变量来传递页面名称)。

我加入了什么:

<% 
    if(session.getAttribute("user_type")!=null) 
    { 
%> 
     <jsp:include.... /> 
<% 
    } 
%> 

现在这个JSP标签将不会被执行期间,当用户是无效的考虑。

0

是的。 只需添加以下行:

if (true) return; 
相关问题