package com.online.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; import com.alibaba.fastjson.JSON; import com.online.common.Message; import com.online.common.WebJavaComilper; import com.online.common.WebJavaRunner; import com.online.constant.App; @WebServlet("/api") public class ApiServlet extends HttpServlet { private static final long serialVersionUID = 1L; private WebJavaComilper comilper = new WebJavaComilper(); private WebJavaRunner runner = new WebJavaRunner(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); Message message = new Message(); PrintWriter out = response.getWriter(); long flag = System.currentTimeMillis(); Map<String, String[]> map = request.getParameterMap(); int timeout = Integer.valueOf(map.get("timeout")[0]) * 1000; String base = request.getServletContext().getRealPath("/native"); File baseFile = new File(base); baseFile.mkdir(); Pattern pattern = Pattern.compile(App.CLASS_REGEXP); Matcher matcher = pattern.matcher(map.get("code")[0]); String className = matcher.find() ? matcher.group(2) : "Main"; File javaFile = new File(base, className + ".java"); File inFile = new File(base, "in.txt"); javaFile.createNewFile(); inFile.createNewFile(); FileUtils.write(javaFile, map.get("code")[0], "utf-8"); comilper.setJavaName(className); comilper.setJavaPath(base); List<String> err = comilper.comilper(); if(!err.isEmpty()) { for (int i = 0; i < err.size(); i++) { err.set(i, "<p> < "+err.get(i)+"<p>"); } message.setCode(Message.FAILURE); message.setData(err); message.setMsg("FAILURE"); long cureent = System.currentTimeMillis(); String time = String.format("%.2f", (cureent-flag)*1.0/1000); if(time.endsWith("0")) { time = time.substring(0,time.length()-1); } message.setTime(time); out.println(JSON.toJSONString(message)); }else { if(!map.get("param")[0] .trim().isEmpty()) { FileUtils.write(inFile, map.get("param")[0], "utf-8"); runner.setIn(inFile.getAbsolutePath()); runner.setInput(true); } runner.setClassPath(base); runner.setName(className); runner.setTimeout(timeout); List<String> result = runner.executor(); File[] files = baseFile.listFiles(); for (File file : files) { file.delete(); } baseFile.delete(); List<String> data = new ArrayList<String>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < result.size(); i++) { String e = result.get(i); Pattern pattern1 = Pattern.compile(App.EXCEPTION_REGEXP); Matcher matcher1 = pattern1.matcher(e); if(matcher1.find()) { sb.append(matcher1.group(1)); } Pattern pattern2 = Pattern.compile(App.EXCEPTION_LINE_REGEXP.replace("@", className)); Matcher matcher2 = pattern2.matcher(e); if(matcher2.find()) { sb.append(" :"+matcher2.group(1)); } } boolean main = true; if(result != null && result.size() == 1 && result.get(0).equals(App.NOTMAIN)) { main = false; message.setCode(Message.FAILURE); message.setMsg("FAILURE"); data.add("<p> > no found main method<p>"); } if(main) { if(sb.length() == 0) { for (int i = 0; i < result.size(); i++) { data.add("<p> > " + result.get(i) + "<p>"); } }else { message.setCode(Message.FAILURE); message.setMsg("FAILURE"); data.add("<p> > " + sb.toString() + "</p>"); } } message.setData(data); long cureent = System.currentTimeMillis(); String time = String.format("%.2f", (cureent-flag)*1.0/1000); if(time.endsWith("0")) { time = time.substring(0,time.length()-1); } message.setTime(time); out.print(JSON.toJSONString(message)); } } }
最近下载更多
superman1420152584 LV1
2022年6月2日
crosa_Don LV18
2022年4月1日
945506100 LV2
2021年9月9日
JevahChao LV1
2021年6月22日
H.13-1.15 LV1
2021年5月18日
814035682 LV1
2021年1月29日
1736105pxr LV1
2021年1月25日
qiushicun LV1
2020年12月9日
luocheng LV18
2020年11月8日
a1140038335 LV1
2020年10月6日
最近浏览更多
3334004690 LV10
6月24日
求学的熊猫 LV11
5月12日
denglu123321 LV4
2023年12月27日
2890892945 LV2
2023年12月26日
qq1357574774 LV2
2023年7月20日
dmyafda LV5
2023年3月26日
柴0000
2023年3月19日
暂无贡献等级
ApolloLee
2023年2月23日
暂无贡献等级
大无语 LV1
2023年1月4日
王俊杰1
2022年9月22日
暂无贡献等级