`
悲剧了
  • 浏览: 145205 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

springMvc与struts2

阅读更多
先说点springmvc学习的事,高手跳过这个-->>>
1.spring mvc的入门,不要google什么demo了,官方的这个肯定是最好的
http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/
2.推荐两篇好文,只看spring reference貌似要深入点还是有难度的
深入实战看这个http://elf8848.iteye.com/blog/875830
源码看这个http://huibin.iteye.com/blog/618910


正题:
使用struts2已经这么久了,但springmvc一直是看过,没实战过,顺着mvc的模式对比对比两者,想从以下几个方面来聊下他们的区别

1.拦截起角度
请求拦截处理都是chain方式,使用起来如何呢?
入口一个是fiter,一个是servelt,每个请求进行chain处理,实现方式不太一样,效果类似
struts2
有一个钩子参数hook-->>ActionInvocation
    public interface Interceptor extends Serializable {  
      
        /** 
         * Called to let an interceptor clean up any resources it has allocated. 
         */  
        void destroy();  
      
        /** 
         * Called after an interceptor is created, but before any requests are processed using 
         * {@link #intercept(com.opensymphony.xwork2.ActionInvocation) intercept} , giving 
         * the Interceptor a chance to initialize any needed resources. 
         */  
        void init();  
      
        /** 
         * Allows the Interceptor to do some processing on the request before and/or after the rest of the processing of the 
         * request by the {@link ActionInvocation} or to short-circuit the processing and just return a String return code. 
         * 
         * @return the return code, either returned from {@link ActionInvocation#invoke()}, or from the interceptor itself. 
         * @throws Exception any system-level error, as defined in {@link com.opensymphony.xwork2.Action#execute()}. 
         */  
        String intercept(ActionInvocation invocation) throws Exception;  
    }  



spring则划分成了三个方法,就需要分别调用,但却没有一个hook方式
// 这里取出执行链中的 Interceptor进行前处理   
             if  (mappedHandler.getInterceptors() !=  null ) {   
                 for  ( int  i =  0 ; i < mappedHandler.getInterceptors().length; i++) {   
                    HandlerInterceptor interceptor = mappedHandler.getInterceptors()[i];   
                     if  (!interceptor.preHandle(processedRequest, response, mappedHandler.getHandler())) {   
                        triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response,  null );   
                         return ;   
                    }   
                    interceptorIndex = i;   
                }   
            }   
  
             //在执行handler之前,用 HandlerAdapter先检查一下handler的合法性:是不是按Spring的要求编写的。   
            HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());   
            mv = ha.handle(processedRequest, response, mappedHandler.getHandler());   
  
             // 这里取出执行链中的 Interceptor进行后处理   
             if  (mappedHandler.getInterceptors() !=  null ) {   
                 for  ( int  i = mappedHandler.getInterceptors().length -  1 ; i >=  0 ; i--) {   
                    HandlerInterceptor interceptor = mappedHandler.getInterceptors()[i];   
                    interceptor.postHandle(processedRequest, response, mappedHandler.getHandler(), mv);   
                }   
            }   
        }    


配置的角度:
strus2有package划分,具体类来划分,配置intercepter,还可以有拦截器栈,并且有hook存在,可以调用action上面的信息,这个就可以做到根据action配置的注解之类的进行一些处理

spring配置根据具体处理控制器,或者根据路径来,需要划分清晰的path
这个struts2实用性要比spring好,但struts2的效果spring也是可以的

2.参数处理角度
http的string类型转换成java类型 
java类型在处理成具体业务类
两次转换都有些小细节,好听点叫阻抗不匹配,struts2的方式有点重,特殊如类型转换modelDriver方式可以选择,可以做点特殊处理,但比起spring的灵活性,差很多

spring可以选在通过注解注入特定参数,比较繁琐一点,也可以选择strus2的方式,不配置就是自动注入,签名的session级别的处理很好,让sesssion很清晰
这点我觉得spring比struts2好,具体可以参见资料http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/

3.视图处理角度
struts2 valuestack以及配套的OGNL很强大,但jstl貌似是主流,ognl附带的调用什么方法,view层总觉得被破坏了
spring通过model方式也是不错,非常灵活,要呈现的东西放入model,只不过需要定义好一些起名字的规则,不象struts2,具体参数是在action里面的

4.异常处理角度
spring的异常可以自己配置,也可以实用他的那个类似<global-exception-mappings> 的东东,也可以有自己写自己的异常处理类
分为全局异常和包异常处理,但是不需要实现框架什么接口,spring则需要实现HandlerExceptionResolver如下

// 这里catch住controller抛出的异常,使用持有的ExceptionResolver处理,当没有配置自己的处理器时,程序会将异常继续往上抛出,最终交给我们的容器处理  
            catch (Exception ex) {  
                Object handler = (mappedHandler != null ? mappedHandler.getHandler() : null);  
                mv = processHandlerException(processedRequest, response, handler, ex);  
                errorView = (mv != null);  
            }  

        }  
// 当没有配置ExceptionResolver时,异常将到达这里,最终抛出  
        catch (Exception ex) {  
            // Trigger after-completion for thrown exception.  
            triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, ex);  
            throw ex;  
        }  
        catch (Error err) {  
            ServletException ex = new NestedServletException("Handler processing failed", err);  
            // Trigger after-completion for thrown exception.  
            triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, ex);  
            throw ex;  
        }  


//异常将会轮流来处理这个
protected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response,
			Object handler, Exception ex) throws Exception {

		// Check registered HandlerExceptionResolvers...
		ModelAndView exMv = null;
		for (HandlerExceptionResolver handlerExceptionResolver : this.handlerExceptionResolvers) {
			exMv = handlerExceptionResolver.resolveException(request, response, handler, ex);
			if (exMv != null) {
				break;
			}
		}

struts2不能获取独特信息,只能搞个异常处理类来配置,但是strusts2的拦截起却给了获取处理流程信息,做异常处理的可能


4.跟spring框架的融合
springMvc与spring一家人,虽然spring是百搭风范
具体:spring test很爽,可以测试action
struts2通过插件来整合,具体哪里不如springmvc暂时没发现
 
6.闲扯--特殊需求扩展满足如何,热门restful跟的如何?
struts2有插件可以做restful,这也说明strus2的插件可以做到一些特殊的事情,spring也可以支持restful方式,虽然我们现在做的是互联网项目,还是没转restful,两点,理解不够,转变困难,观望学习中




分享到:
评论

相关推荐

    SpringMVC与struts2比较

    SpringMVC与struts2比较及技术特点

    简单了解SpringMVC与Struts2的区别

    SpringMVC与Struts2的区别 SpringMVC和Struts2都是流行的Java Web框架,但它们之间存在着许多区别。下面我们将对比SpringMVC和Struts2的主要区别,帮助开发者更好地选择合适的框架。 首先,Struts2是类级别的拦截...

    springmvc、struts2区别、mybatis、hibernate区别

    struts2介绍、和springmvc对比,mybatis介绍和hibernate对比

    SpringMVC与struts的区别

    SpringMVC与Struts的区别 SpringMVC是一款优秀的MVC框架,由于其发布3.0版本后,现在有越来越多的团队选择了Spring3 MVC作为MVC的框架。SpringMVC结构简单,灵活性较高,性能也很优秀。下面我们将详细讲解SpringMVC...

    SSM-SpringMVC-Struts2基础框架

    SSM-SpringMVC-Struts2基础框架

    springmvc-struts

    这些库的组合使用,可以构建一个功能强大的Java Web应用,通过SpringMVC处理请求,Struts(尤其是Struts2)提供额外的MVC功能,MyBatis作为数据访问层处理数据库操作,而JUnit则帮助进行单元测试,确保整个系统的...

    springMVC+struts+hibernate

    2. 集成Hibernate,配置SessionFactory和DataSource,建立对象与数据库的映射。 3. 配置Spring MVC,定义DispatcherServlet,设置视图解析器和处理器映射器。 4. 将Struts集成到Spring中,使用Spring管理Action和...

    springmvc+struts+mybatis项目学习

    Struts2还支持OGNL表达式语言,用于在Action与视图之间传递数据。 MyBatis是一个优秀的持久层框架,它简化了SQL操作,允许开发者直接编写SQL语句,避免了过多的ORM(对象关系映射)操作。MyBatis通过XML配置文件或...

    springmvc+mybatis面试题

    【SpringMVC与Struts2的区别】 1. 入口不同:SpringMVC的入口是DispatcherServlet(前端控制器),而Struts2的入口是Filter(过滤器)。 2. 开发方式:SpringMVC基于方法开发,参数通过方法形参传递;Struts2基于类...

    Java面试题51.SpringMVC和Struts2的不同.mp4

    Java面试题51.SpringMVC和Struts2的不同.mp4

    springMVC与Structs2的区别

    ### SpringMVC与Struts2的主要区别 #### 一、URL映射的处理方式 - **SpringMVC**: 在URL映射方面,SpringMVC采用了更为优雅的方式。它通过注解(如`@RequestMapping`)来指定URL路径,使得开发者能够以更简洁的...

    Spring4,SpringMVC,Struts,Hibernate,Maven,Mybatis学习资料

    Struts2是其最新版本,采用Model-View-Controller设计模式,提供了一套完整的解决方案,包括Action、Interceptor、Result等概念,使得开发者可以更方便地处理请求和响应。 4. Hibernate:Hibernate是一个对象关系...

    SpringMVC与hibernate整合12实例

    本文将深入探讨SpringMVC与Hibernate整合的12个实例,同时也会提及Struts2的MVC模式,以及Spring MVC中的注解使用。 首先,SpringMVC是Spring框架的一部分,它为开发可测试和模块化的Web应用程序提供了强大的支持。...

    Java SpringMVC 学习路线.pdf

    在对比SpringMVC与Struts2时,可以发现两者在设计思想和实现细节上有所区别。SpringMVC作为新起之秀,在市场使用率上已经超过了Struts2。SpringMVC的控制器是基于方法级别的拦截,而Struts2则是基于类级别的拦截。...

    吴天雄--SpringMVC笔记.doc

    3. **SpringMVC 与 Struts2 的比较** - 入口不同:SpringMVC 由 Servlet 控制,Struts2 通过 Filter 实现。 - 设计模式:SpringMVC 基于方法设计,而 Struts2 基于类。 - 性能:SpringMVC 因为基于方法设计,可能...

    八、SpringMVC

    SpringMVC与Struts2运行流程对比 SpringMVC和Struts2都是基于MVC架构的Web应用程序框架,但它们的运行流程有所不同。SpringMVC的运行流程主要包括以下几个步骤: 1. 客户端请求:客户端发送请求到服务器。 2. ...

    maven+(springmvc,mybatis,struts2,hibernate)两两整合

    整合Struts2与MyBatis或Hibernate时,Struts2的动作类(Action)接收请求并调用Service层,Service层再通过MyBatis或Hibernate操作数据库。 整合步骤通常包括以下部分: - 配置POM.xml文件:添加所需框架的依赖。 -...

    springmvc第一天课堂笔记.docx

    #### 六、SpringMVC与Struts2的区别 1. **配置方式**:SpringMVC倾向于使用基于注解的方式进行配置,而Struts2更多采用XML配置文件。 2. **架构模式**:SpringMVC遵循经典的MVC架构模式,而Struts2采用了拦截器架构...

    springmvc学习第一天

    #### 六、SpringMVC与Struts2的区别 - **架构设计**:SpringMVC遵循典型的MVC架构,而Struts2则采用了拦截器架构。 - **性能表现**:SpringMVC通常被认为在性能方面优于Struts2。 - **配置方式**:SpringMVC倾向于...

    springmvc入门参数绑定ssm整合

    六、SpringMVC与Struts2比较 SpringMVC和Struts2都是流行的Web应用程序框架,但它们有很多不同之处。SpringMVC基于MVC模式,Struts2基于MVC模式,但Struts2更加注重于WEB-INF下的配置文件。SpringMVC更加灵活和可...

Global site tag (gtag.js) - Google Analytics