如果从 servlet 重定向,则对 JSP 执行操作
Perform an action on JSP if redirected from a servlet
如果仅从特定 servlet 重定向,我想对 JSP 执行操作,否则 nothing.Is 可能吗?
在我的 JSP 中定义了不同的错误。此 JSP 调用一个 servlet(contentType 为 application/pdf),它在新选项卡中打开并搜索 PDF 25 秒,然后如果未找到 PDF 则重定向到相同的 JSP 显示错误消息 "File not found"。如果仅从 servlet 调用,我想显示错误,否则什么都不做。
JSP代码:
<%}else if(hPP!=null && hPP.get("errorcode")!=null && hPP.get("errorcode").toString().equalsIgnoreCase("Issue")){%>
<c:if test="${cameFromServlet}">
<div class="SplInputField">
<label class="FontBlod">Download fail</label>
</div>
</c:if>
servlet 代码
if (content == null) {
request.setAttribute("cameFromServlet", true);
String redirectJspUrl = request.getParameter("homeRedirect");
String strReceiptPage =
redirectJspUrl.substring(0, redirectJspUrl.lastIndexOf("/")) +
"/GetQReceiptPage";
response.sendRedirect(strReceiptPage);
}
像这样在 servlet 中为请求添加一个属性
httpservletRequest.setAttribute("cameFromServlet", true)
然后在你的 JSP 中检查它
<c:if test="${cameFromServlet}">
DO STUFF HERE
</c:if>
编辑:
您在编辑中所做的操作将不起作用,因为您正在进行重定向。这意味着浏览器会收到一个 302 响应,告诉它针对新 url 发出另一个请求。您是否有为用户更改 url 的特定要求?如果是这样,您将需要将 cameFromServlet 属性添加到会话中 - 如下所示:
req.getSession().setAttribute("cameFromServlet", true);
请记住,cameFromServlet
属性将保留在会话中,直到您取消设置它,因此如果再次显示 jsp 页面,您将 运行 遇到问题除非你做一些事情来取消它 - 通过在中间引入另一个 servlet 并将它从会话移动到请求 - 从而模拟 Springs flash 映射行为或者在你使用它之后在 JSP 中取消它 - 就像这样:
<c:remove var="cameFromServlet" scope="session" />
如果您不需要为用户更改 URL,您可以更改您的 servlet 代码以使用请求调度程序(我认为您正在做的)
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/yourjsp.jsp");
requestDispatcher.forward(req, resp);
如果仅从特定 servlet 重定向,我想对 JSP 执行操作,否则 nothing.Is 可能吗?
在我的 JSP 中定义了不同的错误。此 JSP 调用一个 servlet(contentType 为 application/pdf),它在新选项卡中打开并搜索 PDF 25 秒,然后如果未找到 PDF 则重定向到相同的 JSP 显示错误消息 "File not found"。如果仅从 servlet 调用,我想显示错误,否则什么都不做。
JSP代码:
<%}else if(hPP!=null && hPP.get("errorcode")!=null && hPP.get("errorcode").toString().equalsIgnoreCase("Issue")){%>
<c:if test="${cameFromServlet}">
<div class="SplInputField">
<label class="FontBlod">Download fail</label>
</div>
</c:if>
servlet 代码
if (content == null) {
request.setAttribute("cameFromServlet", true);
String redirectJspUrl = request.getParameter("homeRedirect");
String strReceiptPage =
redirectJspUrl.substring(0, redirectJspUrl.lastIndexOf("/")) +
"/GetQReceiptPage";
response.sendRedirect(strReceiptPage);
}
像这样在 servlet 中为请求添加一个属性
httpservletRequest.setAttribute("cameFromServlet", true)
然后在你的 JSP 中检查它
<c:if test="${cameFromServlet}">
DO STUFF HERE
</c:if>
编辑:
您在编辑中所做的操作将不起作用,因为您正在进行重定向。这意味着浏览器会收到一个 302 响应,告诉它针对新 url 发出另一个请求。您是否有为用户更改 url 的特定要求?如果是这样,您将需要将 cameFromServlet 属性添加到会话中 - 如下所示:
req.getSession().setAttribute("cameFromServlet", true);
请记住,cameFromServlet
属性将保留在会话中,直到您取消设置它,因此如果再次显示 jsp 页面,您将 运行 遇到问题除非你做一些事情来取消它 - 通过在中间引入另一个 servlet 并将它从会话移动到请求 - 从而模拟 Springs flash 映射行为或者在你使用它之后在 JSP 中取消它 - 就像这样:
<c:remove var="cameFromServlet" scope="session" />
如果您不需要为用户更改 URL,您可以更改您的 servlet 代码以使用请求调度程序(我认为您正在做的)
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/yourjsp.jsp");
requestDispatcher.forward(req, resp);