个人对JAVA的SSH三大框架组合的偏见

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人对JAVA的SSH三大框架组合的偏见相关的知识,希望对你有一定的参考价值。

多数人JavaWeb的入门是学习SSH:struts+spring+hibernate;我在十年前(2006年)学习的,那时火的是struts1.x ,struts2还没诞生。
 
这三个框架组合,我用了大概有5年时间。现在回想起来,用这三大框架做项目真是痛苦不堪;但那时也没别的选择,一律的MVC框架;相比纯Servlet与JSP已经是有很大的进步
 
所谓的痛苦主要来源于控制层,视图,及数据查询。在3年前我就不再采用struts与hibernate框架,有很多功能用不上,因为都只是做小项目,数据表基本不超200张。
 
struts的JSP标签真是不好用,包括其他的JSP标签;
MVC框架对request,session,response 验证器,拦截器的封装与抽象会让初级开发者在里面绕不出来,建议初学者先把servlet学透了再学SSH,不然你会看不到技术的本质。struts只是servlet的一个外壳、一件衣服;你谈个对象,不会是想研究她的衣服是怎么做的吧?
 
hibernate的自动生成Bean,让初学者眼前一亮,原来数据库操作就这么简单、这么方便。看似方便实是画地为牢,get一条记录真需要把所有字段都提出来吗?如果多查其他表的一个字段呢?HQL的兼容多数据库有用过吗?强行OO等于困在hql中,把简单的问题复杂化了;犹如种田带手拷,各种不自由。
 
spring是我一直推崇的。它的对象管理、ioc、配置管理、事务、调度真在是太实用了;至今我的任何项目都有spring身影。
 
其实我想说的是,芝麻大的小项目你分那么多层有鸟用?实现一个功能得建个view、action、service、dao,真有按严格意义上的分层吗?我曾经看到一个电信外包项目在增加一个简单的查询,需要创建9个类或配置文件,那个项目只能用一个乱字来形容,一群人围着这项目瞎扯腾,实际上已经没有一个人掌握,举步维艰。
 
到了现在我变成了只写JSP,我是分为view与handler。数据交互多用ajax,数据格式是JSON
 
handler.jsp
String cmd=request.getParameter("c");
ApplicationContext spring = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
JdbcTemplate jdbc=spring.getBean("jdbcTemplate",JdbcTemplate.class);
UserBean userBean=(UserBean)session.getAttribute(Constants.SESSION_USER);
Map<String,Object> ret=new HashMap<String,Object>();
ret.put("success", true);
ret.put("code", 1);
ret.put("message", "操作成功");
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyyMM");

if("getJobList".equals(cmd)){	
	List<Map<String,Object>> list=jdbc.queryForList(sql);
	for(Map<String,Object> map:list){
		String c=colors[random.nextInt(colors.length)];
		map.put("bordercolor", c);
		map.put("bgcolor", c);
	}
	out.println(JSON.toJSONString(list));
}else if("drop".equals(cmd)){
	String id=request.getParameter("id");
	String stime=request.getParameter("stime");
	String etime=request.getParameter("etime");
	jdbc.update("update toa_onduty set stime=?,etime=? where id=?",stime,etime,id);
	out.println(JSON.toJSONString(ret));
}else if("editable".equals(cmd)){

	String stime=request.getParameter("stime");
	String etime=request.getParameter("etime");
	//ret.put("editable",gridService.isEditAble(userBean.getId(), stime, etime));
	out.println(JSON.toJSONString(ret));
}else{
	System.out.println("参数c的值["+cmd+"]有误,system/workflow/manager/handler.jsp");
	out.println(JSON.toJSONString(ret));
}

view.jsp

function reload(id,type){
    cache={id:id,type:type};
      $("#calendar").fullCalendar(‘removeEvents‘);
      $.post(handlerJsp,{c:"getJobList",id:id,type:type},function(data){
          if(data.length==0){lgxInfo("没有排班数据");}else{
              alert("有"+data.length+"条排班记录");
          }
          for(var i=0;i<data.length;i++) {
              var obj = new Object();
              obj.id = data[i].id;
              obj.title = data[i].title;
              obj.start = parseDate( data[i].stime );
              obj.end = parseDate( data[i].etime );
             // obj.description = data[i].description;
              obj.backgroundColor=data[i].bgcolor;
              obj.borderColor=data[i].bordercolor;
              obj.allDay =false;
//               if(data[i].allday==1){
//                   obj.allDay =true;
//               }else{
//                   obj.allDay =false;
//               }
              $("#calendar").fullCalendar(‘renderEvent‘,obj,true);
          }
      },"JSON");
}

总体上我还是使用平台来开发;用平台来把控全局,只是在局部功能采用这样的写法。复杂的业务逻辑我也会面向接口编程写个Service,让Spring统一管理;

以这样的写法来方现一般的小操作,如行云流水、简单快捷。

以上是关于个人对JAVA的SSH三大框架组合的偏见的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出Java三大框架SSH与MVC的设计模式

java开发框架都有哪些

JAVA三大框架SSH的各自作用

java的三大框架是啥,功能各是啥

SSH框架

java框架组合ssm和ssh各自的优势是啥?