diff --git a/mars-server/src/main/java/com/mars/iserver/execute/RequestExecute.java b/mars-server/src/main/java/com/mars/iserver/execute/RequestExecute.java index 30c58ca..2df8bb8 100644 --- a/mars-server/src/main/java/com/mars/iserver/execute/RequestExecute.java +++ b/mars-server/src/main/java/com/mars/iserver/execute/RequestExecute.java @@ -3,6 +3,7 @@ package com.mars.iserver.execute; import com.mars.common.ncfg.mvc.CoreServletClass; import com.mars.common.util.MesUtil; import com.mars.common.util.StringUtil; +import com.mars.iserver.par.HttpMarsRequestFactory; import com.mars.server.server.request.HttpMarsRequest; import com.mars.server.server.request.HttpMarsResponse; import com.mars.server.util.RequestUtil; @@ -52,7 +53,7 @@ public class RequestExecute { /* 获取请求的数据,并填充表单 */ request = HttpMarsRequestFactory.getHttpMarsRequest(httpExchange, request); - /* 通过反射执行核心servlet */ + /* 通过反射执行核心控制器 */ Class cls = CoreServletClass.getCls(); Object object = cls.getDeclaredConstructor().newInstance(); Method helloMethod = cls.getDeclaredMethod("doRequest", new Class[]{HttpMarsRequest.class, HttpMarsResponse.class}); diff --git a/mars-server/src/main/java/com/mars/iserver/execute/HttpMarsRequestFactory.java b/mars-server/src/main/java/com/mars/iserver/par/HttpMarsRequestFactory.java similarity index 93% rename from mars-server/src/main/java/com/mars/iserver/execute/HttpMarsRequestFactory.java rename to mars-server/src/main/java/com/mars/iserver/par/HttpMarsRequestFactory.java index 3b7a538..e720ed0 100644 --- a/mars-server/src/main/java/com/mars/iserver/execute/HttpMarsRequestFactory.java +++ b/mars-server/src/main/java/com/mars/iserver/par/HttpMarsRequestFactory.java @@ -1,7 +1,8 @@ -package com.mars.iserver.execute; +package com.mars.iserver.par; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.mars.iserver.par.formdata.ParsingFormData; import com.mars.server.server.request.HttpMarsRequest; import com.mars.server.server.request.model.MarsFileUpLoad; import com.sun.net.httpserver.HttpExchange; @@ -20,6 +21,8 @@ import java.util.Map; */ public class HttpMarsRequestFactory { + + /** * 从httpExchange中提取出所有的参数,并放置到HttpMarsRequest中 * @param httpExchange 请求 @@ -31,7 +34,7 @@ public class HttpMarsRequestFactory { Map files = new HashMap<>(); Map> marsParams = new HashMap<>(); - if (httpExchange.getRequestMethod().equals("GET")) { + if (httpExchange.getRequestMethod().toUpperCase().equals("GET")) { /* 从get请求中获取参数 */ String paramStr = httpExchange.getRequestURI().getQuery(); marsParams = urlencoded(paramStr, marsParams, false); @@ -50,9 +53,9 @@ public class HttpMarsRequestFactory { marsParams = urlencoded(paramStr, marsParams, true); } else if (contentType.startsWith("multipart/form-data")) { /* formData提交,可以用于文件上传 */ - Map result = formData(inputStream, marsParams, files); - files = (Map) result.get("files"); - marsParams = (Map>) result.get("marsParams"); + Map result = formData(inputStream, marsParams, files, contentType); + files = (Map) result.get(ParsingFormData.FILES_KEY); + marsParams = (Map>) result.get(ParsingFormData.PARAMS_KEY); } else if (contentType.startsWith("application/json")) { /* RAW提交(json) */ marsParams = raw(inputStream, marsParams); @@ -75,7 +78,7 @@ public class HttpMarsRequestFactory { if(ctList == null || ctList.size() < 1){ return null; } - return ctList.get(0).toLowerCase(); + return ctList.get(0).trim().toLowerCase(); } /** @@ -173,10 +176,11 @@ public class HttpMarsRequestFactory { * @param inputStream 输入流 * @param marsParams httpMarsRequest的参数对象 * @param files httpMarsRequest的文件参数对象 + * @param contentType 内容类型 * @return httpMarsRequest的参数对象 和 httpMarsRequest的文件参数对象 * @throws Exception 异常 */ - private static Map formData(InputStream inputStream, Map> marsParams, Map files) throws Exception { - return null; + private static Map formData(InputStream inputStream, Map> marsParams, Map files, String contentType) throws Exception { + return ParsingFormData.parsing(inputStream,marsParams,files,contentType); } } diff --git a/mars-server/src/main/java/com/mars/iserver/par/formdata/ParsingFormData.java b/mars-server/src/main/java/com/mars/iserver/par/formdata/ParsingFormData.java new file mode 100644 index 0000000..6196243 --- /dev/null +++ b/mars-server/src/main/java/com/mars/iserver/par/formdata/ParsingFormData.java @@ -0,0 +1,57 @@ +package com.mars.iserver.par.formdata; + +import com.mars.server.server.request.model.MarsFileUpLoad; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 解析FormData + */ +public class ParsingFormData { + + public static final String PARAMS_KEY = "paramsKey"; + public static final String FILES_KEY = "filesKey"; + + /** + * 解析 + * @param inputStream 输入流 + * @param marsParams 参数 + * @param files 文件 + * @param contentType 内容类型 + * @return 参数和文件 + */ + public static Map parsing(InputStream inputStream, Map> marsParams, Map files, String contentType) throws Exception { + Map result = new HashMap<>(); + + byte[] boundary = boundary(contentType).getBytes("UTF-8"); + byte[] endBoundary = endBoundary(contentType).getBytes("UTF-8"); + + + + result.put(PARAMS_KEY,""); + result.put(FILES_KEY,""); + return result; + } + + /** + * 分隔符 + * @param contentType 内容类型 + * @return 分隔符 + */ + private static String boundary(String contentType){ + String bo = contentType.substring(contentType.indexOf(";")); + return "--"+(bo.substring(bo.indexOf("=")+1).trim()); + } + + /** + * 结束时的分隔符 + * @param contentType 内容类型 + * @return 结束时的分隔符 + */ + private static String endBoundary(String contentType){ + return boundary(contentType)+"--"; + } +}