gpt4 book ai didi

java - Sun HTTPServer - 如何编写后处理过滤器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:51 25 4
gpt4 key购买 nike

我尝试使用 Sun JRE 的 HTTP 服务器做一些事情。看了两遍文档,还是一头雾水。

com.sun.net.httpserver.Filter javadoc 说明如下

Asks this filter to pre/post-process the given exchange. The filter can :

  • examine or modify the request headers
  • filter the request body or the response body, by creating suitable filter streams and calling HttpExchange.setStreams(InputStream,OutputStream)
  • set attribute Objects in the exchange, which other filters or the exchange handler can access.
  • decide to either :

    • invoke the next filter in the chain, by calling Filter.Chain.doFilter(HttpExchange)
    • terminate the chain of invocation, by not calling Filter.Chain.doFilter(HttpExchange)

    if option 1. above taken, then when doFilter() returns all subsequent filters in the Chain have been called, and the response headers can be examined or modified. if option 2. above taken, then this Filter must use the HttpExchange to send back an appropriate response

我不清楚什么决定过滤器是预处理过滤器还是后处理过滤器。正如我假设的那样,后处理过滤器在 HttpHandler 之后 运行,因此它可以与 HttpHandler 修改的 HttpExchange 一起工作。但是,过滤器只被调用一次,因此必须有一个“魔法”决定过滤器在处理程序之前或之后运行。

请帮我说清楚

最佳答案

每个过滤器都是前置过滤器和后置过滤器。我的意思是请求在堆栈中移动时通过它,然后响应在返回客户端的途中通过它返回。调用过滤器的顺序取决于您将它安装在 web.xml 文件中的顺序。

如果您将它用作预过滤器,您将修改 InputStream,如果您希望将它用作 Post,您将修改 OutputStream。您甚至可以通过链向下传递您自己的 InputStreamOutputStream

例如,假设您有几个 Filter1Filter2Filter3InputStream 将首先通过 Filter1,然后是 Filter2,最后是 Filter3,然后再进行处理。生成的 OutputStream 将返回到 Filter3,然后是 Filter2,最后是 Filter1,然后发送到客户端。因此,您可以通过这种方式修改预处理和/或后处理。

关于java - Sun HTTPServer - 如何编写后处理过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com