获取所有 Context

  1. package GetContext;
  2. import weblogic.servlet.internal.WebAppServletContext;
  3. import weblogic.t3.srvr.ServerRuntime;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. import java.lang.reflect.Field;
  10. import java.util.List;
  11. public class GetAllcontext extends HttpServlet {
  12. @Override
  13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. try{
  15. java.lang.reflect.Method m = Class.forName("weblogic.t3.srvr.ServerRuntime").getDeclaredMethod("theOne");
  16. m.setAccessible(true);
  17. ServerRuntime serverRuntime = (ServerRuntime) m.invoke(null);
  18. List<WebAppServletContext> list = new java.util.ArrayList();
  19. StringBuilder sb = new StringBuilder();
  20. for (weblogic.management.runtime.ApplicationRuntimeMBean applicationRuntime : serverRuntime.getApplicationRuntimes()) {
  21. java.lang.reflect.Field childrenF = applicationRuntime.getClass().getSuperclass().getDeclaredField("children");
  22. childrenF.setAccessible(true);
  23. java.util.HashSet set = (java.util.HashSet) childrenF.get(applicationRuntime);
  24. java.util.Iterator iterator = set.iterator();
  25. while (iterator.hasNext()) {
  26. Object key = iterator.next();
  27. if (key.getClass().getName().equals("weblogic.servlet.internal.WebAppRuntimeMBeanImpl")) {
  28. Field contextF = key.getClass().getDeclaredField("context");
  29. contextF.setAccessible(true);
  30. WebAppServletContext context = (WebAppServletContext) contextF.get(key);
  31. resp.getWriter().println("---------------------------------");
  32. resp.getWriter().println(context.getRootTempDir().getAbsolutePath());
  33. resp.getWriter().println(context.getAppName());
  34. resp.getWriter().println("---------------------------------");
  35. list.add(context);
  36. }
  37. }
  38. }
  39. }catch (Exception e){
  40. }
  41. }
  42. }

weblogic 获取 Context - 图1

从当前线程获取Context

  1. package GetContext;
  2. import weblogic.servlet.internal.ServletRequestImpl;
  3. import weblogic.servlet.internal.WebAppServletContext;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. import java.lang.reflect.Field;
  10. public class GetThreadContext extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. Thread thread = Thread.currentThread();
  14. try {
  15. //获取WebAppServletContext
  16. Field workEntry = Class.forName("weblogic.work.ExecuteThread").getDeclaredField("workEntry");
  17. workEntry.setAccessible(true);
  18. Object workentry = workEntry.get(thread);
  19. WebAppServletContext webAppServletContext=null;
  20. try{ //weblogic 12.1.3
  21. Field connectionHandler = workentry.getClass().getDeclaredField("connectionHandler");
  22. connectionHandler.setAccessible(true);
  23. Object http = connectionHandler.get(workentry);
  24. Field request1 = http.getClass().getDeclaredField("request");
  25. request1.setAccessible(true);
  26. ServletRequestImpl servletRequest = (ServletRequestImpl) request1.get(http);
  27. Field context = servletRequest.getClass().getDeclaredField("context");
  28. context.setAccessible(true);
  29. webAppServletContext = (WebAppServletContext) context.get(servletRequest);
  30. }catch (Exception e){
  31. //weblogic 1036
  32. Field context = workentry.getClass().getDeclaredField("context");
  33. context.setAccessible(true);
  34. webAppServletContext = (WebAppServletContext) context.get(workentry);
  35. }
  36. resp.getWriter().println(webAppServletContext.getRootTempDir().getAbsolutePath());
  37. resp.getWriter().println(webAppServletContext.getAppName());
  38. }catch(Exception e){}
  39. }
  40. }

weblogic 获取 Context - 图2

从request处获取Context

  1. weblogic.servlet.internal.WebAppServletContext servletContext = (WebAppServletContext) req.getServletContext();
  2. resp.getWriter().write(servletContext.getAppName());
  3. resp.getWriter().write(servletContext.getTempPath());

获取应用web目录物理路径

  1. resp.getWriter().println(context.getRootTempDir().getAbsolutePath());
  2. resp.getWriter().println(context.getAppName());