有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果从servlet重定向,java将在JSP上执行操作

如果从特定servlet重定向,我想在JSP上执行一个操作,否则什么也不做。可能吗

在我的JSP中定义了不同的错误。此JSP调用一个servlet(contentType为application/pdf),该servlet在新选项卡中打开并搜索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) 个答案

  1. # 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);

    但在脑海中,^ {CD2}}属性将保留在会话中,直到您取消它,所以如果显示了JSP页面的另一个时间,除非您做一些事情来取消它,否则您将遇到问题,或者通过在中间引入另一个servlet并将其从会话移动到请求——从而模拟Simulink Flash Max行为或取消它的设置。在使用JSP之后,它会自动更新,如下所示:

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

    如果不需要为用户更改URL,可以更改servlet代码以使用请求调度器(我以为您正在做的事情)

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