package com.terra.proxy.config; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.terra.proxy.properties.TerraProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.ServletContextInitializer; import org.springframework.stereotype.Component; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component public class ServletConfig implements ServletContextInitializer { private Logger log = LoggerFactory.getLogger(ServletConfig.class); @Autowired private TerraProperties te; @Value("${servletJsonPath}") private String servletJsonPath; @Override public void onStartup(ServletContext servletContext) throws ServletException { System.out.println(te.getProxy()); // 本地 // JSONArray jb = JSONObject.parseArray(readjson(te.getProxy().getServletmapjson())); // 服务器 JSONArray jb = JSONObject.parseArray(readjson(servletJsonPath)); ServletRegistration.Dynamic initservlet; for (int i = 0; i < jb.size(); i++) { JSONObject t = jb.getJSONObject(i); Servlet sv; try { sv = (Servlet) Class.forName(t.getString("servletclass")).newInstance(); initservlet = servletContext.addServlet("servlet" + i, sv); initservlet.addMapping(t.getString("serverurl")); Map map = new HashMap(); map.put("targetUri", t.getString("targetUri")); initservlet.setInitParameters(map); System.out.println(servletContext.getServletRegistrations()); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { log.error("servlet注册异常"); e.printStackTrace(); } } } public static String readjson(String json) { BufferedReader br; try { // 本地 // File file = new ClassPathResource(json).getFile(); // 服务器 File file =new File(ServletConfig.class.getResource("/").getPath()+json); byte[] buffer = new byte[1024]; StringBuilder sb = new StringBuilder(); String s = null; br = new BufferedReader(new FileReader(file)); while ((s = br.readLine()) != null) { sb.append(s); } br.close(); return sb.toString(); } catch (IOException e1) { e1.printStackTrace(); } return null; } }