Exemple #1
0
  /* (non-Javadoc)
   * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setHeader("Content-Type", "application/x-javascript");
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setCharacterEncoding("utf-8");
    String url = request.getRequestURI();
    // System.out.println(this.diffAlg);

    String[] pathArray = url.split("storeinc");
    url = pathArray[1];
    String fullName = url;
    // 如果内存已经有处理过的内容,则直接返回
    if (fileContentMap.containsKey(fullName)) {
      response.getWriter().print(fileContentMap.get(fullName));
      response.getWriter().close();
      return;
    }
    // System.out.println("sssssss:"+url);
    ArrayList<String> fileList = getFileArray(url);
    String baseDir = getBaseDir(url);
    JSONArray iArray = new JSONArray();
    for (int i = 0; i < fileList.size(); i++) {
      // System.out.println("ssssssssssee:"+url);
      // url=fileList.get(i);
      String js = fileList.get(i);
      url = baseDir + js;
      // System.out.println("ssssssssssee:"+url);
      String[] urlArray = url.split("/");
      int len = urlArray.length;
      String pathName = "";
      String lastver = "";
      String ver = "";
      String jsFileName = "";
      String verStr = "";
      boolean isFull = false;
      if (len >= 2) {
        // 获取最终文件名 name-ver1_ver2.js的形式
        String filename = urlArray[len - 1];
        pathName = url.replace(filename, "");
        String[] sArray = filename.split("-");
        try {
          jsFileName = sArray[0];
          verStr = sArray[1];
        } catch (Exception ex) {
          System.out.print("exception ex:" + ex.toString());
        }
        // 包含_说明请求的是增量文件
        if (verStr.contains("_")) {
          String[] verArray = verStr.split("_");
          lastver = verArray[0];
          ver = verArray[1].replace(".js", "");
        } else {
          ver = verStr.replace(".js", "");
          isFull = true;
        }
      }
      // 分别获取新版和老版文件路径名

      String fullFile = jsPath + "/" + pathName + "/" + jsFileName + "-" + ver + ".js";
      String oldPath = pathName.replace(ver, lastver);
      String oldFile = jsPath + "/" + oldPath + "/" + jsFileName + "-" + lastver + ".js";
      // System.out.println(oldFile);
      // System.out.println(fullFile);
      // 如果是全量
      DiffUtil dUtil = new DiffUtil();
      if (isFull) {
        String fullContent = dUtil.readFile(fullFile, "utf-8");
        JSONObject resultFile = new JSONObject();
        resultFile.put("modify", true);
        // resultFile.modify=true;
        resultFile.put("chunkSize", 12);
        resultFile.put("diffAlg", this.diffAlg);
        resultFile.put("inc", false);
        resultFile.put("data", fullContent);
        resultFile.put("js", js);
        //  resultFile.js=fileitem.file;
        iArray.add(resultFile);
        // response.getWriter().print(fullContent);
      } else {

        if (!"lcs".equals(this.diffAlg)) {

          JSONObject resultFile = dUtil.makeIncDataFromFile(oldFile, fullFile, this.chunkSize);
          resultFile.put("js", js);
          resultFile.put("inc", true);
          // fileContentMap.put(fullName, resultFile.toJSONString());
          iArray.add(resultFile);
          // response.getWriter().print(resultFile.toJSONString());
        } else {
          LcsDiff lcfDiff = new LcsDiff();
          JSONObject resultFile = lcfDiff.makeIncDataFromFile(oldFile, fullFile);
          resultFile.put("js", js);
          resultFile.put("inc", true);
          // fileContentMap.put(fullName, resultFile.toJSONString());
          iArray.add(resultFile);
          // System.out.println();
          // response.getWriter().print(resultFile.toJSONString());
        }
      }
    }
    fileContentMap.put(fullName, iArray.toJSONString());
    if (iArray.size() > 0) {
      response.getWriter().print(iArray.toJSONString());
    } else {
      response.setStatus(404);
      response.getWriter().print("");
    }

    // response.getWriter().print("s:"+url+" "+pathName+" "+lastver+" "+ver+" "+jsFileName);
    response.getWriter().close();

    // TODO Auto-generated method stub
  }