如果在第一个 jsp 页面设置了刷新参数,则会刷新所有 jsp 页面

All jsp pages are getting refreshed if refresh parameter is set at the first jsp page

本文关键字:jsp 刷新 页面 参数 页面设置 如果 第一个      更新时间:2023-09-26

我正在尝试刷新起始页(调用某些函数)说"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>

2.jsp

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

网络.xml

<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");
        }
    }
});
}

我的猜测是,当您执行rd.forward(request, response)时,您实际上会转发response.addHeader("Refresh","2"),从而导致下一页也自动刷新。

我不确定为什么您需要在转发之前刷新,但是如果您必须拥有它 - 检查是否可以删除特定标头("刷新"),也许使用此处提出的解决方案:如何删除HTTP响应标头?

编辑:

此外,您应该考虑通过 HTML 标记来触发刷新,而不是通过服务器端属性(如标头)触发刷新:<meta http-equiv="refresh" content="2" />