论坛首页 Java企业应用论坛

想用Spring MVC却感觉它好像还不够方便

浏览 14411 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-01   最后修改:2010-12-24
想在项目中使用Spring MVC,研究了一下,感觉还是差一点点,可能是我研究得不够深入啦。

使用注解的Controller:
@Controller
@RequestMapping("/user") // 使用ControllerClassNameHandlerMapping,可以不写这一行,我喜欢!
public class UserController {
}


当一个Controller有多个方法时,如下:
@Controller
public class UserController {
	@RequestMapping
	public void index(HttpServletRequest request) {
	}

	@RequestMapping("/show") // 我是个懒人!RequestMapping的参数与方法名相同,能不能不写呢?
	public User show(Long id) {
		return manager.getUser(id);
	}
}


另外,也想用REST,但对我这样的懒人来说还是不够简便。
@Controller
@RequestMapping("/user") // 去掉这一行,遇到了郁闷的400:The request sent by the client was syntactically incorrect
public class UserController {

	@RequestMapping(method = RequestMethod.GET)
	public List<Person> list() {
		return manager.getUserList(); // 这里可以直接返回List,还是相当不错的。
	}

	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
	public String show(@PathVariable("id") Long id, Model model) {
		model.addAttribute(manager.getUser(id));
		return "show"; // 能不能不返回View Name呢?直接return manager.getUser(id)多好,还可以少一个model参数
// 因为URL不能确定View Name,DefaultRequestToViewNameTranslator是搞不定的了,但其实返回的就是方法名嘛
	}
}

最近二天才开始研究Spring MVC,但就是找不到怎样可以写更少的代码,郁闷 


--------------------------------------------------------------------------------------------------------------


        考虑到一个场景:弹出一个输入页面(新增或修改),有“保存”、“保存并关闭”、“关闭”等按钮,当用户点击“保存”时须将当前用户的输入保存到数据库,并且继续展现这条数据,以方便用户修改后再次“保存”,不确定用户何时会点“关闭”按钮(最好用JavaScript在客户端直接关闭,另外用户也可能点击浏览器的关闭)。

        Struts2是类级别的拦截,实现ModelDriven接口之后,能够自动绑定用户在页面上的输入,在save方法中只需将对应的类变量保存到数据库,并且返回"input"字符串,就又回到输入页面,对应的类变量的值会重新展现在页面上,包括保存过程中自动生成的值(业务层可能生成最后修改时间等)。

        Spring MVC可以在打开输入页面时将实体数据放在Session中,但却不清楚应该何时清除Session,因为不好确定用户何时关闭页面。

        Spring MVC也可以在save方法中重新从数据库中取出实体数据(Struts2其实也是在ModelDriven的实现中取出来赋到类变量上),然后手工绑定用户在页面上的输入数据,然后保存回数据库,再将此实体数据返回给VIEW展现。这样Spring MVC其实和Struts2在原理上差不多,只不过Spring MVC需要手工绑定,并且从数据库中取出实体的代码需要写多次(可以归纳到一个方法中,但少不了对这个方法的显式调用);Struts2需要为每一个请求创建一个对象,效率差一些,却优雅一些。

        但很多系统都没有这里提到的需求,也就不用考虑这一点。没有什么需求是某项技术一定不能实现的,只是效率、性能和优雅程度等不同,这就需要做出权衡。
   发表时间:2010-12-02  
不返回View Name也可以,不过有些限制。

见org.springframework.web.servlet.DispatcherServlet:
// Do we need view name translation?
if (mv != null && !mv.hasView()) {
  mv.setViewName(getDefaultViewName(request));
}


不过,很可惜,这里他拿不到方法的名字,只能根据request来推测。
0 请登录后投票
   发表时间:2010-12-02  
深有同感,我跟你一样,只要可以不写的代码,坚决不写!
感觉Spring,Hibernate,Struct这些框架用起来都特别麻烦,一个简单的业务都要写不少的代码,又要改xml,又要在Java文件里改,改改改改,改死人才做好,烦死人!

Java程序的设计,简洁就是美,这些框架的确解决了一些问题,但带来更多的问题,真的没有提高效率,建议慎用!
0 请登录后投票
   发表时间:2010-12-02  
简单的应用用框架当然觉得繁琐
等你的项目越大,就觉得框架的方便之处了
框架也是越用越熟悉的,努力去用,光看没什么切身体会的
0 请登录后投票
   发表时间:2010-12-02  
181054867 写道
深有同感,我跟你一样,只要可以不写的代码,坚决不写!
感觉Spring,Hibernate,Struct这些框架用起来都特别麻烦,一个简单的业务都要写不少的代码,又要改xml,又要在Java文件里改,改改改改,改死人才做好,烦死人!

Java程序的设计,简洁就是美,这些框架的确解决了一些问题,但带来更多的问题,真的没有提高效率,建议慎用!

这只能说明你选错框架了。杀鸡用宰牛刀,不是刀不好,而是人用错了。
0 请登录后投票
   发表时间:2010-12-02  
181054867 写道
深有同感,我跟你一样,只要可以不写的代码,坚决不写!
感觉Spring,Hibernate,Struct这些框架用起来都特别麻烦,一个简单的业务都要写不少的代码,又要改xml,又要在Java文件里改,改改改改,改死人才做好,烦死人!

Java程序的设计,简洁就是美,这些框架的确解决了一些问题,但带来更多的问题,真的没有提高效率,建议慎用!

ssh这些框架功能强大,同时它们要适应多种开发习惯,考虑各种扩展性、低耦合什么的,因此几乎对于任何具体的项目来说都存在不同程度的过度设计,我理解这也就是我们用这些框架感觉麻烦的根本原因。Spring,Hibernate,Struts的设计者都是大牛,不可能不懂得如何设计一个简单框架。
要解决框架使用麻烦的问题,就是需要定义我们自己的编码习惯,自己可以在这些框架基础上再做些工作,裁剪它们的用法,减少灵活性(灵活性和麻烦总是一对矛盾)。我自己也尝试做了一些这样的工作,搞自己的快速框架,做到了不再使用xml做配置文件了(有一部分是用注解代替了,但大部分配置是直接省去了),跟一年前比起来省事了很多,有时间自己在好好总结一下。
0 请登录后投票
   发表时间:2010-12-02  
是可以不写的
0 请登录后投票
   发表时间:2010-12-02  
http://www.iteye.com/topic/792005
看看这个,我写的,最近忙着换工作没时间搞api和demo,但是dispatcher这个框架应用起来还是不怎么需要demo的,一看就会。
0 请登录后投票
   发表时间:2010-12-02  
有其它框架的,我以前公司自己搞的一个框架就是规则大于配置,只要你把文件放入相应的文件夹就可以了,根本不要写啥requestMapping之类的东西
0 请登录后投票
   发表时间:2010-12-02  
spring3MVC这么强大的..
如果你用STS开发的话
配置什么的都不用写 STS自带得有模板
创建一个spring3MVC的maven项目
直接写代码就是了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics