org.apache.xalan.processor.transformerfactoryImpl not found问题

来源:互联网 发布:关于网络舆情的论文 编辑:程序博客网 时间:2024/05/16 17:38

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

<%@ page pageEncoding="utf-8"%>
<%@ taglib prefix="ww" uri="webwork"%>
<html>
  
<body>
    
<form action="login.action">
      
<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>
      
<align="center">
        
<input type="submit" value="提交" name="B1"/>
        
<input type="reset" value="重置" name="B2"/>
      
</p>
    
</form>
  
</body>
</html>

3、main.jsp

<%@ taglib prefix="ww" uri="webwork"%>
<html>
  
<body>
    
<align="center">Login Success!</p>
    
<align="center">Welcome!
      
<ww:property value="#session['username']"/>
    
</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

<?xml version="1.0" encoding="UTF-8"?>
<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

<?xml version="1.0" encoding="UTF-8"?>
<!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

public class LoginAction implements Action , ModelDriven {    
    
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、目录结构

webWork
      |__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的版本太低的缘故。