티스토리 뷰
목적 : 해당 클래스가 정상적인 경로의 클래스를 로딩했는지 알아볼때 사용.<%@ page import="java.util.*"%> <%@ page import="java.lang.*"%> <%@ page import="java.lang.reflect.*"%> <%@ page import="java.util.regex.*"%> <%@ page import="java.security.*"%> <%! public String replace(String s, String source, String target) { String ret = s; int idx = ret.indexOf(source); while(idx > -1) { ret = ret.substring(0, idx) + target + ret.substring(idx+source.length()); idx = ret.indexOf(source, idx+target.length()); } return ret; } public String linkClass(String inputStr) { String result = inputStr; String patternStr = "([a-zA-Z0-9]{1,}\\.){1,}[a-zA-Z0-9]{1,}[@|$][a-zA-Z0-9]{1,}]{0,1}"; Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(inputStr); String cname = null; int cnt = 0; while(matcher.find()) { cname = matcher.group(); if(cname.lastIndexOf('@') > 0) { cname = cname.substring(0, cname.lastIndexOf('@')); } String rep = "<a href='?classname="+cname+"'>"+cname+"</a>"; result = replace(result, cname, rep); cnt++; } if(cnt == 0) { patternStr = "([a-zA-Z0-9]{1,}\\.){1,}[a-zA-Z0-9]{1,}"; pattern = Pattern.compile(patternStr); matcher = pattern.matcher(result); while(matcher.find()) { cname = matcher.group(); String rep = "<a href='?classname="+cname+"'>"+cname+"</a>"; result = replace(result, cname, rep); } } return result; } public String linkClassInfo(String inputStr) { String result = FQNtoType(inputStr); result = linkClass(result); return (result==null||result.equals(""))?" ":result; } public String checkLocation(String inputStr) { int idx = inputStr.lastIndexOf(':'); if(idx > -1) { inputStr = inputStr.substring(idx-1); } return inputStr; } public String FQNtoType(String fqn) { String retType = null; String temp = fqn; boolean isArr = false; int arrCnt = 0; while(temp.startsWith("[")) { isArr = true; temp = temp.substring(1); arrCnt++; } if(isArr) { char t = temp.charAt(0); switch(t) { case 'B' : retType = "byte"; break; case 'C' : retType = "char"; break; case 'D' : retType = "double"; break; case 'F' : retType = "float"; break; case 'I' : retType = "int"; break; case 'J' : retType = "long"; break; case 'S' : retType = "short"; break; case 'Z' : retType = "boolean"; break; case 'L' : retType = temp.substring(1, temp.indexOf(';',1)); break; } } if(retType == null) { return fqn; } else { if(isArr) { for(int i=0; i<arrCnt; i++) { retType += "[]"; } } return retType; } } public String getNotFoundMessage(String className) { return "<br><i><b>can't find</b> the class '<font color=red>" + className + "</font>' in the classloader.<br>"; } String pname[] = { "JEUS:", "Log4J:", "OracleJDBCDriver:", "JavaMail:", "LDAP:", "JDom:", "Jaxp:", "WebT:", }; String cname[] = { "/javax/servlet/http/HttpServlet.class", "/org/apache/log4j/BasicConfigurator.class", "/oracle/jdbc/driver/OracleDriver.class", "/com/sun/mail/pop3/Response.class", "/com/novell/ldap/LDAPConnection.class", "/org/jdom/input/DOMBuilder.class", "/javax/xml/parsers/SAXParser.class", "/tmax/webt/WebtSystem.class" }; %> <html> <head> <style type="text/css"> body{font-size:10pt;font-family:Arial, Apple Gothic, Dotum, Gulim} h2{font-size:15pt} h3{font-size:13pt} th{font-size:11pt} td{font-size:10pt} .pt{ font-size:10pt;} </style> <script language="javascript"> function show_hide() { if(property.style.display == "") { property.style.display = "none"; } else { property.style.display = ""; } } </script> </head> <% java.net.URL url = null; String name = null; String value = null; String className = request.getParameter("classname"); if(className == null || className.length() == 0) { %> <body onLoad='javascript:document.theform.classname.focus()'> <h2><center>[JVM Property & Class Information View]</center></h2> <center>ClassInfo v2.2 ⓒ This is based on open source and modified by YoungDal,Kwon & WonJo,Yoo</center> <hr align=center><br> <h3>[Class Information]</h3> <b><font color=red>INPUT : PackageName/ClassName (without extension)</font></b><br> <b><font color=red>EXAMPLE : javax/servlet/http/HttpServlet</font></b> <form name='theform' method='POST' action=''> <b>Enter name of class : </b><input type='text' name='classname' size=50> <input type='submit' value="Search"> </form> <hr align=center> <input type='button' value="System Property" onClick="show_hide()"> <div id="property" style="display:none"> <h3>[Loaded Package&Class List]</h3> <% for (int i = 0; i < cname.length; i++) { url = this.getClass().getResource(cname[i]); if (url == null) { out.println("<b>" + pname[i] + "</b>(" + cname[i] + ") => Not Found"); } else { out.println("<b>" + pname[i] + "</b>(" + cname[i] + ")"); out.println(" => [" + url.getFile() + "]\n"); } out.println("<br>"); } %> <br><hr align=center> <h3>[Security Provider List]</h3> <% Provider[] providers = Security.getProviders(); for (int i = 0; i < providers.length; i++) { out.println("<b>"); out.println(providers[i].getName()); out.println("</b> : "); out.println(providers[i].getInfo()); out.println("<br>"); } %> <br><hr align=center> <h3>[System Property List]</h3> <% Properties prop = System.getProperties(); Enumeration enum1 = prop.propertyNames(); while (enum1.hasMoreElements()) { name = (String) enum1.nextElement(); value = (String) prop.get(name); out.println("<b>" + name + "</b>: " + value); out.println("<br>"); } %> </div> </body> </html> <% return; } %> <body> <h3><a name="classsearch">[Class Method/Field Information]</h3> <% String save_classname = className; if(!className.startsWith("/")) className = "/" + className; className = className.replace('.', '/'); java.net.URL classUrl = getClass().getResource(className + ".class"); if(classUrl == null) { out.println(getNotFoundMessage(className)); } else { className = save_classname; if(className.startsWith("/")) className = className.substring(1); className = className.replace('/', '.'); Class cls; try { cls = Class.forName(className); ClassLoader cl = cls.getClassLoader(); %> <menu> <li>Summary</li><br><br> <table border=1 cellspacing=0 width="90%"> <thead> <tr bgcolor="#CCCCFF"> <th width=150>Category</th> <th>Value</th> </tr> </thead> <tbody> <tr> <td align=center>Name</td> <td align=center><%=className%></td> </tr> <tr> <td align=center>Location</td> <td align=center><%=checkLocation(classUrl.getFile())%></td> </tr> <tr> <td align=center>ClassLoader</td> <td align=center><%=(cl==null)?" ":linkClassInfo(cl.toString())%></td> </tr> <tr> <td align=center>SuperClass</td> <td align=center><%=linkClassInfo((cls.getSuperclass()==null)?" ":cls.getSuperclass().getName())%></td> </tr> <tr> <td align=center>Interface</td> <td align=center><%=cls.isInterface()?"Yes":"No"%></td> </tr> <tr> <td align=center>Primitive</td> <td align=center><%=cls.isPrimitive()?"Yes":"No"%></td> </tr> </tbody> </table> <br><br> <% if(cl != null) { Class[] ifs = cls.getInterfaces(); Constructor[] dcons = cls.getDeclaredConstructors(); Field[] dfls = cls.getDeclaredFields(); Method[] dmtds = cls.getDeclaredMethods(); Class[] dcls = cls.getDeclaredClasses(); %> <li>Detail</li><br><br> <table border=1 cellspacing=0 width="90%"> <thead> <tr bgcolor="#CCCCFF"> <th width=150>Category</th> <th width=250>Type</th> <th>Detail</th> </tr> </thead> <tbody> <tr> <td align=center rowspan=<%=ifs.length%>>Implemented</td> <td align=center rowspan=<%=ifs.length%>>N/A</td> <% for(int i=0; i<ifs.length; i++) { if(i > 0) out.println("</tr><tr>"); out.println("<td align=center>" + linkClassInfo(ifs[i].getName()) + "</td>"); } if(ifs.length == 0) out.println("<td align=center> </td>"); %> </tr> <tr> <td align=center rowspan=<%=dcons.length%>>Constructor</td> <td align=center rowspan=<%=dcons.length%>>N/A</td> <% for(int i=0; i<dcons.length; i++) { String conStr = dcons[i].getName(); if(i > 0) out.println("</tr><tr>"); out.println("<td align=center>" + conStr.substring(conStr.lastIndexOf('.')+1) + "("); Class[] params = dcons[i].getParameterTypes(); for(int j=0; j<params.length; j++) { if(j!=0) out.println(", "); out.println(linkClassInfo(params[j].getName())); } out.println(")</td>"); } if(dcons.length == 0) out.println("<td align=center> </td>"); %> </tr> <tr> <td align=center rowspan=<%=dfls.length%>>Field</td> <% for(int i=0; i<dfls.length; i++) { Class type = dfls[i].getType(); if(i > 0) out.println("</tr><tr>"); out.println("<td align=center>" + linkClassInfo(type.getName()) + "</td>"); out.println("<td align=center>" + dfls[i].getName() + "</td>"); } if(dfls.length == 0) { out.println("<td align=center> </td>"); out.println("<td align=center> </td>"); } %> </tr> <tr> <td align=center rowspan=<%=dmtds.length%>>Method</td> <% for(int i=0; i<dmtds.length; i++) { Class type = dmtds[i].getReturnType(); if(i > 0) out.println("</tr><tr>"); out.println("<td align=center>" + linkClassInfo(type.getName()) + "</td>"); out.println("<td align=center>" + dmtds[i].getName() + "("); Class[] params = dmtds[i].getParameterTypes(); for(int j=0; j<params.length; j++) { if(j!=0) out.println(", "); out.println(linkClassInfo(params[j].getName())); } out.println(")</tr>"); } if(dmtds.length == 0) { out.println("<td align=center> </td>"); out.println("<td align=center> </td>"); } %> </tr> <tr> <td align=center rowspan=<%=dcls.length%>>InnerClass</td> <td align=center rowspan=<%=dcls.length%>>N/A</td> <% for(int i=0; i<dcls.length; i++) { if(i > 0) out.println("</tr><tr>"); out.println("<td align=center>" + linkClassInfo(dcls[i].getName()) + "</td>"); } if(dcls.length == 0) out.println("<td align=center> </td>"); %> </tr> </tbody> </table> </menu> <% } } catch(NoClassDefFoundError e1) { out.println(getNotFoundMessage(className)); e1.printStackTrace(); } catch(ClassNotFoundException e2) { out.println(getNotFoundMessage(className)); e2.printStackTrace(); } } %> <br> <center> <table border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td align="center"><input type="button" value="back" onClick="javascript:history.back();"></td> </tr> </table> </center> </body> </html>
'Sample Source' 카테고리의 다른 글
SAP 연동 Sample Source(.java) (1) | 2010.03.06 |
---|---|
파일 encoding 설정 값 확인하는 소스(.java, .jsp) (0) | 2010.03.06 |
Oracle 세션 허용개수 확인하는 소스(.java) (0) | 2010.03.05 |
[Sample Source]Oracle JDBC Driver Version확인소스(.java) (0) | 2010.03.05 |
[SampleSource] DBConnTest.java (0) | 2009.11.26 |
[SampleSource] session.jsp (0) | 2009.11.26 |
[SampleSource] findClass.jsp (0) | 2009.11.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 젠킨스
- Password manager
- Thread Dump
- 엔시블
- 플레이북
- 쓰레드덤프
- DevOps
- nginx
- Config History
- Shell Script
- URL Encoding
- 데브옵스
- JVM
- Linux
- groovy
- Playbook
- ssl
- vagrant
- Nexus
- 리눅스
- Jenkins
- Docker
- rsync
- openssl
- rundeck
- PostgreSQL
- 엔서블
- iTerm2
- 파이프라인
- Ansible
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함