如果从servlet重定向,则对JSP执行操作

时间:2016-11-20 20:27:13

标签: java jsp redirect servlets jsp-tags

如果从特定的servlet重定向,我想对JSP执行操作,否则什么也不做。是否可能?

在我的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);
    }

1 个答案:

答案 0 :(得分:2)

像这样

在servlet中为请求添加一个属性
httpservletRequest.setAttribute("cameFromServlet", true)

然后在JSP中检查它

<c:if test="${cameFromServlet}">
  DO STUFF HERE
</c:if>

修改

您在编辑中所做的工作无效,因为您正在进行重定向。这意味着浏览器会收到302响应,告诉它针对新网址发出另一个请求。您是否有特定要求更改用户的URL?如果是这样,您将需要将cameFromServlet属性添加到会话中 - 如下所示:

req.getSession().setAttribute("cameFromServlet", true);

但是请记住,cameFromServlet属性将保留在会话上,直到你取消设置为止如果有另一个时间显示jsp页面你会遇到问题,除非你做一些事情来取消它 - 通过在中间引入另一个servlet并将其从会话移动到请求 - 从而模拟Spring flash映射行为或在使用它之后在JSP中取消它 - 如下所示:

<c:remove var="cameFromServlet" scope="session" /> 

如果您不需要为用户更改URL,您可以更改您的servlet代码以使用请求调度程序(我认为您在做什么)

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/yourjsp.jsp");
requestDispatcher.forward(req, resp);