大家好!
如题,以前没有用过。我在练习spring-mvc时出现了一个异常,具体说明如下。其实代码也是夏昕<spring开发指南>中spring-mvc的例子。请大家帮忙看下。
web.xml中配置核心处理对象:
         <servlet>
         <servlet-name>Dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/Config.xml</param-value>
</init-param>
</servlet>
config.xml加入urlmapping:
         <bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">LoginAction</prop>
</props>
</property>
</bean>
异常:
2010-3-8 9:05:11 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet Dispatcher threw exception
java.lang.NoSuchMethodError: org.springframework.web.context.support.RequestHandledEvent.<init>(Ljava/lang/Object;Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:419)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:358)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    发帖后就想到一件事情,改了就好了。很简单的错误,因为没用过,spring底层的东西不清楚。以前用的jar包很可能是旧的或者新的(夏昕的书好像是2003年的),我换了1.2.8版本的包就ok了。
      

  2.   

    大家继续讨论下mvc的机制吧,不然散不了分啦!!!
    spring sample中有一个petclinic工程,配置中有
    <bean id="clinicController" class="org.springframework.samples.petclinic.web.ClinicController">
    <property name="methodNameResolver" ref="clinicControllerResolver"/>
    <property name="clinic" ref="clinic"/>
    </bean>
    但是对于不同的页面请求,org.springframework.samples.petclinic.web.ClinicController怎么确认应该调用哪一个方法?
      

  3.   

    调用时会先new一个ClinicController
    根据配置文件的两个property,调用对应的setProperty(Property property)方法
    然后ClinicController应该实现了org.springframework.web.servlet.mvc.Controller接口
    ,然后后台调用ClinicController的public ModelAndView handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
    }方法处理对应的后台处理逻辑,最后会返回一个new ModelAndView("abcdeft.jsp");
    这样就完成了页面的跳转了
    至于LZ前面说的页面请求,是有对应的请求列表的,不同的请求应该有对应的Controller来处理,这就看你的配置文件了