首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpServletResponseWrapper.toString()在过滤器中不返回任何内容

HttpServletResponseWrapper.toString()在过滤器中不返回任何内容
EN

Stack Overflow用户
提问于 2014-11-24 09:49:31
回答 1查看 1.1K关注 0票数 0

我的目标:向响应中注入任何文本。

在各种小项目上,我已经成功地实现了一个过滤器,它改变了响应。

我的方法:,你可以在我问题的底部找到所有的代码!我面临的问题是,当我将代码放入大型web应用程序时,HttpServletResponseWrapper.toString()正在返回"“(我的项目具有许多过滤器、安全性、spring和struts框架,jsp和FTL视图)。在简单项目中使用时,HttpServletResponseWrapper.getStatus()返回304。但是在我的大应用程序上使用时,返回的状态是200 (表示请求正常成功)。最后发生的是未改变的响应呈现给浏览器。

如果我能从你那里得到任何关于这个问题的建议,我将不胜感激。提前谢谢。下面是我使用的代码:

LogFilter.java

代码语言:javascript
复制
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class LogFilter implements Filter  {
    public void  init(FilterConfig config) 
            throws ServletException{

    }
    public void  doFilter(ServletRequest request, 
            ServletResponse response,
            FilterChain chain) 
                    throws java.io.IOException, ServletException {


        System.out.println("BEFORE filter");

        ServletOutputStream out = response.getOutputStream();

        CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);

        chain.doFilter(request, responseWrapper);

        System.out.println("status : "+responseWrapper.getStatus());
        String servletResponse = new String(responseWrapper.toString());

        out.write((servletResponse + " filtered all data without any issues <B>Hahaha :)</B>").getBytes()); // Here you can change the response


        System.out.println("AFTER filter, original response: "
                + servletResponse.toString());


    }
    public void destroy() {
    }
}

CharResponseWrapper.java

代码语言:javascript
复制
import java.io.CharArrayWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class CharResponseWrapper extends HttpServletResponseWrapper {
    private CharArrayWriter output;

    public String toString() {
        return output.toString();
    }

    public CharResponseWrapper(HttpServletResponse response) {
        super(response);
        output = new CharArrayWriter();
    }

    public PrintWriter getWriter() {
        return new PrintWriter(output);
    }
}

web.xml

代码语言:javascript
复制
.
.
.
.
    <filter>
        <filter-name>LogFilter</filter-name>
        <filter-class>com.<<hidden>>.web.LogFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LogFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
.
.
.
EN

回答 1

Stack Overflow用户

发布于 2014-11-26 04:12:32

非常感谢@JBNizet。您是对的,我必须重写我错过实现的getOutputStream。在搜索了更多之后,我在check answers得到了一个例子。现在起作用了。我要结束我的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27101872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档