从导入的JSP重定向整个页面

时间:2015-03-16 14:57:40

标签: java jsp redirect jstl response.redirect

我有两个jsp,让我们说A.jspB.jspA.jsp具有以下代码:

<c:import url="B.jsp" >    
    <c:param name = "page_title" value = "Title" />
</c:import>

B.jsp我需要检查一些条件并重定向到Login.jsp。我通过response.sendRedirect(Logn.jsp)

来实现这一目标

问题是重定向是在B.jsp上进行的,结果是浏览器显示Login.jspA.jsp的内容,但我需要将整个页面重定向到{{ 1}}。也就是说,浏览器应该只显示Login.jsp

考虑必须在Login.jsp上进行重定向,除非B.jsp能够告诉B.jsp网址重定向到。{/ p>

编辑: A.jspA.jsp属于不同的项目

2 个答案:

答案 0 :(得分:0)

B.jsp,而不是进行重定向,在 request 上设置一个标记为

<c:set var="login" value="true" scope="request" />

然后在A.jsp中检查标记和重定向(如果存在)。

<c:if test="${login == 'true'}">
    <c:redirect url="/login.jsp" />
</c:if>

尝试改为jsp:include

<jsp:include page="B.jsp" >    
    <jsp:param name="page_title" value="Title" />
</jsp:include>

答案 1 :(得分:0)

解决这个问题有两个部分:

1)确保在A中执行逻辑之前,您没有向A中的客户端发送任何HTML。这意味着您必须尽早调用B.jsp(良好的MVC设计的一部分)。

2)使用c:import中的var参数:

<c:import url="B.jsp" var="output"> 

现在,对B的调用输出将在缓冲区中调用&#34;输出&#34;而不是直接发送给客户端。这允许您在A中做出决定(在致电B之后)。如果您决定要重定向,则可以,因为您没有向浏览器倾倒任何内容(可能除了一些空格)。如果您决定将B的输出发送到浏览器,则可以在c:import之后执行此操作:

${output}

如果有必要,甚至可以摆脱发送到浏览器的空白区域的技巧,但它很少(如果你发送太多的空白区域,缓冲区将提交,然后你不能重定向,但是&# 39;罕见且完全不同的问题)。

有意义吗?