我有两个jsp,让我们说A.jsp
和B.jsp
。 A.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.jsp
和A.jsp
的内容,但我需要将整个页面重定向到{{ 1}}。也就是说,浏览器应该只显示Login.jsp
。
考虑必须在Login.jsp
上进行重定向,除非B.jsp
能够告诉B.jsp
网址重定向到。{/ p>
编辑: A.jsp
和A.jsp
属于不同的项目
答案 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;罕见且完全不同的问题)。
有意义吗?