在我的Web应用程序中从Spring收到“找不到线程绑定的请求”错误

我的网络应用程序出现“找不到线程绑定的请求”错误,希望获得帮助。我正在尝试使用struts2 + spring + hibernate,并使用spring管理hibernate会话工厂,并将hibernate会话注入我的struts动作中。我希望这是有道理的。当应用启动时,没有任何错误,但是当我发出第一个Web请求时,它以“未找到线程绑定的请求”错误轰炸。这是我的Spring配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

<bean id="hibernateSessionFactory" scope="singleton"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation" value="classpath:hibernate.cfg.xml" />

</bean>

<bean id="hibernateSession" factory-bean="hibernateSessionFactory"

factory-method="openSession" destroy-method="close" scope="request" class="org.hibernate.Session" />

</beans>

这是我的动作:

package actions.events;

import org.hibernate.Session;

public class Listing {

Session session;

public void setHibernateSession(Session value) throws Exception

{

session = value;

}

public String execute() {

return "success";

}

}

我唯一的见解是,如果我删除了上面的“ setHibernateSession”函数,我不会收到错误消息,因为如果该动作不需要一个会话(惰性实例化),那么大概spring不会打扰创建一个会话。

这是一个例外:

Unable to instantiate Action, actions.events.Listing, defined for 'Listing' in namespace '/events'Error creating bean with name 'hibernateSession': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307)

com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388)

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187)

org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)

org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)

com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)

org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)

org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)

com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)

org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)

java.lang.Thread.run(Unknown Source)

哦,最重要的是,我的web.xml 确实具有必需的上下文侦听器,因此http请求应该由struts识别:

<?xml version="1.0" encoding="UTF-8"?>

<web-app ...

...

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

...

</web-app>

回答:

要在没有Spring MVC的情况下使用请求范围,应RequestContextListener在web.xml中声明):

<web-app>

...

<listener>

<listener-class>

org.springframework.web.context.request.RequestContextListener

</listener-class>

</listener>

...

</web-app>

以上是 在我的Web应用程序中从Spring收到“找不到线程绑定的请求”错误 的全部内容, 来源链接: utcz.com/qa/425784.html

回到顶部