Java 如果在第一个jsp页面上设置了refresh参数,则所有jsp页面都将被刷新

Java 如果在第一个jsp页面上设置了refresh参数,则所有jsp页面都将被刷新,java,javascript,jquery,jsp,Java,Javascript,Jquery,Jsp,我正在尝试刷新起始页面(调用一些函数),比如“1.jsp”,一旦满足条件,它就会被重定向到另一个jsp页面,比如“2.jsp”,但不确定为什么2.jsp也会被刷新。不仅如此,1.jsp中调用的函数也会被调用。以下是示例代码,仅供理解: 1.jsp <body> <h1>Hello World!</h1> <% // Here i am trying to read some txt file which is contantly

我正在尝试刷新起始页面(调用一些函数),比如“1.jsp”,一旦满足条件,它就会被重定向到另一个jsp页面,比如“2.jsp”,但不确定为什么2.jsp也会被刷新。不仅如此,1.jsp中调用的函数也会被调用。以下是示例代码,仅供理解:

1.jsp

<body>
    <h1>Hello World!</h1>
    <% 
    // Here i am trying to read some txt file which is contantly being updated. (by refreshing the page)
    // when txt file is written completely, some character like "### DONE ###" will be present at its last line.
    // once "### DONE ###" is found , it will be redirected to "2.jsp"


    System.out.println("1");
    // if "###DONE###" found
    RequestDispatcher rd=request.getRequestDispatcher("2.jsp");
    rd.forward(request, response);            

    %>
</body>
<body>
    <h1>Hello World! PAGE 2</h1>
</body>

我的猜测是,当您执行
rd.forward(request,response)
时,实际上是将
response.addHeader(“Refresh”,“2”)
与它一起转发,导致下一页也自动刷新

我不清楚为什么在转发之前需要刷新,但如果必须刷新,请检查是否可以删除特定的标题(“刷新”),可能使用此处建议的解决方案:

编辑:


此外,不要通过像服务器头那样的服务器端属性来触发刷新,您应该考虑通过HTML标签进行这样的操作:<代码> <代码> < /p>您必须编写更多信息化的我的代码。你能调查一下吗?根据我的理解,我已经编辑了我的代码。你能进一步指导我吗。这件事对我来说真的很重要((1)从2.jsp中删除response.setHeader部分。(2)将SampleFilter.java中的url模式改为“catch”2.jsp而不是1.jsp(3),将!name.equalsIgnoreCase(“tt”)替换为!name.equalsIgnoreCase(“Refresh”)->这应该告诉服务器在访问2.jsp时触发过滤器,并防止“Refresh”属性。感谢您的快速回复。我已经再次编辑了我的代码。您建议的代码不是刷新“1.jsp”。我已经解释了在abv代码中刷新1.jsp的原因。请看一下iti。我尝试为“1.jsp”创建另一个过滤器,该过滤器具有“super.setHeader”(“刷新”,“2”)“;”。但“2.jsp”仍在刷新!上面的HTMP标记对我有效。将将此添加到我的代码中,如果有效,将选择此作为答案:)

<welcome-file-list>
    <welcome-file>1.jsp</welcome-file>
</welcome-file-list>

<filter>
    <filter-name>SampleFilter</filter-name>
    <filter-class>com.SampleFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SampleFilter</filter-name>
    <url-pattern>/2.jsp</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
    public void setHeader(String name, String value) {
        System.out.println(name+"-------------------------------");
        if (!name.equalsIgnoreCase("Refresh")) {
            System.out.println("inside");
            super.setHeader("Refresh", "2");
        }
    }
});
}