首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获的CharResponseWrapper内容为空

捕获的CharResponseWrapper内容为空
EN

Stack Overflow用户
提问于 2016-02-24 15:35:37
回答 1查看 806关注 0票数 1

我尝试了下面的示例来替换servlet响应中的一些内容。

编写定制请求和响应的程序

test.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"></meta>
    <link th:href="@{/css/test.css}" rel="stylesheet"></link>
    <title>Test</title>
</head>
<body>
    <p class="forbiddenClass">Test!</p>
</body>
</html>

test.css:

代码语言:javascript
复制
.forbiddenClass {
    color: red;
}

CharResponseWrapper.java

代码语言:javascript
复制
public class CharResponseWrapper extends HttpServletResponseWrapper {

    private final CharArrayWriter output;

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

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

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

ClassReplacementFilter.java

代码语言:javascript
复制
@Component
public class ClassReplacementFilter extends GenericFilterBean {

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
            throws IOException, ServletException {

        final CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse) response);
        chain.doFilter(request, wrapper);

        String content = wrapper.toString();
        if (StringUtils.isEmpty(content)) {
            System.out.println("content is empty for content type: " + response.getContentType());
        } else {
            content = content.replaceAll("forbiddenClass", "correctClass");
            response.setContentLength(content.getBytes().length);
            response.getOutputStream().write(content.getBytes());
        }
    }
}

正如您可能看到的,我希望将字符串forbiddenClass替换为correctClass,但它只适用于html文件。test.css的内容不会更改,并将输出筛选器的以下消息。

代码语言:javascript
复制
content is empty for content type: text/css;charset=UTF-8

为什么test.css的内容是空的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 20:02:26

为什么test.css的内容是空的?

因为您只捕获了任何写入response.getWriter()的内容,而不是任何写入response.getOutputStream()的内容。

您需要HttpServletResponseWrapper实现,如下面对相关问题:捕获所有应该捕获所有HTML输入内容以进行操作的servlet过滤器,只能间歇地工作。的答案的底部所示。

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

https://stackoverflow.com/questions/35606343

复制
相关文章

相似问题

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