return 0;
}
@Override
public String getHeader(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<String> getHeaders(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<String> getHeaderNames() {
// TODO Auto-generated method stub
return null;
}
};
}
}
获取项目信息的工具类
package springboot.util;解析web.xml的工具类
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.Servlet;
/**
*
* 加载项目信息
*
* */
public class ProjectUtil {
public static Map<String,WebXml> load() throws Exception{
final Map<String,WebXml> projetInfo = new HashMap<String,WebXml>();
//j2ee定义的是tomcat下的webapp目录 , 本地我取自己打包的war包目录
String webapps = "E:\learning\SpringMVC\SpringMVC\webapps";
//读取tomcat发布的所有的项目
File[] projects = new File(webapps).listFiles(projectName -> projectName.isDirectory());
for(File project : projects) {
//根据每个项目的web.xml读取servlet信息
WebXml webXml = new XMLConfigUtil().load(project.getPath()+"\WEB-INF\web.xml");
webXml.projectPath = project.getPath();
//类加载 , 加载class文件-----war包或者jar包中解压的class文件
webXml.loadServlet();
projetInfo.put(project.getName(), webXml);
}
return projetInfo;
}
public class WebXml{
public String projectPath = null;
//查找项目中所有的servlet
public Map<String,Object> servlets = new HashMap<String,Object>();
public Map<String,Object> servletMapping = new HashMap<String,Object>();
//实例对象
public Map<String,Object> servletInstances = new HashMap<String,Object>();
public void loadServlet() throws Exception {
//jvm加载class文件
URL url = new URL("file:"+projectPath+"\WEB-INF\classes\");
URLClassLoader classLoader = new URLClassLoader(new URL[] {url});
//加载servlet,创建servlet对象
for(Entry<String,Object> entry : servlets.entrySet()) {
//servlet的名称
String servletName = entry.getKey();
//servlet类的完整路径
String servletClassName = entry.getValue().toString();
//加载
Class<?> clazz = classLoader.loadClass(servletClassName);
//反射创建对象,这就是为什么j2ee规范 servlet要继承HttpServlet ,
Servlet servlet = (Servlet) clazz.newInstance();
this.servletInstances.put(servletName, servlet);
}
}
}
}
package springboot.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import springboot.util.ProjectUtil.WebXml;
public class XMLConfigUtil extends DefaultHandler {
// 查找项目中所有的servlet
public Map<String, Object> servlets = new HashMap<String, Object>();
public Map<String, Object> servletMapping = new HashMap<String, Object>();
// 实例对象
public Map<String, Object> servletInstances = new HashMap<String, Object>();
private String tag;// 存储操作的标签
private boolean isMapping = false;
private String currentServlet;
private String currentServletMapping;
public WebXml load(String path) throws SAXException, IOException, ParserConfigurationException {
// SAX解析
// 1、获取SAX解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2、从解析工厂中获取解析器
SAXParser parse = factory.newSAXParser();
XMLConfigUtil handler = new XMLConfigUtil();
// 5、解析
parse.parse(path, this);
// 6、获取数据
ProjectUtil.WebXml webXMl = new ProjectUtil().new WebXml();
webXMl.servlets = this.servlets;
webXMl.servletMapping = this.servletMapping;
return webXMl;
}
@Override
public void startDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (null != qName) {
tag = qName;// 存储标签名
推荐阅读
- 简单了解Java消息队列
- 你知道 Java 类是如何被加载的吗?
- Tomcat7 1000并发量配置以及配置优化,原来可以这么轻松就学会了
- 应用 Java虚拟机工具
- java 9 10 11 12 13新特性,这里为你总结全了
- 运行 JavaScript 代码片段的 20 种工具
- Tomcat 之 server.xml 优化配置
- Java|剖析类内的五类成员:属性、方法、构造器、代码块、内部类
- Alibaba Java诊断工具Arthas查看Dubbo动态代理类
- Java JVM启动参数大全
