超难题.(struts1.2+spring+hibernate)

dao167 2008-01-24 10:51:17
虚心求教,如有人能解决,十分感谢
2008-01-24 10:14:28,203 ERROR [org.apache.struts.action.RequestProcessor] - No action instance for path /Register could be created
java.lang.IllegalAccessException: Class org.apache.struts.util.RequestUtils can not access a member of class cn.hxex.order.action.RegisterAction with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.Class.newInstance0(Class.java:344)
at java.lang.Class.newInstance(Class.java:303)
at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:143)
at org.apache.struts.action.RequestProcessor.processActionCreate(RequestProcessor.java:280)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:218)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

页面register.jsp代码
<html>
<head>
<title> JSP for RegisterForm form </title>
</head>
<body>

<html:form action="Register">
name : <html:text property="name" />
<html:errors property="name" />
<br />
password : <html:password property="password" />
<html:errors property="password" />
<br />
age : <html:text property="age" />
<html:errors property="age" />
<br />
e_mail : <html:text property="e_mail" />
<html:errors property="e_mail" />
<br />
<html:submit />
<html:cancel />
</html:form>
</body>
</html>


Struts.config.xml 配置
<form-beans>
<form-bean name="RegisterForm"
type="cn.hxex.order.forms.RegisterForm" />
</form-beans>
<action path="/Register"
type="cn.hxex.order.action.RegisterAction" name="RegisterForm"
input="/pages/register.jsp" scope="request">
<forward name="sucess" path="/pages/afterRegister.jsp" />
</action>


RegisterForm.java
package cn.hxex.order.forms;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

import cn.hxex.order.bo.Register;


public class RegisterForm extends ActionForm {

private String password;


private String name;


private String age;


private String e_mail;
private Register register;


public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}


public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}


public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;
}


public String getAge() {
return age;
}


public void setAge(String age) {
this.age = age;
}


public String getE_mail() {
return e_mail;
}


public void setE_mail(String e_mail) {
this.e_mail = e_mail;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Register getRegister() {
return register;
}

public void setRegister(Register register) {
this.register = register;
}
}


package cn.hxex.order.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 cn.hxex.order.bo.Register;
import cn.hxex.order.forms.RegisterForm;

public class RegisterAction extends BaseAction {
RegisterAction() {
super();
}

//public class RegisterAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegisterForm registerForm = (RegisterForm) form;

Register register = new Register();
register.setName(registerForm.getName());
register.setPassword(registerForm.getPassword());
register.setAge(registerForm.getAge());
register.setE_mail(registerForm.getE_mail());

getRegisterSerice().saveRegister(register);
registerForm.setRegister(register);
return mapping.findForward("sucess");
}
}


BaseAction.java

package cn.hxex.order.action;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.struts.ActionSupport;
import cn.hxex.order.service.IRegisterSerice;

/**
* Action基类 *
* @author galaxy */
public abstract class BaseAction extends ActionSupport {
protected Object getBean(String name) {
WebApplicationContext ctx = getWebApplicationContext();
return ctx.getBean(name);
}


protected IRegisterSerice getRegisterSerice() {
return (IRegisterSerice) getBean("registerSerice");
}
}


业务层接口IRegisterSerice.java

package cn.hxex.order.service;

import cn.hxex.order.bo.Register;
import cn.hxex.order.dao.IRegisterDAO;

public interface IRegisterSerice {
/**
* 保存注册用户
*
*/
public abstract Register saveRegister(Register register);
//定义接口实例
public abstract void setRegisterDAO(IRegisterDAO registerDAO);
}


接后面



...全文
341 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ailsaxx 2009-07-09
  • 打赏
  • 举报
回复
我也遇到这个问题啦。。。
guoqiangone 2008-01-28
  • 打赏
  • 举报
回复
不知道楼上是否正确,
你用的mysql数据库,我不会用,没有办法帮你了
SDMRauquin 2008-01-28
  • 打赏
  • 举报
回复
楼主,我来收你的120分了.

你犯了一个低级错误.

cn.hxex.order.action.RegisterAction这个action中

public RegisterAction() { // 这里缺少了 public,导致无法访问,所以struts的配置提示有错误
super();
}

加上就好了.至于其他的功能 我没有仔细看.

另外说下 这个不是你写的项目吧,你是不是在已有的基础上,尝试学写代码的?

有问题再说了,

结贴给分,我要冲星星
SDMRauquin 2008-01-27
  • 打赏
  • 举报
回复
贴了那么多 我也懒得看了 还不如传工程包给某人调试下
才20分 我承认我自私
不过愿意的话 贴出自己的联系 我可以帮你调试下 我不想贴我的了,已经帮太多初学的了,都不喜欢研究 动不动就问人
dao167 2008-01-27
  • 打赏
  • 举报
回复
源代码已上传:http://download.csdn.net/source/345445;
希望有能人帮忙解决,先谢了.
dao167 2008-01-27
  • 打赏
  • 举报
回复
好的.谢了,源代码包:http://download.csdn.net/source/345445
guoqiangone 2008-01-26
  • 打赏
  • 举报
回复
dao167

等 级:
发表于:2008-01-26 15:14:298楼 得分:0
这个struts+spring+hibernate 问题还没有解决呢?
http://topic.csdn.net/u/20080124/22/ce7eef17-af72-4992-b045-e5d18a25c015.html

--------------------------
你那代码确实贴出来太多,把主要的贴出来,看的眼花,有时间帮你慢慢看
guoqiangone 2008-01-25
  • 打赏
  • 举报
回复
这贴你在其他模块是不是也有发。

IllegalAccessException当应用程序试图创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出的异常。

你仔细看一下RegisterAction,RegisterAction有问题。主要看方法调用是否有问题。
dao167 2008-01-25
  • 打赏
  • 举报
回复
我在web.xml里集合了:web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Order Sample</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/spring/applicationContext.xml
</param-value>
</context-param>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>mySessionFactory</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


<!-- Standard Action Servlet Configuration (with debugging) -->
<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/config/struts/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>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>



<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<jsp-config>
<!-- 下面开始引入Struts标记-->

<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<!--Struts标记引入结束-->
</jsp-config>

</web-app>
jinxinzhang 2008-01-25
  • 打赏
  • 举报
回复
我觉得很奇怪,你不是用了spring了,既然已经交给spring控制了,为什么你的Struts.config.xml没有显示这一点呢!
dao167 2008-01-25
  • 打赏
  • 举报
回复
直接继承Action是没问题,但这样就没法获取spring中的 getBean("registerSerice")事务了。我认为是spring业务层接口IRegisterSerice.java 、实现RegisterSericeSpring.java 、业务层接口IRegisterSerice.java 、
持久层实现:RegisterhibernateDAO.java 。这几个文件中的方法出了问题 。感谢大家帮忙分析,不过现在还知哪错了。
mty1979 2008-01-25
  • 打赏
  • 举报
回复
估计还是继承BaseAction那里有问题,如果直接继承Action的话应该不会报错了...
dao167 2008-01-25
  • 打赏
  • 举报
回复
代码是多了点,不过都很简单呀,涉汲三个架就这样了,我只是把相当的ACTION贴了上来,下面是完整的Struts.config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- Data Sources -->
<data-sources></data-sources>
<!-- Form Beans -->
<form-beans>
<form-bean name="OrderForm"
type="cn.hxex.order.forms.OrderForm" />
<form-bean name="RegisterForm"
type="cn.hxex.order.forms.RegisterForm" />
</form-beans>

<!-- Global Exceptions -->
<global-exceptions>
<exception key="global.data.access.exception"
path="/QueryOrder.jsp" scope="request"
type="org.springframework.dao.DataAccessException" />
</global-exceptions>

<!-- Global Forwards -->
<global-forwards></global-forwards>

<!-- Action Mappings -->
<action-mappings>

<action path="/Index"
type="org.apache.struts.actions.ForwardAction" parameter="Index">
</action>
<action path="/PlaceOrder"
type="org.apache.struts.actions.ForwardAction"
parameter="NewOrder">
</action>
<action path="/QueryOrder"
type="org.apache.struts.actions.ForwardAction"
parameter="QueryOrder">
</action>

<action path="/SaveNewOrder"
type="cn.hxex.order.action.SaveOrderAction" name="OrderForm"
scope="request" validate="true" input="NewOrder">
<display-name>Save New Order</display-name>
<exception key="error.order.save" path="NewOrder"
scope="request" type="cn.hxex.order.exception.OrderException" />
<exception key="error.order.not.enough.money"
path="/NewOrder.jsp" scope="request"
type="cn.hxex.order.exception.OrderMinimumAmountException" />
<forward name="success" path="ViewOrder" />
<forward name="failure" path="NewOrder" />
</action>

<action path="/FindOrderID"
type="cn.hxex.order.action.FindOrderAction" name="OrderForm"
scope="request" validate="true" input="QueryOrder">
<display-name>Find Existing Order</display-name>
<exception key="error.order.find" path="QueryOrder"
scope="request" type="cn.hxex.order.exception.OrderException" />
<forward name="success" path="ViewOrder" />
</action>




<!-- my add action -->
<action path="/QueryByUser"
type="org.apache.struts.actions.ForwardAction"
parameter="QueryByUser">
</action>

<action path="/FindOrderUser"
type="cn.hxex.order.action.QueryByUserAction" name="OrderForm"
scope="request" validate="true" input="QueryByUser">
<display-name>Find Existing Order</display-name>
<exception key="error.order.find" path="QueryOrder"
scope="request" type="cn.hxex.order.exception.OrderException" />
<forward name="success" path="/pages/ViewOrderUser.jsp" />
</action>

<action path="/Register"
type="cn.hxex.order.action.RegisterAction" name="RegisterForm"
input="/pages/register.jsp" scope="request">
<forward name="sucess" path="/pages/afterRegister.jsp" />
</action>
</action-mappings>
<controller>
<set-property property="processorClass"
value="cn.hxex.order.struts.HxexRequestProcessor" />
<set-property property="contentType"
value="text/html; charset=utf-8" />
<set-property property="nocache" value="true" />
</controller>
<!-- Message Resources -->
<message-resources
parameter="cn.hxex.order.resources.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config"
value="/WEB-INF/tiles-defs.xml" />
</plug-in>
</struts-config>








jinxinzhang 2008-01-25
  • 打赏
  • 举报
回复
贴了这么多代码,看都头晕,大概的看了下,你的Struts.config.xml 配置 ,你有没有贴全啊,如果就是这样的话肯定不对的吧

<form-beans>
<form-bean name="RegisterForm"
type="cn.hxex.order.forms.RegisterForm" />
</form-beans>
<action path="/Register"
type="cn.hxex.order.action.RegisterAction" name="RegisterForm"
input="/pages/register.jsp" scope="request">
<forward name="sucess" path="/pages/afterRegister.jsp" />
</action>


你看看你的type属性既然你用了spring,为何还是“cn.hxex.order.action.RegisterActi”应该还有下面的代码吧

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
<message-resources parameter="com.***.ApplicationResources" />
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
dao167 2008-01-24
  • 打赏
  • 举报
回复
接前面

业务层实现RegisterSericeSpring.java
package cn.hxex.order.service.spring;

import cn.hxex.order.bo.Register;
import cn.hxex.order.service.IRegisterSerice;
import cn.hxex.order.dao.*;

public class RegisterSericeSpring implements IRegisterSerice{
IRegisterDAO registerDAO;
/**
* 保存新的注册用户信息
*/
public Register saveRegister(Register register){
Register savedRegister = null;
try{
savedRegister = getRegisterDAO().saveRegister(register);
}
catch(RuntimeException e){e.printStackTrace();}

return savedRegister;


}


public IRegisterDAO getRegisterDAO() {
return registerDAO;
}
public void setRegisterDAO(IRegisterDAO registerDAO) {
this.registerDAO = registerDAO;
}

}


持久层接口IRegisterDAO.java
package cn.hxex.order.dao;

import cn.hxex.order.bo.Register;

public interface IRegisterDAO {
public abstract Register saveRegister(final Register register);

}


持久层实现:RegisterhibernateDAO.java
package cn.hxex.order.dao.hibernate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import cn.hxex.order.bo.Register;
import cn.hxex.order.dao.IRegisterDAO;
public class RegisterhibernateDAO extends HibernateDaoSupport
implements IRegisterDAO {
/**
* 保存一个用户信息
*
*/
public Register saveRegister(Register register) {
getHibernateTemplate().save(register);
return register;
}

}


aplicationContex.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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName">
<value> com.mysql.jdbc.Driver </value>
</property>
<property name="url">
<value>
jdbc:mysql://localhost:3306/orders?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;autoReconnectForPools=true
</value>
</property>
<property name="username">
<value> root </value>
</property>
<property name="password">
<value> 111111 </value>
</property>
</bean>

<!-- 配置SessionFactory -->
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value> cn/hxex/order/bo/Order.hbm.xml </value>
<value> cn/hxex/order/bo/OrderLineItem.hbm.xml </value>
<value> cn/hxex/order/bo/Register.hbm.xml </value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql"> true </prop>
<prop key="current_session_context_class"> thread </prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="connection.pool_size"> 10 </prop>
<prop key="hibernate.hbm2ddl.auto"> update </prop>
</props>
</property>

<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<!-- 配置TransactionManager -->
<bean id="myTxManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>

<!-- 配置事务策略 -->
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<tx:attributes>
<tx:method name="find*" propagation="REQUIRED"
read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="productServiceMethods"
expression="execution(* cn.hxex.order.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="productServiceMethods" />
</aop:config>

<bean id="registerDAO"
class="cn.hxex.order.dao.hibernate.RegisterhibernateDAO">
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>

<bean id="orderDAO"
class="cn.hxex.order.dao.hibernate.OrderHibernateDAO">
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>

<bean id="orderService"
class="cn.hxex.order.service.spring.OrderServiceSpringImpl">
<property name="orderDAO">
<ref local="orderDAO" />
</property>

</bean>

<bean id="registerSerice"
class="cn.hxex.order.service.spring.RegisterSericeSpring">
<property name="registerDAO">
<ref local="registerDAO" />
</property>
</bean>
</beans>

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧