赞
踩
常见的场景就是:
1 调用class的forName方法时,找不到指定的类
2 ClassLoader 中的 findSystemClass() 方法时,找不到指定的类
3 ClassLoader 中的 loadClass() 方法时,找不到指定的类
package serve; import servlet.Servlet; import java.util.List; import java.util.Map; /** * @Author:@Author */ public class WebApp { //就是一个app private static ServletContext context; static{ context=new ServletContext(); //分别获取对应关系的Map集合 Map<String,String> servlet=context.getServlet(); Map<String,String> mapping=context.getMapping(); //创建解析XML文件的对象 Dom4j dom=new Dom4j(); dom.parse(dom.getDocument()); //解析XML文件 //创建解析XML文件之后的List集合 List<Entity> entityList=dom.getEntityList(); List<Mapping> mappingList=dom.getMappingList(); //将List集合中的数据存储到Map集合当中 for(Entity entity:entityList){ servlet.put(entity.getName(),entity.getClazz()); } // System.out.println(servlet); for (Mapping map:mappingList){ //遍历urlPattern的集合 List<String> urlPattern=map.getUrlPatter(); for (String s:urlPattern){ mapping.put(s,map.getName()); } } //System.out.println(mapping); } /** * 根据url会创建不同的servlet对象 * @param */ public static Servlet getServlet(String url){ if(url==null||url.trim().equals("")){ return null; } try { //url正确 //根据url的key获取servlet-name的值/log=login String servletName=context.getMapping().get(url); //根据servletName得到对应的servlet-class String servletClass=context.getServlet().get(servletName); //使用反射创建Servlet对象 Class clazz=Class.forName(servletClass); //调用无参构造方法创建Servlet对象 Servlet servlet=(Servlet)clazz.newInstance(); return servlet; } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } public static void main(String[] args) { System.out.println(getServlet("/log")); } }
用debug调试过后发现web.xml出现问题
希望自己下次不要再犯这样的错误了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。