JSP - 退出执行其余代码

发布于 2025-01-07 08:24:42 字数 536 浏览 0 评论 0原文

在 JSP 页面的第一行中,我检查会话值是否为空。如果为 null 则重定向回登录页面。

当我通过注销来测试它并检查该页面时,它给出了 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();

In the first line of my JSP page, I check for a session value is null. If null redirect back to login page.

When i tested it by loggingout and checked that page, it give a org.apache.jasper.JasperException: java.lang.NullPointerException error.

So how to exit the code just after the sendRedirect line ?

Code:

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

        //prevent executing rest of code.
    }
%>

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

To logout, I use only: session.invalidate();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧情勿念 2025-01-14 08:24:42

你的 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>
    .......
<%   } %>

除了

  • 你不应该使用 scriptlet,而是在 JSP 页面中使用 JSP EL 和 JSTL
  • 这样的逻辑不应该出现在 JSP 中,它只需要生成标记即可。它应该位于您首选的 MVC 框架的操作 servlet 中,它将重定向或分派到 JSP。

Your JSP code is equivalent to:

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

If you don't want to do plenty of other things, the code should be

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

So it should look like that:

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

Except that

  • you shouldn't use scriptlets, but the JSP EL and the JSTL in JSP pages
  • such a logic shouldn't be in a JSP, which should only have to generate markup. It should be in a servlet of action of your preferred MVC framework, which would redirect or dispatch to the JSP.
混吃等死 2025-01-14 08:24:42

是的。
只需添加以下行:

if ( true ) return;

Yes.
Simply add the following line:

if ( true ) return;
潇烟暮雨 2025-01-14 08:24:42

经过更多调试后,我发现了这个问题的原因。

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

我添加的内容:

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

现在,当用户无效时,在执行过程中将不会考虑此 jsp 标记。

After doing some more debugging, I found where this problem was causing.

I have a jsp:include tag. And in the main code, I only assigned the page to include if user is valid(logged in). So, when user is loggedout, this tag was still trying to include it(I used a variable to pass the pagename).

What I have added:

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

Now this jsp tag will not be considered during execution when user is not valid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文