如果从 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);