一、 Servlete action is not available
说明:这种问题是SSH框架结合使用最长出现的问题。
问题现象:2010-9-8 进行SSH组合时出现Servlete action is not available.现象
开发环境:项目名(spring3) struts1.0 spring2.0 hibernate3.1
分析:项目spring3三大框架部署完后,没有添加log4j。导致项目运行时只提示servlet
Action is not available !
第一步:把log4j.jar 包导入项目spring
第二步:设置log4j.properties文件
log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender2=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.File=c:\log4j.log
log4j.appender.appender1.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=[%-5p]%d{yyyy-MM-ddHH:mm:ss}Method:%l%n%m%n
log4j.appender.appender2.layout.ConversionPattern=%r[%t]%p-%c-%l-%m%n
第三步:重新启动服务后,就报一下错误:
Log4j.log日志:
[INFO]2010-09-0905:21:38 Method: org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
Loading XML bean definitions from ServletContext resource [/WEB-INF/classes/applicationContext.xml]
[INFO] 2010-09-09 05:21:39 Method: org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:393)
Bean factory for application context [org.springframework.web.context.support.XmlWebApplicationContext@176343e]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1d317ab
[INFO ] 2010-09-09 05:21:40 Method: org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:276)
Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1d317ab: defining beans [ds,sessionfactory,TblFwxxDAO,listdao,listbiz,/list]; root of factory hierarchy
[INFO ] 2010-09-09 05:21:40 Method: org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:282)
Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1d317ab: defining beans [ds,sessionfactory,TblFwxxDAO,listdao,listbiz,/list]; root of factory hierarchy
[ERROR] 2010-09-09 05:21:45 Method: org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:229)
Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ds' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
Caused by:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
………………………………….
第四步:跟据日志提示:java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
由于未找到org/apache/commons/pool/impl/GenericObjectPool/impl/GenericObjectPool这个类导致Context initialization failed
第五步:看到第四步的分析后,检查了项目中的jar包,发现项目中加载框架时没有导入commons-pool.jar包
解决办法:从网上下载了commons-pool.jar包后。从新运行就运行正常了。
项目spring3的代码如下:
项目结构如下:
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="listForm" type="com.pcx.struts.form.ListForm" />
form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="listForm"
name="listForm"
path="/list"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="list" path="/list.jsp" />
action>
action-mappings>
<message-resources parameter="com.pcx.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
struts-config>
说明:红色字体是把struts和spring 集成在一起了
applicationContext.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="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=zf">
property>
<property name="username" value="sa">property>
<property name="password" value="xiaoli82102983">property>
bean>
<bean id="sessionfactory"
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>
props>
property>
<property name="mappingResources">
<list>
<value>com/pcx/hb/entity/TblFwxx.hbm.xmlvalue>
list>
property>
bean>
<bean id="TblFwxxDAO" class="com.pcx.hb.entity.TblFwxxDAO">
<property name="sessionFactory">
<ref bean="sessionfactory" />
property>
bean>
<bean id="listdao" class="com.pcx.dao.listDao">bean>
<bean id="listbiz" class="com.pcx.biz.listBiz">
<property name="listdao" ref="listdao">property>
bean>
<bean name="/list" class="com.pcx.struts.action.ListAction">
<property name="listbiz" ref="listbiz">property>
bean>
beans>
说明:以上加底纹部分为sping 和hibernate 的集成(把hibernatea注入到spring中)。
呵呵……大功告成!
认真的分析可以解决任何问题!
本文来源:https://www.2haoxitong.net/k/doc/b4e223dfdc3383c4bb4cf7ec4afe04a1b071b0a3.html
文档为doc格式