按照例子自己写的最简单的struts程序居然一运行就报异常:
root cause
java.lang.NullPointerException: Module 'null' not found. org.apache.struts.taglib.TagUtils.getModuleConfig(TagUtils.java:755) org.apache.struts.taglib.TagUtils.getModuleConfig(TagUtils.java:735) org.apache.struts.taglib.TagUtils.retrieveMessageResources(TagUtils.java:1098) org.apache.struts.taglib.TagUtils.message(TagUtils.java:956) org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:224) org.apache.jsp.index_jsp._jspx_meth_bean_005fmessage_005f0(index_jsp.java:136) org.apache.jsp.index_jsp._jspService(index_jsp.java:88) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
开始以为是配置文件没写正确,导致解析出错。后来直接用实例的配置文件覆盖后还是报错。再看看异常,发现有Bean:message标签出错,去检查resources文件,也没有错误。后来连续把jsp文件都替换掉还是有错。不得以,去Google。
大部分都是说 web.xml缺少<load-on-startup>2</load-on-startup>元素。
但是这几个地方都仔细确认过,没有问题。 后来仔细对比,发现除了我用的struts版本和例子的不一样外,都正确。猜想可能是1.3版本的哪个jar没有导入。先把所有的没有导入的jar都放进来,过来可以运行了~!
一一删除,发现是commons-chain-1.2.jar导致的问题。
继续Google以及查看源代码,才发现struts1.3里面的ActionServlet的初始化的时候,会使用到这个jar包里面的ConfigParser来解析chain配置(用chain-config.xml替换了原来传统的在 RequestProcessor 类中执行的 HTTP 请求处理)。