struts+spring+hibernate整合了一天了,还没成功
struts+spring+hibernate整合了一天了,还没成功,请各位看看,哪里不对了
错误提示如下:
HTTP Status 404 - Servlet action is not availabletype Status reportmessage Servlet action is not availabledescription 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"/></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" /></property></bean><bean name="/findUser" 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 constantspublic 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><controller processorClass= "org.springframework.web.struts.DelegatingRequestProcessor">, 随后,只需在Spring配置文件中配置相应的Action即可</controller></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属性中是非法字符。 21 楼 hunter006 2007-09-25 404 struts配置问题 22 楼 mhqawjh 2007-10-02 兄弟,看看本人写的这个东西,有没有收获???
http://mhqawjh.iteye.com/blog/128748 23 楼 lgx522 2007-10-03 别整了,找个现成的,比如说Appfuse 24 楼 icream 2007-10-04 看看hbing的代码吧
struts-config配置错误
需要配置代理bean
不过spring新的配置方式不需要这样配
struts-conifg还是照struts配法
参考下springside 25 楼 daydup 2007-10-10 action的PATH有问题 26 楼 mhqawjh 2007-10-13 在你的struts中的action配置中,应该加上这样一句话
type="org.springframework.web.struts.DelegatingActionProxy"
原因:你这里利用的是Spring委托的方式与Struts集成。
分析下你的代码:
你给出了URL,然后程序会在Struts配置文件里面找相应的Action,但是根本找不到。所以你要把这个任务交给Spring的一个类,让它去帮你找,加上上述代码以后,程序就会在Sring的配置文件里找,这样才找到了你自定义的Action处理类。大功告成!!! 27 楼 梦之谷 2007-11-15 这个问题我也碰过,应该是spring和hibernate结合有问题,你试着把
<property name="mappingResources">
<list>
<value>org/xredleaf/dao/Sysuser.hbm.xml</value>
</list>
</property>
这配置注释掉,再运行,如果成功的话那真的是spring和hibernate的结合问题,关于这个问题我也正在困扰之中,急求别人帮我解决啊!!!我的同学跟我说过试着用桥连接,这样成功率会大点 28 楼 红修罗 2007-11-16 直接使用Struts2 配置起来比较简单 29 楼 zhangpeng8394 2007-12-27 在struts配置文件中使用controller
试一下 30 楼 bei-jin-520 2008-01-07 在STRUTS-CONFIG.XML配个控制器。你的STRUTS和SPRING就没整合在一快