我在网上下到一个一个Spring + Hibernate + Struts 整合的例子(作者:晓锋):代码如下
1. struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
<data-sources />
<form-beans>
<form-bean name="loginForm"
type="com.lxf.struts.form.LoginForm" /> </form-beans> <global-exceptions />
<global-forwards />
<action-mappings>
<action attribute="loginForm" input="/login.jsp"
name="loginForm" path="/login" scope="request"
type="org.springframework.web.struts.DelegatingActionProxy" >
      <forward name="success" path="/success.jsp" />
</action>
</action-mappings> <message-resources parameter="com.lxf.struts.msg" />
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="WEB-INF/classes/config/ctx.xml" />
</plug-in>
</struts-config>2. :
包:com.lxf.struts
文件名:msg.properties
内容:
# Resources for parameter 'com.lxf.struts.msg'
# Project SSHDemo
login.name=UserName
login.passwd=Password(以下均为Java文件)
3.
包:com.lxf.struts.action
文件名:LoginAction.java
内容:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.lxf.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.SessionFactory;import com.lxf.struts.form.LoginForm;import dao.UserDAO;/**
 * MyEclipse Struts Creation date: 09-14-2007
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/login" name="loginForm" input="/login.jsp"
 *                scope="request" validate="true"
 */
public class LoginAction extends Action {
/*
 * Generated Methods
 */ /**
 * Method execute
 * 
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @return ActionForward
 */ private UserDAO udao = null; public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
// stub
System.out.println("000000000000000000"); ////////////////////////
boolean a = udao.save(loginForm);
System.out.println(a);
return mapping.findForward("success");
} public void setUdao(UserDAO udao) {
this.udao = udao;
}
}
4.
包:com.lxf.struts.Form
文件名:LoginForm.java
内容:
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.lxf.struts.form;import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;/**
 * MyEclipse Struts Creation date: 09-14-2007
 * 
 * XDoclet definition:
 * 
 * @struts.form name="loginForm"
 */
public class LoginForm extends ActionForm {
/*
 * Generated fields
 */
private Integer id; /** username property */
private String username; /** password property */
private String password; /*
 * Generated Methods
 */ /**
 * Method validate
 * 
 * @param mapping
 * @param request
 * @return ActionErrors
 */
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
} /**
 * Method reset
 * 
 * @param mapping
 * @param request
 */
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
} /**
 * Returns the username.
 * 
 * @return String
 */
public String getUsername() {
return username;
} /**
 * Set the username.
 * 
 * @param username
 *            The username to set
 */
public void setUsername(String username) {
this.username = username;
} /**
 * Returns the password.
 * 
 * @return String
 */
public String getPassword() {
return password;
} /**
 * Set the password.
 * 
 * @param password
 *            The password to set
 */
public void setPassword(String password) {
this.password = password;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
}
}5.
包:dao
文件名:UserDAO.java
内容:
package dao;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;import com.lxf.struts.form.LoginForm;public class UserDAO {
private SessionFactory sf = null; private Session session = null; public boolean save(LoginForm user) {
boolean flag = false;
try {
session = sf.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
System.out.println("1111111111111111111111111"); ////////////////////////
} catch (Exception ex) {
ex.printStackTrace();
}
return flag;
} public void setSf(SessionFactory sf) {
this.sf = sf;
}
}
7.
包:config
文件名:Users.hbm.xml
内容:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.lxf.struts.form.LoginForm" table="users" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PWD" length="20" />
        </property>
    </class>
</hibernate-mapping>8.
包:config
文件名:ctx.xml
内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean name="/login" class="com.lxf.struts.action.LoginAction">
<property name="udao">
<ref bean="udao" />
</property>
</bean> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
</property>
<property name="url" value="jdbc:microsoft:sqlserver://localhost:1433/spring"></property>
<property name="username" value="sql"></property>
<property name="password" value="sql"></property>
</bean>
<bean id="sf"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>config/Users.hbm.xml</value>
</list>
</property>
</bean> <bean id="udao" class="dao.UserDAO">
<property name="sf">
<ref local="sf" />
</property>
</bean>
</beans>
在使用该例子时:
引入包没问题,我只把原来的MySql改称了SQLServer的配置,(也就是:ctx.xml文件),结果就出错了。
使用时候报错:“Servlet action is not available”!!!!!!!!因为刚接触Spring,不知道他如何用XML文件将三种技术整合的, 还望高人指教!!!!

解决方案 »

  1.   

    Servlet action is not available
    你的web.xml中的servlet定义有问题
      

  2.   

    改成SQLServer,那么驱动包也相应地都换过来了吗?
      

  3.   

    配置文件出错,三个框架的结合应该在struts的配置文件中关联..
      

  4.   

    配置文件错误
    可查看一下几个文件:
    web.xml,struts-config.xml,applicationContent.xml(及你自己添加的xml文件)
      

  5.   

    多谢楼上!这个例子作者测试通过了,我仅仅是换了个数据库,对三种框架整合的配置文件没做其他改动,怎会报错:“Servlet action is not available”!!!!!!!! 着急啊! 大虾...
      

  6.   

    <property name="url" value="jdbc:microsoft:sqlserver://localhost:1433/spring"></property>
    你的这句话错了,mssql 的url是这样写的吗
      

  7.   

    最好在网上查一下sql数据库的配置
      

  8.   

    ctx.xml 里面再加一个
    <bean name="/login"
    class="com.lxf.struts.action.LoginAction ">

    <property name="udao ">
      <ref bean="udao" />
    </property></bean>
      

  9.   

    <property name="url" value="jdbc:microsoft:sqlserver://localhost:1433/spring"> </property> 
    你的这句话错了,mssql 的url是这样写的吗
    我是用自己的sqlserver包,所以按这个规范写。除了message Servlet action is not available
    没有报其他错,感觉不是Struts的错误,而是Spring整合Struts的问题,对吗?所以很郁闷,这里没有写ApplicationContext配置文件,而是在Struts-config中指定了:ctx.xml
    问题在哪呢??
      

  10.   


    ctx.xml 放在 web-inf下面试下
      

  11.   

        public boolean save(LoginForm user) {
            boolean flag = false;
            try {
                session = sf.openSession();
                Transaction tx = session.beginTransaction();
                session.save(user);
                tx.commit();
                session.close();
                System.out.println("1111111111111111111111111"); ////////////////////////
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return flag;
        }还有你传过去的是 LoginForm user
     那也应该是 new()个啊
      

  12.   

    察看了日志文件:
    内容如下:
    2008-03-27 10:14:52 StandardContext[/spring]Initializing WebApplicationContext for Struts ActionServlet 'action', module ''
    2008-03-27 10:14:52 StandardContext[/spring]action: null
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/login' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Cannot resolve reference to bean 'udao' while setting bean property 'udao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'udao' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Cannot resolve reference to bean 'sf' while setting bean property 'sf'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'udao' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Cannot resolve reference to bean 'sf' while setting bean property 'sf'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContext resource [/WEB-INF/classes/config/ctx.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.hibernate3.LocalSessionFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    Caused by: java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:164)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.class$(LocalSessionFactoryBean.java:158)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.<init>(LocalSessionFactoryBean.java:158)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:759)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:724)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:387)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:424)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:424)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    ...........2008-03-27 10:14:52 StandardContext[/spring]Marking servlet action as unavailable
    2008-03-27 10:14:52 StandardContext[/spring]Servlet /spring threw load() exception
    javax.servlet.UnavailableException
    .......
    .........
    .........
    2008-03-27 10:14:52 StandardContext[/balancer]Exception starting filter BalancerFilter
    java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
    ......
    .......
    ..........
    .2008-03-27 10:14:53 StandardContext[/jsp-examples]ContextListener: contextInitialized()
    2008-03-27 10:14:53 StandardContext[/jsp-examples]SessionListener: contextInitialized()
    2008-03-27 10:14:53 StandardContext[/servlets-examples]ContextListener: contextInitialized()
    2008-03-27 10:14:53 StandardContext[/servlets-examples]SessionListener: contextInitialized()
    2008-03-27 10:15:39 StandardWrapperValve[action]: Servlet action is currently unavailable
      

  13.   

    <bean id="myDataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>org.gjt.mm.mysql.Driver</value>
    </property>
    <property name="url">
    <value>jdbc:mysql://localhost:3306/spring</value>
    </property>
    <property name="username">
    <value>root</value>
    </property>
    <property name="password">
    <value>root</value>
    </property>
    </bean>
    请确定ctx.xml 练数据库这段配置是不是这种格式
      

  14.   

    ctx.xml (路径:WEB-INF\classes\config)
    WEB-INF没有使用hibernate.cfg.xml,这里用的是Spring 注入:
    ctx.xml 内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="/login" class="com.lxf.struts.action.LoginAction">
    <property name="udao">
    <ref bean="udao" />
    </property>
    </bean> <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
    </property>
    <property name="url" value="jdbc:microsoft:sqlserver://localhost:1433/spring"></property>
    <property name="username" value="sql"></property>
    <property name="password" value="sql"></property>
    </bean>
    <bean id="sf"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="ds" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>/config/Users.hbm.xml</value>
    </list>
    </property>
    </bean> <bean id="udao" class="dao.UserDAO">
    <property name="sf">
    <ref local="sf" />
    </property>
    </bean>

    </beans>struts配置文件:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
    <data-sources />
    <form-beans>
    <form-bean name="loginForm" type="com.lxf.struts.form.LoginForm" />
    </form-beans> <global-exceptions />
    <global-forwards />
    <action-mappings>
    <action attribute="loginForm" 
            input="/login.jsp"
            name="loginForm" 
            path="/login" 
            scope="request"
            type="org.springframework.web.struts.DelegatingActionProxy" >
              <forward name="success" path="/success.jsp" />
    </action>
    </action-mappings> <message-resources parameter="com.lxf.struts.msg" />
    <plug-in
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"
    value="/WEB-INF/classes/config/ctx.xml" />
    </plug-in>
    </struts-config>
      

  15.   

    启动Tomcat 后,日志文件内容如下:
    2008-03-27 11:14:12 StandardContext[/spring]Initializing WebApplicationContext for Struts ActionServlet 'action', module ''
    2008-03-27 11:14:12 StandardContext[/spring]action: null
    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 6 in XML document from ServletContext resource [/WEB-INF/classes/config/ctx.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '/login' is not a valid value for 'NCName'.
    Caused by: org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '/login' is not a valid value for 'NCName'.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.processOneAttribute(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.processAttributes(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:351)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:280)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:101)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:389)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:324)
    at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:355)
    at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:296)
    at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:225)
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:869)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
    at javax.servlet.GenericServlet.init(GenericServlet.java:211)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4335)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
    at org.apache.catalina.core.StandardService.start(StandardService.java:476)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:2298)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422)2008-03-27 11:14:12 StandardContext[/spring]Marking servlet action as unavailable
    2008-03-27 11:14:12 StandardContext[/spring]Servlet /spring threw load() exception
    javax.servlet.UnavailableException
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:880)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
    at javax.servlet.GenericServlet.init(GenericServlet.java:211)
    ..........
            ..............
    2008-03-27 11:14:12 StandardContext[/balancer]Exception starting filter BalancerFilter
    java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
    ...........
            ...........
    2008-03-27 11:14:13 StandardContext[/jsp-examples]ContextListener: contextInitialized()
    2008-03-27 11:14:13 StandardContext[/jsp-examples]SessionListener: contextInitialized()
    2008-03-27 11:14:13 StandardContext[/servlets-examples]ContextListener: contextInitialized()
    2008-03-27 11:14:13 StandardContext[/servlets-examples]SessionListener: contextInitialized()