Struts和SpringMVC的区别

1、Struts是类级别的拦截,一个request上下文对应一个类;SpringMVC是方法级别的拦截,一个request上下文对应一个方法,而方法又对应一个url。具体看一个实现过程就明白了,struts常用是配置xml实现,而SpringMVC是注解实现。

①下面是一个struts.xml配置代码:

<package name="admin" namespace="/admin" extends="struts-default">
        <!-- 使用通配符与动态值配置AdminAction -->
           <action name="*" class="admin" method="{1}">
            <result name="login">/login.jsp</result>
            <result name="users">/admin/users.jsp</result>
            <result name="add">/admin/add.jsp</result>
            <result name="input">/message.jsp</result>
            <result name="message">/message.jsp</result>
            
        <!-- 为AdminAction类中login方法配置映射 -->
        <action name="login" class="admin" method="login">
            <result name="success" >manage.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
 </package>

一个<package/>标签可以是包括整个类的业务方法,注意看<action/>标签,每一个标签都要指定一个类,以及实现的方法(当然不指定实现方法,会默认执行execute方法),根据不同的String类型的值,跳转不同的页面,这就很明显说明了Struts是属于类级别的拦截;

②下面是SpringMVC的注解代码:

@Controller
public class AttributeController {
    @GetMapping("/attributeTest")
    public ModelAndView attributeTest(ModelAndView mv){
        System.out.println("attributeTest被调用...");
        mv.setViewName("redirect:main");
        return mv;
    }
    
    @RequestMapping("/main")
    public String main(
            @RequestAttribute("school") String school,
            @SessionAttribute("author") String author){
        System.out.println("main方法被调用...");
        System.out.println("school="+school+", author="+author);
        return "welcome";
    }
}

@GetMapping和@RequestMapping都是对指定url的响应,每次的request请求只会根据url来找到对应的方法执行,这样子就容易理解SpringMVC是方法级别的拦截。

2、由于两者的拦截级别不同,所以request和response上下文的数据生命周期也有所不同,SpringMVC每个方法独享request和response的数据,参数通过url获取;而Struts是通过页面的控件属性自动绑定到类上,即每个Action类的方法都能共享request和response的数据。

3、拦截器方面,struts有自己的拦截机制,SpringMVC采用AOP的方式,导致配置上Struts要多很多。

4、struts的入口是filter,springmvc则是servlet;

5、验证框架方面,springmvc支持JSR303,直接在类的属性上用注解,简单方便,而struts要自己实现support类,还要实现validate方法,写验证规则,显得比较麻烦。

posted @ 2018-09-09 23:55  KamShing  阅读(1375)  评论(0编辑  收藏  举报