Java实现简单的HTTP服务器详解编程语言
2023-06-13 09:20:29 时间
private ServerSocketChannel serverSocketChannel = null;
private ExecutorService executorService;
private static final int POOL_MULTIPLE = 4;
public SimpleHttpServer() throws IOException {
executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors() * POOL_MULTIPLE);
serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().setReuseAddress(true);
serverSocketChannel.socket().bind(new InetSocketAddress(port));
public void service() {
while (true) {
SocketChannel socketChannel = null;
try {
socketChannel = serverSocketChannel.accept();
executorService.execute(new Handler(socketChannel));
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) throws IOException {
new SimpleHttpServer().service();
class Handler implements Runnable {
private SocketChannel socketChannel;
public Handler(SocketChannel socketChannel) {
this.socketChannel = socketChannel;
@Override
public void run() {
handle(socketChannel);
private void handle(SocketChannel socketChannel) {
try {
Socket socket = socketChannel.socket();
System.out
.println(socket.getInetAddress() + ":" + socket.getPort());
ByteBuffer buffer = ByteBuffer.allocate(1024);
socketChannel.read(buffer);
buffer.flip();
String request = decode(buffer);
StringBuffer sb = new StringBuffer("HTTP/1.1 200 OK/r/n");
sb.append("Content-Type:text/html/r/n/r/n");
socketChannel.write(encode(sb.toString()));
FileInputStream in = null;
String firstLineOfRequest = request.substring(0,
request.indexOf("/r/n"));
if (firstLineOfRequest.indexOf("login.htm") != -1)
in = new FileInputStream("login.htm");
else
in = new FileInputStream("hello.htm");
FileChannel fileChannel = in.getChannel();
fileChannel.transferTo(0, fileChannel.size(), socketChannel);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socketChannel != null)
socketChannel.close();
} catch (IOException e) {
e.printStackTrace();
private Charset charset = Charset.forName("GBK");
private ByteBuffer encode(String string) {
return ByteBuffer.allocate(string.length() * 2).get(
string.getBytes(charset));
private String decode(ByteBuffer buffer) {
byte[] source = new byte[buffer.position() + 1];
buffer.put(source);
return new String(source, charset);
}
login.htm
html head title helloapp /title /head form name="loginForm" method="post" action="hello.htm" table tr td div align="right" 用户名: /div /td td input type="text" name="username" /td /tr tr td div align="right" 密码: /div /td td input type="password" name="password" /td /tr tr td /td td input type="submit" name="submit" value="submit" /td /tr /table /form /body /html
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10465.html
cjava相关文章
- Java-GUI编程之菜单组件
- java中scanner意思_Java中的Scanner
- java启动器_JAVA基础:Java 启动器如何查找类
- java语言的平台无关性是指什么,《深入Java虚拟机》学习笔记二:平台无关性
- md5 java 实现_MD5加密的Java实现
- java setproperty 未生效_Java System类setProperty()方法及示例[通俗易懂]
- 【说站】java位运算符的应用范围
- Java递归详解_java难不难学
- Java接口是什么意思_JAVA接口
- JAVA实验室设备管理系统代码_java做一个简单学生管理系统
- java字符串转换为json对象6_Json对象与Json字符串的转化、JSON字符串与Java对象的转换…
- Java—java.util.calendar类详解「建议收藏」
- 搞明白 Java 的通配符泛型
- java JNI: C 语言调用 Java 方法示例详解编程语言
- 部署Linux服务器,实现高效安全的HTTP通信(http服务器linux)
- java使用AES加密解密 AES-128-ECB加密详解编程语言
- 服务器实现Java远程访问Linux服务器(java远程linux)
- 服务器管理Linux中的HTTP服务器(linux中http)
- 服务器上的文件Java获取Linux服务器文件:简单又高效的操作方法(java获取linux)
- 处理Java处理Redis过期Key的策略(redisjava过期)
- 数据清理Java 实现 Redis 过期数据清理(redisjava过期)
- 操作Java实现Redis Key过期机制(redisjava过期)
- Java实现Redis队列锁功能(redis队列锁java)
- Java判断字符串中是否包含中文方法