Java中的简单HTTP服务器仅使用Java SE API

问题:

有没有办法使用Java SE API在Java中创建一个非常基本的HTTP服务器(仅支持GET / POST),而无需编写代码来手动解析HTTP请求并手动格式化HTTP响应? Java SE API很好地封装了HttpURLConnection中的HTTP客户端功能,但是是否具有HTTP服务器功能的模拟功能?
只要清楚,我在网上看到的很多ServerSocket示例的问题是他们自己做了自己的请求解析/响应格式化和错误处理,这是冗长乏味,容易出错的,不太可能是全面的,因为这些原因我试图避免这种情况。
作为我试图避免的手动HTTP操作的示例:
 http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServercode.html

回答:

自从Java SE 6以来,在Sun Oracle JRE中有一个内置的HTTP服务器。 com.sun.net.httpserver package summary概述了所涉及的类并包含示例。
这是一个从他们的文档共享的开始示例,您可以在Java 6+上复制“不粘”。

应该注意的是,他们的例子中的response.length()部分不好,应该是response.getBytes().length。即使这样,getBytes()方法必须明确指定您在响应头中指定的字符集。唉,尽管对初学者的误导,毕竟这只是一个基本的开球例子。
执行它并转到http://localhost:8000/test,您会看到以下响应:

这是回应

关于使用com.sun.*类,请注意,这与某些开发者认为相反,绝对不会被众所周知的FAQ Why Developers Should Not Write Programs That Call ‘sun’ Packages所禁止。该常见问题涉及Oracle JRE内部使用的sun.*程序包(例如sun.misc.BASE64Encoder),因此当您在不同的JRE上运行应用程序时,这将会杀死您的应用程序),而不是com.sun.*程序包。 Sun / Oracle也只像Java SE API一样开发软件,就像像Apache这样的其他公司一样。当涉及到某些Java API(例如GlassFish(Java EE impl),Mojarra(JSF impl),Jersey(JAX-RS impl)等)的履行时,使用com.sun.*类只是不鼓励(但不禁止) 。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: simple HTTP server in Java using only Java SE API

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

25 − = 15