首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > Spring框架学习二篇外----在WEBMVC学习遇到的问题
【标  题】:Spring框架学习二篇外----在WEBMVC学习遇到的问题
【关键字】:Spring,----,WEBMVC
【来  源】:http://www.blogjava.net/beauty_beast/archive/2006/05/25/48086.html

Spring框架学习二篇外----在WEBMVC学习遇到的问题

这两天在学习SpringMVC遇到两个比较郁闷的问题,估计新学者很容易遇到,和大家分享一下,避免出现类似的问题。
1、 No request handling method with name 'insert' in class? "ClassName",页面显示为404错误
这个问题出现在使用多操作控制器情况下,相关的操作方法中对应的方法参数前两位必须是request,response对象,必须要有,否则会报如上异常。
2、这个问题困惑了我半天,在网上也有类似的问题,但没有正确解决方法,异常如下:
javax.servlet.ServletException: ModelAndView [ModelAndView: materialized View is [null]
这个问题可能出现的场景很多,我所描述的只是其中之一,没有相关解决方法,只有查看相关源代码,开源就是有这个好处。
异常抛出代码为:
??????? at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:924)
查看了相关源代码,一层一层看下去
首先在ModelAndView 类实例是在DispatcherServlet类中的doDispatch方法中创建的,
再跟踪doDispatch方法中相关代码行

HandlerAdapter?ha? = ?getHandlerAdapter(mappedHandler.getHandler());
mv?
= ?ha.handle(processedRequest,?response,?mappedHandler.getHandler());

ha是一个接口实现类,在该场景下,对应的接口实现类为:
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

SimpleControllerHandlerAdapter类中对应的实现代码为:

((Controller)?handler).handleRequest(request,?response)

调用的是对应的Controller接口中方法,当前Controller对应的接口实现类为我们配置的自定义控制类,一般继承于org.springframework.web.servlet.mvc.SimpleFormController;一层一层再跟踪发现:
SimpleFormController继层于同包AbstractFormController类,而
AbstractFormController继承于同包AbstractController类,对应的
handleRequest(request,response)在AbstractController类中实现,最终调用代码如下:

return ?handleRequestInternal(request,?response)

handleRequest方法为一个抽象方法,在AbstractFormController类中实现,终于找到原因了,呵呵

protected ? final ?ModelAndView?handleRequestInternal(HttpServletRequest?request,?HttpServletResponse?response)
????????????
throws ?Exception? {

????????
// ?Form?submission?or?new?form?to?show?
???????? if ?(isFormSubmission(request))? {

????????????
// ?Form?submission:?in?session-form?mode,?we?need?to?find
????????????
// ?the?form?object?in?the?HTTP?session.
???????????? if ?(isSessionForm())? {
????????????????HttpSession?session?
= ?request.getSession( false );
????????????????
if ?(session? == ? null ? || ?session.getAttribute(getFormSessionAttributeName(request))? == ? null )? {
????????????????????
// ?Cannot?submit?a?session?form?if?no?form?object?is?in?the?session.
???????????????????? return ?handleInvalidSubmit(request,?response);
????????????????}

????????????}


????????????
// ?Found?form?object?in?HTTP?session:?fetch?form?object,
????????????
// ?bind,?validate,?process?submission.
????????????Object?command? = ?getCommand(request);
????????????ServletRequestDataBinder?binder?
= ?bindAndValidate(request,?command);
????????????
return ?processFormSubmission(request,?response,?command,?binder.getErrors());
????????}


????????
else ? {
????????????
// ?New?form?to?show:?render?form?view.
???????????? return ?showNewForm(request,?response);
????????}

????}

原因实际很简单,就因为我在要提交的表单中没有采用post方法,呵呵
而isFormSubmission(request)就是根据此项判断,所以其实际执行的代码为:
return showNewForm(request, response);
而我在对应的配置属性中没有配置对应属性 formView值,因为我本来就不是要展现一个新表单。
故最后返回的ModelAndView为空。

问题都解决了,只是没想到对提交表单这么严格,其他web框架是没有这种限制,不过也没多大关系,在实际开发中我们大都是采用post方式提交表单的。

原来JSP里面也可以这样引用:【上一篇】
spring 定时器的使用,可以用来发送垃圾邮件,或者定时搜索东西(附源码):【下一篇】
【相关文章】
  • Spring AOP 在DWR安全上的应用
  • Spring in Action 笔记(II)
  • [转]C语言补课笔记----(zt)
  • Spring in Action 笔记(I)
  • spring的精髓在于注入bean
  • ESFramewor使用技巧(3) -- 在插件中使用Spring.net
  • C程序设计语言(K&R)----读书笔记(一)
  • 郁闷的一天----------在Ubuntu中安装windows
  • 优秀站点集锦-----with isbase
  • 理解Linux内核(2)----内存管理和设备驱动简介
  • 【随机文章】
  • PE教程4: Optional Header
  • 使路由汇总无效
  • Linux守护进程(服务)列表
  • 空连接得到一些什么有用的信息(win NT系列)
  • 在Visual Basic 6.0 中创建Word文档
  • 候捷谈Java反射机制(2)
  • Ethernet的网络体系结构(2)
  • VB.NET注册表编程
  • Tapestry4改进运行效率的实现方法
  • ASP创建用户,目录和站点
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.