ssh集成过程中针对Servlet action is not available的解决办法

来源:互联网 发布:java unicode编码 编辑:程序博客网 时间:2024/06/06 21:40

欢迎访问北大青鸟大连鑫鼎中心 www.0411bdqn.com

 

用Spring集成Struts时老出Servlet action is not available


针对这个问题虽然没有十分明确的解决方案,但是网上还有给出了很多解决办法,可以借鉴。
做javaEE开发,就要有应对各种各样异常的思想准备。有一些异常有时候让人十分无奈,有时候真的没有什么规律可言,可能是突然间就不好用了,也可能不同的机器会产出不同的效果,而这些机器的配置又看不出什么不一样。总之,具体情况具体分析,有时候也不要和它较劲,免得带来不必要的烦恼。
最近几天一直在研究ssh集成的问题,确实会发生一些棘手的问题比如说Servlet action is not available
我想这些问题也是这些框架开发者没有预料到的吧,各个框架总是想做到尽善尽美,为其他框架多做一些支持,却很难避免集成起来的冲突。比如说jar包,而且不同版本的jar包互相组合更是难以预料。

总结以下几个方面
1------------
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
       <set-property value="contextConfigLocation" property="/WEB-INF/applicationContext.xml"/>
</plug-in>
这段代码给剪掉。在web.xml文件中加上
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

2------------
还有就是一定要在struts配置文件中加: <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>。
这样你的action才能真的委托给spring。

3------------
针对jar包冲突的问题,asm和asm-2.2.3.jar 删除一个或者2者全删,你的系统不一定会使用这两个包

4------------
不加 cglib-2.1.3.jar 且采用hibernate创建sessionFactory 一对多 多对一 需要采用延迟加载 lazy="false" (根据程序设计的加载情况而定)

5------------spring配置文件中sessionFactory的创建
采用以下第一种方式
(1)
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="configLocation">
    <value>classpath:hibernate.cfg.xml</value>
   </property>
</bean>
(2)
<bean id="dataSource"
   class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
   <property name="driverClassName"
    value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
   <property name="url"
    value="jdbc:sqlserver://localhost:1433;DatabaseName=epai;SelectMethod=cursor" />
   <property name="username" value="sa" />
   <property name="password" value="123" />
</bean>
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref local="dataSource" />
   </property>
   <property name="mappingResources">
    <list>
     <value>y2ssh/zhangcuishan/entity/Bid.hbm.xml</value>
     <value>y2ssh/zhangcuishan/entity/Goods.hbm.xml</value>
     <value>y2ssh/zhangcuishan/entity/User.hbm.xml</value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">
      org.hibernate.dialect.SQLServerDialect
     </prop>
     <prop key="hibernate.show_sql">true</prop>
    </props>
   </property>
</bean>