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

因为学习和使用是相辅相成的,鉴于自己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.....

springboot和ssh框架 ssh和springboot对比_SpringMVC和Struts2之间的

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

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

springboot和ssh框架 ssh和springboot对比_Struts和SpringMVC的区别_02

(5)Struts2       : 拦截器实现机制上,有自己的interceptor(拦截器)机制

         SpringMVC: 用的是独立的AOP(面向切面编程)方式,这就导致SpringMVC的配置文件的量要比Struts要小

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

springboot和ssh框架 ssh和springboot对比_Struts2和SpringMVC的差异_03

(7) Struts2       : 一直传出有漏洞           SpringMVC:是Spring的一个分支,和Spring无缝衔接。从项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同  的目录结构和相关配置做到和SpringMVC一样的效果,但是需要xml配置的地方不少)      (8)总结:          A:SpringMVC开发效率和性能高于Struts2。          B:SpringMVC可以认为已经100%零配置。

两大框架没有绝对的优势,只有适不适合自己,适不适合项目; 选择编程语言也是,不能一篇盖全的去比较各个语言之间的优劣势,语言是为了迎合某个点而产生的; 但是选对框架和选对语言,对于项目的开发效率和市场的长远发展来说,还是很重要的! 不断学习,不断摸索,不断碰壁,不断进步!