天天看点

spring MVC No Session found for current thread

项目名:exam3

和数据库交互时报错:

spring MVC No Session found for current thread

严重: servlet.service() for servlet [spring2] in context with path [/exam3] threw exception [request processing failed; nested exception is org.hibernate.hibernateexception: no session found for current thread] with root cause  

org.hibernate.hibernateexception: no session found for current thread  

    at org.springframework.orm.hibernate4.springsessioncontext.currentsession(springsessioncontext.java:97)  

    at org.hibernate.internal.sessionfactoryimpl.getcurrentsession(sessionfactoryimpl.java:988)  

    at com.dao.userdao.getbyidentity(userdao.java:26)  

    at com.dao.userdao.getbyidentityandstudentid(userdao.java:42)  

    at com.web.controller.logincontroller.login(logincontroller.java:56)  

    at sun.reflect.nativemethodaccessorimpl.invoke0(native method)  

    at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39)  

    at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25)  

    at java.lang.reflect.method.invoke(method.java:597)  

    at org.springframework.web.method.support.invocablehandlermethod.invoke(invocablehandlermethod.java:219)  

    at org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:132)  

    at org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:104)  

    at org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlemethod(requestmappinghandleradapter.java:745)  

    at org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:686)  

    at org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:80)  

    at org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:925)  

    at org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:856)  

    at org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:936)  

    at org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:827)  

    at javax.servlet.http.httpservlet.service(httpservlet.java:621)  

    at org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:812)  

    at javax.servlet.http.httpservlet.service(httpservlet.java:728)  

    at org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305)  

    at org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)  

    at org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222)  

    at org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123)  

    at org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:472)  

    at org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171)  

    at org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99)  

    at org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:953)  

    at org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118)  

    at org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408)  

    at org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1023)  

    at org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:589)  

    at org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:312)  

    at java.util.concurrent.threadpoolexecutor$worker.runtask(threadpoolexecutor.java:886)  

    at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:908)  

    at java.lang.thread.run(thread.java:662)  

 页面报错如下:

spring MVC No Session found for current thread

终于找到原因了,是两个配置文件(beans.xml,spring2-servlet.xml)中context:component-scan配置得有问题.

项目目录结构如下:

spring MVC No Session found for current thread

spring2-servlet.xml 中的部分代码如下:

spring MVC No Session found for current thread

<context:component-scan base-package="com">  

<context:include-filter type="annotation" expression="org.springframework.stereotype.controller"/>    

</context:component-scan>  

 beans.xml中部分代码如下:

spring MVC No Session found for current thread

<context:component-scan base-package="com" >  

     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller"/>   

    </context:component-scan>   

 值得注意的是:com目录下既有dao,又有spring mvc的控制器。

解决方案

按如下方式修改之后就ok了:

spring2-servlet.xml:

spring MVC No Session found for current thread

<context:component-scan base-package="com.web">  

<!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.controller"/>  -->   

beans.xml:

spring MVC No Session found for current thread

<context:component-scan base-package="com.dao" >  

     <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller"/>  -->  

注意:

(1)spring集成hibernate的配置文件是beans.xml;spring mvc的配置文件是spring2-servlet.xml;

(2)以上两个配置文件中均有context:component-scan 标签