【问题标题】:Perform an action on JSP if redirected from a servlet如果从 servlet 重定向,则对 JSP 执行操作
【发布时间】:2016-11-20 20:27:12
【问题描述】:

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

在我的 JSP 中定义了不同的错误。此 JSP 调用一个 servlet(contentType 为 application/pdf),它在新选项卡中打开并搜索 PDF 25 秒,然后如果未找到 PDF,则重定向到显示错误消息“找不到文件”的同一 JSP。如果从 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);
    }

【问题讨论】:

    标签: java jsp redirect servlets jsp-tags


    【解决方案1】:

    像这样在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 闪存映射行为或在您使用后在 JSP 中取消设置 - 像这样:

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

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

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

    【讨论】:

    • 感谢 JSTL 确实 ( if test != ) 有效,或者是否还有其他关键字?
    • 你可以使用!或者单词 not there 也有一个存在关键字
    • 它在我的情况下不起作用。对于基本的 Q 感到抱歉,但我是编程世界的新手。我已经在上面的 Q 中添加了 JSP/servlet 代码
    • 是的@Sam,IT 帮了很多忙,让事情变得清晰。谢谢
    • 好消息 :)。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多