package com.example.mina.server.httpdemo; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.http.api.*; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; /** * @author 杜云山 * @date 21/03/23 */ public class HttpServerHandle extends IoHandlerAdapter { @Override public void exceptionCaught(IoSession session, Throwable cause) { cause.printStackTrace(); } @Override public void messageReceived(IoSession session, Object message) throws Exception { if (message instanceof HttpRequest) { // 请求,解码器将请求转换成HttpRequest对象 HttpRequest request = (HttpRequest) message; // 获取请求参数 String name = request.getParameter("name"); if (name == null) { name = "World"; } name = URLDecoder.decode(name, "UTF-8"); // 响应HTML String responseHtml = "Hello, " + name + ""; byte[] responseBytes = responseHtml.getBytes(StandardCharsets.UTF_8); int contentLength = responseBytes.length; // 构造HttpResponse对象,HttpResponse只包含响应的status line和header部分 Map headers = new HashMap<>(8); headers.put("Content-Type", "text/html; charset=utf-8"); headers.put("Content-Length", Integer.toString(contentLength)); HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SUCCESS_OK, headers); // 响应BODY IoBuffer responseIoBuffer = IoBuffer.allocate(contentLength); responseIoBuffer.put(responseBytes); responseIoBuffer.flip(); // 响应的status line和header部分 session.write(response); // 响应body部分 session.write(responseIoBuffer); } } }