2007-08-15

struts+spring+hibernate整合了一天了,还没成功

关键字: struts+spring+hibernate 整合
struts+spring+hibernate整合了一天了,还没成功,请各位看看,哪里不对了

错误提示如下:

HTTP Status 404 - Servlet action is not available

type Status report

message Servlet action is not available

description The requested resource (Servlet action is not available) is not available.
Apache Tomcat/5.5.23


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="findUserForm" type="org.xredleaf.form.FindUserForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="findUserForm"
      input="/form/findUser.jsp"
      name="findUserForm"
      path="/findUser" 
      scope="request" 
      validate="true"
     
       />

  </action-mappings>
	
  <message-resources parameter="org.xredleaf.ApplicationResources" />
  
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
  </plug-in>
  
</struts-config> 


applicationContext.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<bean id="DataSoure"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
			<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
		</property>
		<property name="url">
			<value>jdbc:microsoft:sqlserver://localhost:1433</value>
		</property>
		<property name="username">
			<value>sa</value>
		</property>
		<property name="password">
			<value>123456</value>
		</property>
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="DataSoure" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.SQLServerDialect
				</prop>
			</props>
		</property> 
		<property name="mappingResources">
			<list>
				<value>org/xredleaf/dao/Sysuser.hbm.xml</value>
			</list>
		</property> 
	</bean>
	<bean id="SysuserDAO" class="org.xredleaf.dao.SysuserDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean name="/findUser" class="org.xredleaf.action.FindUserAction" singleton="false">  
	    <property name="dao">
	        <ref bean="SysuserDAO"/>
	    </property>
	</bean>
	
</beans>


SysuserDAO.java内容如下:

package org.xredleaf.dao;

import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 * Data access object (DAO) for domain model class Sysuser.
 * @see org.xredleaf.dao.Sysuser
 * @author MyEclipse - Hibernate Tools
 */
public class SysuserDAO extends HibernateDaoSupport {

    private static final Log log = LogFactory.getLog(SysuserDAO.class);

	//property constants
	public static final String USERNAME = "username";
	public static final String PASSWORD = "password";
	public static final String TYPE = "type";

	protected void initDao() {
		//do nothing
	}
    
	public void SysuserDAO(){
		log.debug("init SysuserDAO");
	}
    public void save(Sysuser transientInstance) {
        log.debug("saving Sysuser instance");
        try {
            getHibernateTemplate().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
    
	public void delete(Sysuser persistentInstance) {
        log.debug("deleting Sysuser instance");
        try {
            getHibernateTemplate().delete(persistentInstance);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }
    
    public Sysuser findById( java.lang.Integer id) {
        log.debug("getting Sysuser instance with id: " + id);
        try {
            Sysuser instance = (Sysuser) getHibernateTemplate()
                    .get("org.xredleaf.pojo.Sysuser", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
    
    
    public List findByExample(Sysuser instance) {
        log.debug("finding Sysuser instance by example");
        try {
            List results = getHibernateTemplate().findByExample(instance);
            log.debug("find by example successful, result size: " + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }    
    
    public List findByProperty(String propertyName, Object value) {
      log.debug("finding Sysuser instance with property: " + propertyName
            + ", value: " + value);
      try {
         String queryString = "from Sysuser as model where model." 
         						+ propertyName + "= ?";
		 return getHibernateTemplate().find(queryString, value);
      } catch (RuntimeException re) {
         log.error("find by property name failed", re);
         throw re;
      }
	}

	public List findByUsername(Object username) {
		return findByProperty(USERNAME, username);
	}
	
	public List findByPassword(Object password) {
		return findByProperty(PASSWORD, password);
	}
	
	public List findByType(Object type) {
		return findByProperty(TYPE, type);
	}
	
    public Sysuser merge(Sysuser detachedInstance) {
        log.debug("merging Sysuser instance");
        try {
            Sysuser result = (Sysuser) getHibernateTemplate()
                    .merge(detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public void attachDirty(Sysuser instance) {
        log.debug("attaching dirty Sysuser instance");
        try {
            getHibernateTemplate().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
    
    public void attachClean(Sysuser instance) {
        log.debug("attaching clean Sysuser instance");
        try {
            getHibernateTemplate().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

	public static SysuserDAO getFromApplicationContext(ApplicationContext ctx) {
    	return (SysuserDAO) ctx.getBean("SysuserDAO");
	}
}


FindUserAction.java内容如下:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package org.xredleaf.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.xredleaf.dao.Sysuser;
import org.xredleaf.dao.SysuserDAO;
import org.xredleaf.form.FindUserForm;

/** 
 * MyEclipse Struts
 * Creation date: 08-15-2007
 * 
 * XDoclet definition:
 * @struts.action path="/findUser" name="findUserForm" input="/form/findUser.jsp" scope="request" validate="true"
 */
public class FindUserAction extends Action {
	
	private static final Log log = LogFactory.getLog(FindUserAction.class);
	private SysuserDAO dao;
	 
	public FindUserAction(){
		log.debug("init FindUserAction");
	} 
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		log.debug("start...");
		FindUserForm findUserForm = (FindUserForm) form;
		
		List list = dao.getHibernateTemplate().loadAll(Sysuser.class);
		//dao=(SysuserDAO)getBean("SysuserDAO");

		log.debug(list.size()); 
		return null;
	}
	
	public void setDao(SysuserDAO dao){
		this.dao=dao;
	}
	
	public SysuserDAO getDao(){
		return dao;
	}
	
	
	
}



web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
评论
bei-jin-520 2008-01-07
在STRUTS-CONFIG.XML配个控制器。你的STRUTS和SPRING就没整合在一快
zhangpeng8394 2007-12-27
在struts配置文件中使用controller
试一下
红修罗 2007-11-16
直接使用Struts2 配置起来比较简单
梦之谷 2007-11-15
这个问题我也碰过,应该是spring和hibernate结合有问题,你试着把
<property name="mappingResources">
<list>
<value>org/xredleaf/dao/Sysuser.hbm.xml</value>
</list>
</property>
这配置注释掉,再运行,如果成功的话那真的是spring和hibernate的结合问题,关于这个问题我也正在困扰之中,急求别人帮我解决啊!!!我的同学跟我说过试着用桥连接,这样成功率会大点
mhqawjh 2007-10-13
在你的struts中的action配置中,应该加上这样一句话
type="org.springframework.web.struts.DelegatingActionProxy"

原因:你这里利用的是Spring委托的方式与Struts集成。
分析下你的代码:
你给出了URL,然后程序会在Struts配置文件里面找相应的Action,但是根本找不到。所以你要把这个任务交给Spring的一个类,让它去帮你找,加上上述代码以后,程序就会在Sring的配置文件里找,这样才找到了你自定义的Action处理类。大功告成!!!
daydup 2007-10-10
action的PATH有问题
icream 2007-10-04
看看hbing的代码吧
struts-config配置错误
需要配置代理bean
不过spring新的配置方式不需要这样配
struts-conifg还是照struts配法
参考下springside
lgx522 2007-10-03
别整了,找个现成的,比如说Appfuse
mhqawjh 2007-10-02
兄弟,看看本人写的这个东西,有没有收获???
http://mhqawjh.javaeye.com/blog/128748
hunter006 2007-09-25
404 struts配置问题
lsqlister 2007-09-25
spring和struts有三种集成方式啊。
2.1 在struts-config.xml中加入ContextLoaderPlugIn
ContextLoaderPlunIn是Struts 1.1+ 的插件,用来为 Struts 的 ActionServlet 加载 Spring的Application Context。这个Context引用 WebApplicationContext (由 ContextLoaderListener 加载) 作为它的父Context。默认的context文件是映射的 ActionServlet 的名字,加上 -servlet.xml后缀。 如果 ActionServlet 在 web.xml 里面的定义是 action, 那么默认的文件就是 /WEB-INF/action-servlet.xml。

格式如下:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>

2.2 在Struts-config.xml中加入DelegatingRequestProcessor
用Spring的DelegatingRequestProcessor重载Struts 默认的 RequestProcessor。这样当收到一个针对Action的请求时,DelegatingRequestProcessor会自动从Spring Context中查找对应的Action Bean。

格式如下:
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>


2.3 建立struts-config.xml与action-servlet.xml中Action与Bean的对应关系
连接 struts-config.xml 和 action-servlet.xml 中的 Action与Bean的桥梁是action 的"path"和 bean 的"name"。
如果你在 struts-config.xml 文件中有如下配置:<action path="/users" .../>
你必须在 action-servlet.xml 中将 Action bean 的名字定义为 "/users":<bean name="/users" class="..."/>
设定完以后,action的type属性可以省略不写,因为所有的Action都在Spring Context中寻找。注意这里bean用的是name属性,而不是id,因为"/"在id属性中是非法字符。
tovegar 2007-09-21
建议看一下modelstry,虽然下载不到了,但是看一下他得主要流程!也是很有用处得
abcde10156 2007-09-20
我以前也出过和你一样的问题,是spring的配置文件不对
liuzongan 2007-09-20
在strurts-config.xml添加
liuzongan 2007-09-20
用Spring的DelegatingRequestProcessor重载Struts 默认的 RequestProcessor。这样当收到一个针对Action的请求时,DelegatingRequestProcessor会自动从Spring Context中查找对应的Action Bean。

格式如下:

<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>
wenjinlan 2007-09-19
web.xml要配上welcomefiles
yapi 2007-09-19
give up ,
take "Rails"
fulianglove 2007-08-27
9 lou right
zhao 2007-08-19
这样每个Action分别在struts-config.xml和Spring配置文件中要配置相应的内容,有个办法,在struts-config.xml配置文件中只加入
<controller processorClass= "org.springframework.web.struts.DelegatingRequestProcessor">
, 随后,只需在Spring配置文件中配置相应的Action即可
redleaf 2007-08-19
问题在前些天已经解决了,太忙了,没回贴,呵呵
主要就是少了个type="org.springframework.web.struts.DelegatingActionProxy"
redleaf
搜索本博客
最近加入圈子
存档
最新评论
评论排行榜