当前位置: 首页 > 面试题库 >

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

夹谷斌蔚
2023-03-14
问题内容

我的网络应用程序出现“找不到线程绑定的请求”错误,希望获得帮助。我正在尝试使用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中声明(请参见3.5.4.1。初始Web配置):

<web-app>
  ...
  <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>
  ...
</web-app>


 类似资料:
  • 请参见日志文件2017-11-06 23:34:15下面的代码调试DispatcherServlet:861 -名为“Spring”的DispatcherServlet处理[/Insurance1/]的GET请求17-11-06 23:34:15 WARN page not found:1136-在名为“Spring”的DispatcherServlet中找不到具有URI[/insurace 1/

  • 自从我将IntelliJ升级到Ultimate 2019.2之后,我突然开始出现以下问题: null 我是通过单击主函数上的play按钮来运行这个。我不得不将目录注释为sources目录和test sources。我重新进口了我的Gradle.Build。我试着重建项目,但它也找不到我的源项目中的项目。 我还尝试使缓存无效并重新启动。没有变化。 我想不出还有什么可以尝试的。

  • 我已经通过Guice侦听器为一组特定的请求设置了一个过滤器,即*/dispatch。 在这个筛选器中,我希望根据请求URI更改每个请求中类型BaseService(包含一个方法的接口)的绑定。例如,如果URI是/hello/dispatch,我希望BaseService绑定到HelloServiceImpl;如果URI是/bye/dispatch,我希望绑定到ByeServiceImpl。两者都实

  • 问题内容: 我有一个控制器,希望每个会话都唯一。根据spring文档,实现有两个细节: 1.初始Web配置 为了支持在请求,会话和全局会话级别(Web范围的Bean)的Bean范围界定,在定义Bean之前,需要一些较小的初始配置。 web.xml如文档所示,我已经添加了以下内容: 2.范围豆作为依赖项 如果要将(例如)HTTP请求范围的bean注入另一个bean,则必须注入AOP代理来代替范围的b

  • android开发者指南说 活动应该注册最特定的意图过滤器,以避免活动选择器对话框,这可能会在用户与屏幕交互时中断与标签的交互。 我正在开发一个应用程序,应该只选择他的MIME类型,并且没有显示活动选择器是非常重要的,但是我想知道:如果在同一个设备中有一个通用的NFC阅读器应用程序会发生什么?活动选择器会被显示还是我的应用程序会刚刚启动?

  • 我在Docker中有一个在赫洛库上运行的Spring启动应用程序。 最近,在将Tomcat更新到10.1.0-M10之后,我开始出现以下错误: 错误R10(启动超时)- 由于早期版本中的漏洞,降级到较低版本的直接想法不起作用。我已经检查了可能的原因,发现Tomcat绑定端口问题。 我无法为不同的端口设置固定配置,因为我正在部署到Heroku并依赖于它们的随机端口。 我的Dockerfile: 解决