问题标签 [com.sun.net.httpserver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何在 Java HttpServer 中处理失败的身份验证
我在基于 com.sun.net.httpserver.HttpServer 的 Java 程序中实现了一个小型 HTTP 服务器,它也使用基本身份验证。这一切都很好,但是,我想处理任何失败的身份验证请求。
默认情况下,当用户身份验证失败时(当她点击浏览器登录弹出窗口上的取消按钮时),会向客户端发送一个空白页面;未调用 HttpHandler 的 handle() 方法。
有什么想法可以在我的程序中捕获这些失败的身份验证尝试吗?
谢谢!
java - HttpExchange getRequestURI 在第一个 & 符号之前结束
原始 URI 是(假设):
http://xx.xx.xxx.xx:8000/mypath?parm1=1&parm2=he
getRequestURI
返回:http://xx.xx.xxx.xx:8000/mypath?parm1=1
它忽略第二个参数。
如果我用&
逗号替换,它将返回包含所有参数的完整 URI。
你遇到过同样的问题吗?你有什么解决办法吗?它是通过另一种方法读取第一个 GET 标题行的方法吗?(使用HTTPServer
)。
java - 第一次测试后,junit 中的 HttpServer 失败并出现地址使用错误
我有一个用于 JUnit 4.x 的 Java 类。在每个 @Test 方法中,我创建一个新的 HttpServer,使用端口 9090。第一次调用工作找到,但随后的错误“地址已在使用中:绑定”。
这是一个例子:
很明显,HttpServer 只包含在每个方法中,并在结束前停止。我看不到是什么继续保持任何套接字打开。第一个测试通过,随后的测试每次都失败。
有任何想法吗?
用更正的方法编辑:
java - 从 js/jQuery 通过 WLAN 与服务器通信的最快方式
我设置了迷你服务器,com.sun.net.httpserver
作为应用程序的一部分,它能够从硬盘映射文件并将它们作为响应发送,现在只是简单的东西(js、css、图像、html)。
我的要求是以尽可能少的开销与服务器交谈,现在我正在使用 jQuery ajax HEAD 请求将请求发送回服务器(我正在解析服务器上的查询字符串并根据查询字符串执行所需的操作)
但这对我的需求来说太慢了,在我的代码中需要 1-2 秒(有时更多)来接收解析查询字符串的请求,并且连接经常被太多请求阻塞,我通过超时和计时器部分解决了这个问题,但是这样做只会减慢整个事情的速度。
是否有另一种更快的方式使用 js/jQuery 与服务器通信?
也许像反向长轮询?有这样的事吗?我假设每次建立连接都会增加很多开销,还是我错了?
java - Sun HTTPServer - 我如何编写后处理过滤器?
我用 Sun JRE 的 HTTP 服务器尝试了一些东西。在阅读了两次文档后,我仍然感到困惑。
com.sun.net.httpserver.Filter javadoc 说以下
要求此过滤器对给定的交换进行预处理/后处理。过滤器可以:
- 检查或修改请求标头
- 通过创建合适的过滤器流并调用 HttpExchange.setStreams(InputStream,OutputStream) 过滤请求体或响应体
- 设置属性交换中的对象,其他过滤器或交换处理程序可以访问。
决定:
- 通过调用 Filter.Chain.doFilter(HttpExchange) 调用链中的下一个过滤器
- 通过不调用 Filter.Chain.doFilter(HttpExchange) 来终止调用链
如果采用上述选项 1.,则当 doFilter() 返回时,Chain 中的所有后续过滤器都已被调用,并且可以检查或修改响应标头。如果采用上述选项 2,则此过滤器必须使用 HttpExchange 发送回适当的响应
我不清楚什么,什么决定过滤器何时是预处理过滤器或后处理过滤器。正如我所假设的,后处理过滤器在 HttpHandler之后运行,因此它可以与 HttpExchange 一起使用由 HttpHandler 修改的内容。然而,过滤器只被调用一次,所以必须有一个“魔法”决定过滤器在处理程序之前或之后运行。
请帮我说清楚。
java - 自 Java 7 以来 HttpServer 延迟 1 秒
我们HttpServer
在项目中使用内部类通过 HTTP 在客户端和服务器之间交换数据。当我们切换到 Java 7 时,我们意识到交付结果的延迟。我们可以将问题简化为以下示例:
类EchoServer
创建上下文,该上下文/echo
仅在每个请求时返回当前日期和请求 URI。然后,该服务由客户端循环调用。
以下客户端使用类在无限循环中调用服务,URL
并打印返回流中的第一个字符(这将是<
符号)。此外,客户端打印当前时间。
如果此代码在 Java6 上执行,则一切正常,并且大约会打印一个结果。每 5 毫秒。
如果代码在 Java7 上执行,那么每个请求大约使用 1000 毫秒。
似乎在某处隐藏了 1000 毫秒的超时。InputStreamReader
如果字符是在 上而不是在上读取的,则会BufferedReader
发生相同的延迟。如果直接从输入流中读取一个字节,则看不到延迟。另一方面,如果EchoClient
程序是针对 servlet 运行的,那么一切正常,与是否使用 theBufferedReader
或 the无关InputStreamReader
。
看来,该类InputStreamReader
期望来自服务器的某些东西不再由 HttpServer 的 Java 7 实现提供。你知道这里到底发生了什么以及如何解决这个问题吗?一种解决方法?或者这是一个错误?
谢谢!
我在客户端代码中添加了更多时间:
结果如下:
第一次调用openStream
需要一些时间(70 毫秒),但所有进一步的调用openStream
需要更长的时间(大约 996 毫秒)。
java - Java HttpExchange:POST 请求正文中缺少数据
在我的 Java 应用程序中,我将这些com.sun.net.httpserver
类用于小型内置 Web 服务器。我也想支持文件上传。用户可以从网页中选择标准 HTML 格式的文件:
在该上传页面(数据发布到的地方)的处理程序中,我执行以下操作:
但是,我第一次调用reader.readLine()
收到的 String 不包含原始文件的第一行。相反,我在 Java 代码中得到的第一行是上传文件中间某行的一部分。
文件的第一部分似乎以某种方式丢失了。这是可重现的,我从第一次得到的readLine()
总是相同的(因为在上传过程中丢失的字节数总是相同的)。
有任何想法吗?
java - Sun Java HttpServer - 服务请求速度慢或浪费资源 (TIME_WAIT/CLOSE_WAIT)
第一的,
我进行了很多搜索以找到解决方案,但找不到合适的解决方案。
环境
- (高效)Mongoose WebServer 回复简单的 GET 请求(所有数据都通过 QueryString 传输)
- Apache HttpClient(单个实例!)用于按顺序发出数十万个单个请求。
Apache HttpClient 与 mongoose 交互效果很好
/li>
问题
- (模拟)使用 Sun HttpServer 实现 WebServer 与 FireFox / Curl 配合使用
- 使用 Apache HttpClient 和在生产服务器上运行一样,客户端的性能非常糟糕(~ 1 次请求/秒)
- 使用 Apache HttpClient 并在网上找到以下代码导致
- 客户端的巨大性能提升
- 由于 CLOSE_WAIT 状态的打开套接字与处理的请求一样多,导致资源浪费(直到没有更多的 FD 可用!)
代码:
显然我在http服务器实现中遗漏了一些东西,这导致了这种极端的“缓慢”
任何提示/帮助表示赞赏。
提前致谢!
代码
HttpServer
HttpHandler
参数过滤器
java - 使用sun HttpsServer时如何获取ssl session
我正在使用com.sun.net.httpserver.HttpsServer
as Https Server 并希望访问 SSL 会话。
我在HttpHandler
. 使用纯文本时,SSLServerSocket
我可以通过该方法访问客户端证书等,但SSLSocket.getSession(...)
我在.HttpExchange
handle
HttpHandler
有没有办法访问它?