如何在JSP中终止请求(而不是“return;”)

时间:2012-06-30 14:50:43

标签: jsp httpwebrequest

我正在用JSP编写一个网站。有些页面用户必须登录才能看到它。如果他们没有登录,他们应该看到登录表单。我在php代码中看到你可以创建一个.jsp页面(单个文件)来检查用户是否登录。如果没有,它将显示登录表单。如果用户已登录,则不会执行任何操作。所以为了做到这一点,我在JSP中使用了这个结构:

标题,菜单等等...... 向登录用户显示的正常内容,如正文,页脚。

此结构非常易于应用于所有网页。所以我不必对每个网页应用检查算法!我可以简单地添加这个“”,页面是安全的!

所以我的问题是如果用户没有登录,那么只显示登录表单和页脚。所以代码应绕过身体。因此,我的checklogin.jsp结构化了:

如果用户未登录,则显示登录表单和页脚并终止请求。 问题是我不知道如何终止请求......如果我使用“return;”然后只有checklogin.jsp停止,但服务器继续处理父页面!因此页面有2个页脚! (父页面为1,checklogin.jsp为1)。我怎么能避免这个?

(有退出();顺便说一句,在php中!)

感谢您的任何建议!

编辑1:我也尝试过response.getOutputStream()。close();但似乎没有用。

编辑2:我在PHP中需要一个模拟:exit();

2 个答案:

答案 0 :(得分:2)

好的,我的问题的答案是out.close();这只是结束了回应。感谢JB Nizet指出了有关此问题的另一个方面。

答案 1 :(得分:1)

你可以像在任何编程语言中那样做:

<c:choose>
    <c:when test="userIsLoggedIn">
        normal header, body
    </c:when>
    <c:otherwise>
        login form
    </c:otherwise>
</c:choose>
footer

但主要问题是你根本不应该这样做。应该使用JSP来生成标记。不检查用户是否已登录并显示页面或其他页面,具体取决于结果。您应该在Java中,在调度到适当的JSP的servlet中执行此操作。这是MVC模式。

由于几乎所有请求都应该完成,你甚至应该在servlet过滤器中做到这一点。过滤器映射到一组URL(如servlet),并拦截对这些URL的所有请求。因此,过滤器将检查用户是否已登录并转发或重定向到登录页面(如果不是)。如果用户经过身份验证,除了让请求转到映射到URL的servlet / JSP之外,它不会做任何事情。

阅读http://www.oracle.com/technetwork/java/filters-137243.html,例如,了解有关过滤器的更多信息。