SpringMVC和Struts2比较

1.入口

springmvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。

参见:http://blog.csdn.net/zs15932616453/article/details/8832343

2、主要机制

springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,参数的传递是直接注入到方法中的,是该方法独有的。

struts2是类级别的拦截,一个类对应一个request上下文,struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的,这也就无法用注解或其他方式标识其所属方法了

intercepter的实现机制。struts有以自己的interceptor机制,springmvc用的是独立的AOP方式。这样导致struts的配置文件量还是比springmvc大,虽然struts的配置能继承,springmvc使用更加简洁。

3、SpringMVC对ajax的支持上要优于struts2。

下面介绍SpringMVC对ajax的支持:

引入下面两个jar包,我用的是1.8.7,好像1.4.2版本以上都可以,其余版本未测试

jackson-core-asl-1.8.7.jar

jackson-mapper-asl-1.8.7.jar

spring的配置文件中要有这一行,才能使用到spring内置支持的json转换。如果你手工把POJO转成json就可以不须要使用spring内置支持的json转换。

<mvc:annotation-driven/>

使用@ResponseBody注解

@Controller

publicclassajaxControllerextendsMultiActionController{

@RequestMapping("/ajax")

@ResponseBody

publicObjectqueryData(Useruser,HttpServletRequestarg0){

System.out.println("———-ajaxController.queryData()—————");

Userresult=newUser();

result.setUserName(user.getUserName());

result.setAge(user.getAge());

returnresult;

}

}

Jsp

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>Inserttitlehere</title>

<!–<scripttype="text/javascript"src="/SpringMVC7/js/jquery-1.7.1.min.js"></script>–>

<scripttype="text/javascript"src="/SpringMVC7/js/jquery.json-2.4.min.js"></script>

<scripttype="text/javascript">

$(document).ready(function(){

$("#btnAjax").click(function(){

//系列化表单元素为Json对象

//varJsonfields=decodeURIComponent($("form").serialize(),true);

//alert($.toJSON(Jsonfields));

//varjsonuserinfo=$.toJSON(Jsonfields);

varuserName=$("#userName").attr("value");

varuserAge=$("#age").attr("value");

varuser={userName:userName,age:userAge};

$.ajax({

url:"/SpringMVC7/ajax",

type:"post",

data:user,

success:function(data){

alert(data.userName+","+data.age);

}

});

});

});

</script>

</head>

<body>

<formaction=""method="post"name="form">

<h3>传递数据</h3>

<inputtype="text"name="userName"id="userName"/>

<inputtype="text"name="age"id="age"/>

<inputtype="button"value="ajax请求"id="btnAjax"/>

</form>

</body>

</html>

4、性能方面

武断的说,一般环境下,SpringMVC要优于Struts2

测试见

http://developer.51cto.com/art/201104/255410.htm

在开发中,我更倾向使用SpringMVC,理由如下:

1、基于上述对比结果

2、spring生态环境的欣欣向荣,从安全到各种服务集成具有天生的优势

3、Spring对REST的支持

4、有Spring的基础,springmvc非常容易使用

原文链接:http://www.jialinblog.com/?p=136

相关推荐