SSH与SSM两大框架之'S'的区别简单比较

本文摘自文章 SpringMVC与Struts2区别与比较总结


并对原文章中的某些区别点进行了摘除,并增加了自己的一些配图比较说明


因为学习和使用是相辅相成的,鉴于自己Struts2使用经验较缺乏,特整理了一份留给以后的自己参考,希望,以后成为大神了,再详细补说每一个区别点!


SSH: Spring + Struts2        + Hibernate


SSM: Spring + SpringMVC + Mybatis


Struts的详细配置 可以参考我的博文第一个Struts2   ,快速翻看一下

SpringMVC的整合可以看我的博文Spring MVC 整合,大致扫一遍


Struts2 和 SpringMVC 的区别:


(1)Struts2       :是类级别的拦截,一个类对应一个request上下文;实现restful url架构相对要费劲,因为Struts2中 Action的一个方法对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了


LoginAction.java


package com.appleyk.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport { //继承类ActionSupport 

	/**
	 * 类版本号
	 */
	private static final long serialVersionUID = 1L;

	private String username;
	private String password; //类属性 所有Action之间共享
	
	public String getUsername(){
		return username;
	}
	
	public void setUsername(String username){
		this.username=username;
	}
	
	public String getPassword(){
		return password;
	}
	
	public void setPassword(String password){
		this.password=password;
	}
	
	@Override
	public String execute() throws Exception { //重写 execute方法 实现Action行为
		
		if(getUsername().equals("appleyk") && getPassword().equals("521")){
			return "success";
		}
		else if(getUsername().equals("") & getPassword().equals("")){
			return "welcome";
		}
		else
			return "error";
	
	} //返回的字符串 表示一个jsp页面 相当于一个url

}


            

         SpringMVC:是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以从架构本身上,很容易实现restful(一种架构设计风格) url


ItemController.java


package com.taotao.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.taotao.common.pojo.EasyUIDataGridResult;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.utils.JsonUtils;
import com.taotao.pojo.TbItem;
import com.taotao.service.ItemService;

/**
 * 商品信息 Controller 控制器-->操作商品信息表
 * 控制器里面的每一个url,对应一个实现方法,方法之间不共享数据
 * @author Appleyk
 * 2017年8月14日12:04:46
 */
@Controller
public class ItemController {
   @Autowired
   private ItemService itemService;
   @RequestMapping("/item/{itemID}")
   @ResponseBody
   private TbItem geTbItemByID(@PathVariable Long itemID){
	   TbItem item = itemService.geTbItemByID(itemID);
	   return item;
   }
   
   @RequestMapping(value="/item/save",method=RequestMethod.POST)
   @ResponseBody
   public TaotaoResult createItem(TbItem item,String desc){
	   TaotaoResult result = itemService.createItem(item, desc);
	   return result;
   }
   
   @RequestMapping("/item/param/list")
   //可以不用@ResponseBody注解的方式直接返回json数据,自己写工具类,返回json字符串
   public String getItemParamList(Integer page,Integer rows){
	   EasyUIDataGridResult result = itemService.getItemParamList(page, rows);
	   String json = JsonUtils.objectToJson(result);
	   return json;
   }
}

(2)Struts2       : 方法之间虽然也是独立的,但其所有的Action(一个Action对应一个java类)变量是共享的,这个虽然不会影响程序的运行,却给我们读代码的时候带来麻烦;一个Action对象对应一个requset上下文

         SpringMVC:方法之间基本上是独立的,独享 request和response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量


(3)Struts2:  由于需要针对每个request进行封装,把request、session等servlet生命周期的变量封装成一个个Map,供给每个Action使用,并保证线程安全,所以,原则上是比较耗费内存的


(4)Struts2 : 核心控制器是Filter  -->类 StrutsPrepareAndExecuteFilter

                          通过url找对应的Action.....




        SpringMVC:的核心控制器是Servlet -->类 DispatcherServlet

                              通过url找对应的Controller....





(5)Struts2       : 拦截器实现机制上,有自己的interceptor(拦截器)机制
         SpringMVC: 用的是独立的AOP(面向切面编程)方式,这就导致SpringMVC的配置文件的量要比Struts要小


(6)Struts2       : 拦截器集成了Ajax,  在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便
       SpringMVC  : 集成了Ajax,使用起来非常方便,只需一个注解@ResponseBody就可以实现将对象转换为json数据,然后直接返回 响应文本即可








(7) Struts2       : 一直传出有漏洞

          SpringMVC:是Spring的一个分支,和Spring无缝衔接。从项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同  的目录结构和相关配置做到和SpringMVC一样的效果,但是需要xml配置的地方不少)
    


(8)总结:

         A:SpringMVC开发效率和性能高于Struts2。

         B:SpringMVC可以认为已经100%零配置。



两大框架没有绝对的优势,只有适不适合自己,适不适合项目;

选择编程语言也是,不能一篇盖全的去比较各个语言之间的优劣势,语言是为了迎合某个点而产生的;

但是选对框架和选对语言,对于项目的开发效率和市场的长远发展来说,还是很重要的!



不断学习,不断摸索,不断碰壁,不断进步!



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值