出现异常,百度之后发现可能是空指针异常,但实在没法自行解决,求老师告诉我应该如何解决这个问题,我比较笨请老师多担待些,以下是异常截图


以下是源码:
package com.bjsxt.server;
import java.util.List;
import java.util.Map;
public class WebApp {
private static ServletContext context;
static {//通过static静态代码块进行初始化
context=new ServletContext();
//分别获取对应关系的Map集合
Map<String, String> servlet=context.getServlet();
Map<String, String> mapping=context.getMapping();
//创建解析XML文件的对象
WebDom4j web=new WebDom4j();
web.parse(web.getDocument());//解析xml
//获取解析xml之后List集合
List<Entity> entityList=web.getEntityList();
List<Mapping> mappinglList=web.getMappingList();//获取映射关系的集合
//将List集合中的数据存储到Map集合
for (Entity entity : entityList) {
servlet.put(entity.getName(), entity.getClazz());
}
System.out.println(servlet);
}
public static void main(String[] args) {
}
}
package com.bjsxt.server;
/**
* <servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.bjsxt.servlet.LoginServlet</servlet-class>
</servlet>
* @author admin
*
*/
public class Entity {/*servlet-name和一个servlet-name所对应的一个实体类*/
private String name;//servlet-name
private String clazz;//servlet-class
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public Entity(String name, String clazz) {
super();
this.name = name;
this.clazz = clazz;
}
public Entity() {
super();
}
}
package com.bjsxt.server;
/**
* <servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/log</url-pattern>
</servlet-mapping>
* @author admin
*
*/
import java.util.ArrayList;
import java.util.List;
public class Mapping {//多个路径访问共享资源
private String name;//servlet-name
private List<String> urlPattern;//url-pattern
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getUrlPattern() {
return urlPattern;
}
public void setUrlPattern(List<String> urlPattern) {
this.urlPattern = urlPattern;
}
public Mapping() {//无参构造方法
urlPattern=new ArrayList<String>();//对urlPattern初始化
}
public Mapping(String name, List<String> urlPattern) {
super();
this.name = name;
this.urlPattern = urlPattern;
}
}
package com.bjsxt.server;
/**
* Servet上下文,就是一个容器用于存储Entity和Mapping
* @author admin
*
*/
import java.util.HashMap;
import java.util.Map;
public class ServletContext {/*Entity与Mapping的映射关系*/
private Map<String, String> servlet;//key是servlet-name(Entity中的name),值是servlet-class(Entity中的clazz)
private Map<String, String> mapping;//key是url-pattern(Mapping中的List集合中的每一个元素),value是servlet-name(Mapping中的name)
public Map<String, String> getServlet() {
return servlet;
}
public void setServlet(Map<String, String> servlet) {
this.servlet = servlet;
}
public Map<String, String> getMapping() {
return mapping;
}
public void setMapping(Map<String, String> mapping) {
this.mapping = mapping;
}
public void ServeltContext() {//编写构造方法对两个集合进行初始化
// TODO Auto-generated method stub
servlet=new HashMap<String, String>();
mapping=new HashMap<String, String>();
}
}
package com.bjsxt.server;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class WebDom4j {/*用于解析XML*/
private List<Entity> entityList;//用于存储N多个Entity,而每一个Entity都是servlet-name与servlet-class
private List<Mapping> mappingList;//用于存储N多个Mapping,而每一个Mapping都是一个servlet-name和N多个url-pattern
public List<Entity> getEntityList() {
return entityList;
}
public void setEntityList(List<Entity> entityList) {
this.entityList = entityList;
}
public List<Mapping> getMappingList() {
return mappingList;
}
public void setMappingList(List<Mapping> mappingList) {
this.mappingList = mappingList;
}
//构造方法
public WebDom4j() {//构造方法使之初始化
entityList=new ArrayList<Entity>();
mappingList=new ArrayList<Mapping>();
}
//获取Document对象的方法
public Document getDocument() {
try {
//(1).创建SAXReader对象
SAXReader reader=new SAXReader();
//(2).调用read方法
return reader.read(new File("httpServerPro/WEB_INFO/web.xml"));//得到一个Document对象
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void parse(Document doc) {//给一个Document对象用以解析
//(1).获取根源素
Element root=doc.getRootElement();//web-app
//(2).获取servlet子元素
for(Iterator<Element>ite=root.elementIterator("servlet");ite.hasNext();) {
Element subElement=ite.next();//得到每一个servlet
//创建一个实体类
Entity ent=new Entity();//用于存储servlet-name和servlet-class
for(Iterator<Element> subIte=subElement.elementIterator();subIte.hasNext();) {
Element ele=subIte.next();//得到的可能是servlet-name也可能是servlet-class
if("servlet-name".equals(ele.getName())) {
ent.setName(ele.getText());//给实体类中的name赋值
}else if("servlet-class".equals(ele.getName())) {
ent.setClazz(ele.getText());//给实体类中的clazz赋值
}
}
//将Entity添加到集合中
entityList.add(ent);
}
//测试
/*for (Entity entity : entityList) {
System.out.println(entity.getName()+"\t"+entity.getClazz());
}*/
//解析servlet-Mapping
for(Iterator<Element> ite=root.elementIterator("servlet-mapping");ite.hasNext();) {
Element subEle=ite.next();//得到每一个servlet-mapping
//创建一个Mapping类的对象
Mapping map=new Mapping();
//解析servlet-mapping下的子元素
for(Iterator<Element> subIte=subEle.elementIterator();subIte.hasNext();) {
Element ele=subIte.next();//取出来的有可能是servlet-name也有可能是url-pattrern
if("servlet-name".equals(ele.getName())) {
map.setName(ele.getText());
}else if("url-pattern".equals(ele.getName())) {
//获取集合对象,调用集合对象的添加方法,添加元素
map.getUrlPattern().add(ele.getText());//先获取集合,然后调用添加方法把对应的路径添加进去
}
}
//Mapping添加到集合中
mappingList.add(map);
}
//测试
for (Mapping m : mappingList) {
System.out.println(m.getName());
for(String s:m.getUrlPattern()) {//getUrlPttern将得到一个List集合
System.out.println(s);
}
}
}
//用于测试
public static void main(String[] args) {
WebDom4j web=new WebDom4j();
web.parse(web.getDocument());//调用解析方法,需要Document对象
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.bjsxt.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/log</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.bjsxt.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/reg</url-pattern>
<url-pattern>/register</url-pattern>
<url-pattern>/regis</url-pattern>
</servlet-mapping>
</web-app>