org.apache.xalan.processor.transformerfactoryImpl not found问题
这个例子来自夏昕的《Spring开发指南》,虽然给出了详细的代码,可能是因为开发环境的差异却频频抛出异常。其中最重要的异常就是apache.xalan.processor.transformerfactoryImpl not found。经过一番奋战终于解决了这个问题。
1、开发环境
JDK1.5、Tomcat 5.0.30、MyEclipse_55.1GA_E_FullStackInstaller。
2、index.jsp
<% ... @ taglib prefix="ww" uri="webwork" %>
< html >
< body >
< form action ="login.action" >
< p align ="center" >
登录 < br >
< ww:if test ="errorMessage != null" >
< font color ="red" >
< ww:property value ="errorMessage" />
</ font >
</ ww:if >
</ p >
用户名:
< input type ="text" name ="model.username" />
< br >
密 码 :
< input type ="password" name ="model.password" />
< br >
< p align ="center" >
< input type ="submit" value ="提交" name ="B1" />
< input type ="reset" value ="重置" name ="B2" />
</ p >
</ form >
</ body >
</ html >
3、main.jsp
< html >
< body >
< p align ="center" > Login Success! </ p >
< p align ="center" > Welcome!
< ww:property value ="#session['username']" />
</ p >
< p align ="center" >
< b > Messages: </ b >< br >
< ww:iterator value ="messages" status ="index" >
< ww:if test ="#index.odd==true" >
! < ww:property />< br >
</ ww:if >
< ww:else >
* < ww:property />< br >
</ ww:else >
</ ww:iterator >
</ p >
</ body >
</ html >
4、web.xml
< web-app version ="2.4"
xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< servlet >
< servlet-name > webwork </ servlet-name >
< servlet-class > com.opensymphony.webwork.dispatcher.ServletDispatcher </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > webwork </ servlet-name >
< url-pattern > *.action </ url-pattern >
</ servlet-mapping >
< servlet >
< servlet-name > velocity </ servlet-name >
< servlet-class > com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet </ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > velocity </ servlet-name >
< url-pattern > *.vm </ url-pattern >
</ servlet-mapping > < welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
5、xwork.xml
<! DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "xwork-1.0.dtd" >
< xwork >
< include file ="webwork-default.xml" ></ include >
< package name ="default" extends ="webwork-default" >
< action name ="login" class ="com.spring.LoginAction" >
< result name ="success" type ="dispatcher" >
< param name ="location" > /main.jsp </ param >
</ result >
< result name ="loginfail" type ="dispatcher" >
< param name ="location" > /index.jsp </ param >
</ result >
< interceptor-ref name ="params" ></ interceptor-ref >
< interceptor-ref name ="model-driven" ></ interceptor-ref >
</ action >
</ package >
</ xwork >
6、LoginAction.java和LoginInfo.java
private final static String LOGIN_FAIL = "loginfail";
LoginInfo loginInfo = new LoginInfo();
public Object getModel() ...{
return loginInfo;
}
public String execute() throws Exception ...{
if("mypass".equals(loginInfo.getPassword())&&"erica".equalsIgnoreCase(loginInfo.getUsername()))...{
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
session.put("username", loginInfo.getUsername());
loginInfo.getMessages().add("message1");
loginInfo.getMessages().add("message2");
loginInfo.getMessages().add("message3");
return SUCCESS;
}else...{
loginInfo.setErrorMessage("Username/Password Error!");
return LOGIN_FAIL;
}
}
}
public class LoginInfo ... {
private String password;
private String username;
private List messages = new ArrayList();
private String errorMessage;
...
}
7、webwork.properties
如果不加上这个文件,在偶的环境中就会报找不到该文件的异常,因此我就到webwork的jar包里找到default.properties,改一下名字就可以了。
8、目录结构
|__src
| |_com.spring
| |_LoginAction.java
| |_LoginInfo.java
|_WebRoot
|_META-INF
|_WEB-INF
| |_lib
| |_classes
| | |_webwork.properties
| | |_xwork.xml
| | |_com.spring
| | |_LoginAction.class和LoginInfo.class
| |_web.xml
|_index.jsp
|_main.jsp
9、测试
按照上面的步骤,运行会报org.apache.xalan.processor.transformerfactoryImpl not found的异常,从网上下载xalan-j_2_7_0-bin-2jars包,把包内的几个jar文件都拷贝到项目的lib中,实际上还要把其中的xml-apis.jar和xercesImpl.jar覆盖掉Tomcat安装目录下的common/endorsed下的两个文件。之所以要覆盖掉是因为Tomcat的版本太低的缘故。