初学SSH,模仿视频教程做一个超简单的注册功能。遇到了常见的“Servlet action is not available“错误,在网上查询了很多原因,捣鼓一天了也没弄来。头都大了。请求指点不过我好像没分。。真不是吝啬,第一次法帖。。惭愧。工具: Myeclipse6.5+struts1.3+spring2.5+hibernate3.2SSH整合方式:struts和spring整合使用DelegatingRequestProcessor,hibernate的配置和sessionfactory都交给了spring。功能:注册页面俩输入框:用户名,密码。
提交给LoginAction.
在LoginAction中调用DAO实现(IUserDAOImpl)把用户存到数据库。就这么简单。出现问题:提交后出现“Servlet action is not available”,查了很多资料。配置对不对啊,包冲突啊都试了,还是出这个问题(怀疑自己也有可能没试好)。因为错误只显示“Servlet action is not available”,TOMCAT控制台和日志文件又没有其他信息。不知道怎么个找错误法最后发现一点,可能是原因所在:在applicationContext.xml中的sessionfactory bean中配置实体类映射文件时是用<property name="mappingResources">...</property>是吧。如果我不配置它,肯定是报错,但至少提交页面后请求能进入ACTION类并调用DAO实现类的方法来session.save()对象,控制台报错信息是“org.hibernate.MappingException: Unknown entity: com.temp.struts.vo.User”。如果我配置mappingResources,就只有页面显示的“Servlet action is not available”,控制台没信息。简单的考虑以为是写错了。可就那几个字,我对了好几遍没错啊。彻底晕了。
摆脱各位高手指点迷津,菜鸟感激不尽。。代码上
web.xml。
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLocationServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
。struts-config.xml
<struts-config>
<form-beans >
<form-bean name="loginForm" type="com.temp.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.temp.struts.action.LoginAction" >
<forward name="success" path="/hello.jsp"></forward>
<forward name="fail" path="/fail.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
<message-resources parameter="com.temp.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
</plug-in>
</struts-config>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.5.xsd"> <bean id="datasource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:super">
</property>
<property name="username" value="oceansoft"></property>
<property name="password" value="oceansoft"></property>
</bean>
<bean id="sessionfactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="datasource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property> <property name="mappingResources">
<list>
<value>com/temp/struts/vo/AdminTemp.hbm.xml</value>
<value>com/temp/struts/vo/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionfactory"/>
</property>
</bean> <bean id="iuserdao" class="com.temp.struts.dao.IUserDAO" abstract="true"></bean>
<bean id="iuserdaoimpl" class="com.temp.struts.dao.impl.IUserDAOImpl"
parent="iuserdao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<bean name="/login" class="com.temp.struts.action.LoginAction">
<property name="iuserdao">
<ref bean="iuserdaoimpl"/>
</property>
</bean>
</beans>
请先帮我看看吧,如果需要发类文件代码我再发,不过感觉代码应该没问题。因为不配置mappingresources的话都走的通的。
谢谢了!
提交给LoginAction.
在LoginAction中调用DAO实现(IUserDAOImpl)把用户存到数据库。就这么简单。出现问题:提交后出现“Servlet action is not available”,查了很多资料。配置对不对啊,包冲突啊都试了,还是出这个问题(怀疑自己也有可能没试好)。因为错误只显示“Servlet action is not available”,TOMCAT控制台和日志文件又没有其他信息。不知道怎么个找错误法最后发现一点,可能是原因所在:在applicationContext.xml中的sessionfactory bean中配置实体类映射文件时是用<property name="mappingResources">...</property>是吧。如果我不配置它,肯定是报错,但至少提交页面后请求能进入ACTION类并调用DAO实现类的方法来session.save()对象,控制台报错信息是“org.hibernate.MappingException: Unknown entity: com.temp.struts.vo.User”。如果我配置mappingResources,就只有页面显示的“Servlet action is not available”,控制台没信息。简单的考虑以为是写错了。可就那几个字,我对了好几遍没错啊。彻底晕了。
摆脱各位高手指点迷津,菜鸟感激不尽。。代码上
web.xml。
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLocationServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
。struts-config.xml
<struts-config>
<form-beans >
<form-bean name="loginForm" type="com.temp.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.temp.struts.action.LoginAction" >
<forward name="success" path="/hello.jsp"></forward>
<forward name="fail" path="/fail.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
<message-resources parameter="com.temp.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
</plug-in>
</struts-config>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.5.xsd"> <bean id="datasource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:super">
</property>
<property name="username" value="oceansoft"></property>
<property name="password" value="oceansoft"></property>
</bean>
<bean id="sessionfactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="datasource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property> <property name="mappingResources">
<list>
<value>com/temp/struts/vo/AdminTemp.hbm.xml</value>
<value>com/temp/struts/vo/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionfactory"/>
</property>
</bean> <bean id="iuserdao" class="com.temp.struts.dao.IUserDAO" abstract="true"></bean>
<bean id="iuserdaoimpl" class="com.temp.struts.dao.impl.IUserDAOImpl"
parent="iuserdao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<bean name="/login" class="com.temp.struts.action.LoginAction">
<property name="iuserdao">
<ref bean="iuserdaoimpl"/>
</property>
</bean>
</beans>
请先帮我看看吧,如果需要发类文件代码我再发,不过感觉代码应该没问题。因为不配置mappingresources的话都走的通的。
谢谢了!
知道原因所在问题就好解决了
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.temp.struts.action.LoginAction" >
<forward name="success" path="/hello.jsp"> </forward>
<forward name="fail" path="/fail.jsp"> </forward>
</action>
改为<action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="loginForm" scope="request" parameter="method">
<forward name="success" path="/hello.jsp"> </forward>
<forward name="fail" path="/fail.jsp"> </forward>
</action>
试试看,尽量看看加包有没有重复,将asm-2.24好像是这个包去掉,
先讲spring和struts进行集成
然后在吧hibernate集成过来
网上有很多log4j的配置信息,还可以将日志写成一个html文件
看看你的web.xml里面struts是.do还是/形式的 ,你肯定路径提交错误了。
承揽:网站开发,SEO优化,毕业设计,OA,ERP,空间,域名,企业级管理系统 业务范围:[.net] [java]
在struts-config.xml 在去配置
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
</plug-in>
</struts-config> 是不是回出现重复加载的错误!!!!!!
把实体类和映射文件改好后(我映射文件中ID对应的oracle数据库序列也没配置好。。)这点算是过去。总算没有Servlet action is not available。又处理了包冲突,错误提示找不到asm的什么方法,把spring用到的asm-2.2.3.jar删了,这个也过去了。
然后又一个问题解决不了了。。错误提示:
ERROR (ApplicationContext.java:678) - Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@bcda2d
org.springframework.web.context.ContextLocationServlet
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLocationServlet网上查说eclipse没有导入spring.jar包。我自己下个导进去。还是报这个错。
请哪位再给指点指点
文笔不行,请见谅。
<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>这里<param-name>的路径是你工程下spring配置文件的路径