从Struts1换到Spring MVC,真的有很多不舒服的地方,也许是习惯问题,也许是我还对Spring MVC了解不够。我并不需要什么什么特性,什么什么功能,只需要Controller最基本的功能:request、response、还有form数据绑定,其他的我自己来实现,必要时写一子类扩展,在Struts1中,这些都有,而且没有多余的,并提供DispatchAction可供扩展。
Spring MVC提供的Controller所有的加一块,当然是包含Struts1的,但是分的太细,在项目中更多关注的是实现,感觉没什么必要。弄了几天Spring的MVC,我基本的需求就是简单,比如XML配置:
<bean name="/logout.do" class="com.demo.control.system.LogoutController" />
它提供的其他配置方式,感觉很麻烦,自动影射类名、地址什么配置方式,又感觉怪怪的,而且还不区分大小写。这样配置,以后再新加控制器时,也就这么一句话,谁都看得懂。返回的地址就在Controller里写return new ModelAndView("/test.jsp"); 这个写在配置文件里还是写在代码里感觉都一样,写在配置文件里还麻烦。
然后说说我遇到的问题:1、直接使用AbstractController:XML配置格式没变,但没有form数据绑定功能,无奈放弃。之后发现第2点,想解决这个问题。2、使用SimpleFormController:XML配置格式没变,有form数据绑定功能,但是不GET请求和POST请求被分开了。GET进来的时候需要formView属性,所以这个属性还必须要设置,不设置就报错!
而往往formView和successView是一样的,GET进控制器也是必要的,为了统一处理,我重写了isFormSubmission(),让它直接返回true,这样GET/POET就都进得来,formView也省了,successView就是return new ModelAndView("/test.jsp");
可问题又来了,commandClass这个也必须要设置,不设置就报错,可有些JSP的确是不需要数据绑定的,这就又要换回AbstractController,麻烦,这两个Controller实现的方法都不一样!
之后发现第3点,想解决这个问题。3、使用MultiActionController:如果XML配置格式不变,那控制器的singleton就纯属扯谈了,换另一种配置,真是巨麻烦,代码就不贴了。
再说form数据绑定,有,在方法定义的第三个参数,但方法体必须写上:request.setAttribute("command", xxxBean);,不写,或者request.setAttribute("command", null);都报错。
我真就不明白,为什么null不行,有就绑定,没有就不绑定呗,Struts的form不就是这样的吗!后来有点倾向于JODD,但这个需要在JSP页面中写上需要绑定的JavaBean全包路径,不便于维护,而且我想既然有MVC框架,干嘛还要引入其它的项目,所以也没用这个。
想不明白这么简单的事干嘛就搞的这么复杂,哎~也许是我对Srping MVC不够了解,毕竟才3天的时间,对于我的“遭遇”有经验的朋友能否给个建议,讨论讨论,给个最佳实践方案~~谢了各位!

解决方案 »

  1.   

    如果用spring的MVC,还不如看看struts2,struts2很好用
      

  2.   

    spring 的mvc好像用的公司很少啊
      

  3.   

    MVC,这东西用得着非用别人的么?
    你有良好的jsp-servlet-bean,就已经是很好的mvc了。
      

  4.   

    spring的MVC,其实还是很好用的,建议楼主多看看spring带的sample,还有现在这个时代就别学spring2.0以前的东西了,看看spring2.5之后的吧,用注释语法的,非常方便。你说的那些其实和struts1的原理是差不多的。spring2.5之后的MVC感觉应该是比struts2要强一此。至少文档比较完备。
      

  5.   

    Spring3.0都要发布了,等3.0出来一起升级吧!不好用就别用了。
      

  6.   

    其实我是这样想的,一切从简,以前项目是用Struts1+Spring2.0+Hibernate3.2,但Hibernate的东西其实是用的很少的,用的最方便的就是add()方法,后来把Spring的JdbcTemplete封装了一下,使得插入数据库也不用写一长串的SQL了。而Spring也有MVC,索性也把老的Struts1换掉把,完全用Spring实现三层架构。现在还没打算用Struts2,因为这又是一个庞然大物,正如5楼eastoneking所说,良好的jsp-servlet-bean,就已经是很好的mvc了,所以我不打算引入太多的东西。我这次是用Spring2.5.6,但极不喜欢注解的方式编程,的确是很方便,但总会把人搞的云里雾里的,很不透明。还记得以前说JAVA和XML是绝配,天生一对的说法吗,现在把XML搞的太大,就又把东西写会代码里,以减少XML的配置,越来越搞不懂发展怎么是这样的~还有就是我不太喜欢追高,Spring3我看到了,但不是很感冒,因为本身用到它的东西也不是太多。用2.5.6也是因为它是2.0的升级,性能等各方面提高很多。就像JDK,如果不是CXF,我还在用1.4.2呢,呵呵~~项目用Spring MVC的人很少吗?
      

  7.   

    了解spring的MVC,不过还是喜欢struts
      

  8.   

    学习 MVC只用过struts的,spring的MVC没用过
      

  9.   


    哎,框架横行的年代阿,说这些话大多数情况下是被鄙视的。那注释的写法啊。是java5令人激动的一个新特性。然而学过之后,就知道这是个注定被滥用的东西。
    被滥用,也就是过分使用了。原因有两个:
    第一,这东西太好了。
    第二,这东西好到仅从程序员的角度看不到他的坏处。其实这个功能有点学c#里面注释的感觉。但是c#的注释是好的,java的是不好的。可是,我想问问大家,我们拼命的作配置是为了什么?
    说高深点叫什么解耦。说白了就是为了重用和维护的时候方便。但是一旦用了java的注释,也就意味着,
    所有变化都需要修改代码,然后重新编译。原来用xml配置,我们可以写手册,留给维护人员、用户和后来的
    开发者,告诉他们应该如何配置,讲清楚大概的原理就好了。现在,只要修改配置,就要修改代码重新编译。
    如果应用在服务器上,甚至需要重新打包。这个怎么能叫做降低耦合呢?java的注释是不好的,因为他是面向代码的,造成了代码对注释的依赖。而C#中的注释是内置的,有限的,影响的范围是组件级别的,也就是说这个东西是打包部属时候的影响,好像在组件中可以设置(多年不用c#,凭记忆说的)。所以说java的不好,C#的好。反正,为了维护的时候,能够拿出一个具有可操作性的东西,对维护人员要求不高的系统,我在java5放出来,学了一下这个功能,以后就再也没用过。而且也不想用。
      

  10.   

    spring的MVC还是一个不错的,用的多就体会到他的好处了,就像刚开始用servlet不挺好的吗,干嘛要换struts,后来struts用熟了,有想struts不挺好的嘛,干嘛换别的。 哎,技术就是这样,越来越复杂。但操作越来越简单。
      

  11.   

    呵呵,eastoneking我跟你的想法一样,所以一直都没用注解,也不喜欢用。freeboyrambo说的对,技术就是这样,越来越复杂。但操作越来越简单。可现在简单的有点让我摸不到头脑,弄得太不透明了,也许是我跟其他人不一样,我希望的框架是把复杂的、另类的封装成简单的、通用的,其他的由我自己来实现扩展,而现在却弄得烦琐,它把该做的做了,不该做的也给做了,像Spring的MVC,就必须遵循它的规则去开发,还是强制性的,可说白了我们想写的东西还不就是个Servlet么,这复杂了不是~我把SimpleFormController继承改了改,最起码可以用了,呵呵~
      

  12.   

    确实不常用这个,曾经想过做个纯纯的spring项目,最后也只使用security和事务管理
      

  13.   

    我就是在搞这个纯纯的Spring项目,呵呵~
    google一下,相关资料都很少
      

  14.   

    顶  spring的mvc确实没有研究过 也不知道怎样  现在的框架真是太多了 感觉还是掌握基础的东西比较好 
      

  15.   

    是的,极其不喜欢 Spring MVC 全是配置文件,通过 URL 找个方法得翻好几个配置文件。
      

  16.   

    不过spring 的 webflow还不错,我们公司现在给建行做的外呼系统就集成了这玩意儿
      

  17.   

    一年半前开始尝试SSH,四个月后完全抛弃了Spring,一年之后自己重写了Servlet接口扔了struts,要不是懒,我觉得hibernate也可以扔了.
    框架就是省时的东西,要是真为了效率,宁可都不用
      

  18.   

    spring本身很好用,它的MVC用过两三次,有复杂化的趋势。
    的确有点不好用。
      

  19.   

    spring mvc记得看过,而且那本书上还乱吹一起,当时感觉还行,现在基本上都 忘了,没感觉了额~~
      

  20.   

    springsource 都完了.不知道有没有下一代.搞不懂它和vmware 在什么方面互补了.看似 不相关的东西.
    但被收了,WEB方面我想会更弱了.
      

  21.   


    不要想太多勒,其实我们用到 Spring 的也就是AOP和IOC,其它的都很少用的到,只要把AOP和IOC弄熟就可以勒,个人认为。
      

  22.   

    我也发现了spring mvc是个垃圾  但是spring的某些做的是非常好。  取其精华 
      

  23.   

    没想到看到1年前的帖子,发现有这么多奇怪的人,不懂spring mvc便说垃圾,或者不如struts2你了解spring mvc吗?你了解你为什么用框架吗?嫌配置文件多啊?为什么不用jdk1.5的注解方式开发啊?
    嫌垃圾?你用struts2的话肯定也垃圾.spring mvc性能非常强大,有人曾经对比过spring mvc和struts2的性能,结果非常明显,10倍不到.不管是不是精确,但是这种情况必然可能发生.有为兄弟说自己扩展了servlet接口.这个思路是完全正确的.什么action,什么controller都是对servlet的扩展.如果能够自己扩展不需要什么框架.框架是为了大项目的团队写作及尽量的解耦准备的,为了让你能更方便的维护和了解.如果你觉得你做网站麻烦,最好别用java.用java也别用什么ssh.用play framework.敏捷开发的
    如果你可以不用java.那么直接ror吧.兄弟.你不是做java的,或者java ee(java企业级应用)的.你还是回去搞那个把.别把java用在不属于他的地方
      

  24.   

    很不喜欢注解的方式,Spring的MVC也不好用,还是strut的比较好用