Spring Framework MVC 学习感想!

转载 2007年09月11日 18:40:00




其实每个MVC framework的执行过程都是大同小异的,当个request过来时,它都通过一个Servlet来响应request,再根据request的路径名和配置将这个request dispatch给一个Controller执行,最后将之返回配置文件里对应的页面。在Spring MVC里,这个Servlet的名字叫DispatchServlet

1.STRUTS 中被痛批的接口不干净的问题,就是直接把HttpServletRequest之类的对象传到ACTION中,在最新版的Spring Framework MVC1.21中,也有同样的表现. 为什么新出的Spring Framework MVC1.21不象WW2一样的处理呢?刚开始彼为迷惑. 经过仔细分析后,终于想通了,直接HttpServletRequest显然这么做是为了保证ACTION是一个单例. 想一想作为WEB系统,性能何其重要!

Spring Framework MVC的这部分代码如下:  

public  ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException  {   
   ..   
   
return   new  ModelAndView( " hello.jsp " );      
 }
 


2.STRUTS中被痛批的actionFrom的多余问题,在最新版的Spring Framework MVC1.21中,也有同样的表现. 并且更加夸张!下面就是一个类似于actionForm的类.

package  bus;  

public   class  PriceIncrease  {  
   
private   int  percentage;   

   
public   void  setPercentage( int  i)  {        
       percentage 
=  i;      
   }
  
   
   
public   int  getPercentage() {   
       
return  percentage;       
   }
    
}

如果引用呢, 它是在JSP中,显然比STRUTS中的XML配置更加原始,在JSP中是这样的:

< spring:bind path = " priceIncrease.percentage " >   

3.Validator验校:这个简直退回到了STRUTS1.1以前版本的原始状态去了,我们知道STRUTS1.1以后的检校是配XML实现的.而不是写在一个类中. SPRING的验校代码如下:

package  bus; 

import  java.io.Serializable;   
import  org.springframework.validation.Validator;   
import  org.springframework.validation.Errors;   
import  org.apache.commons.logging.Log;   
import  org.apache.commons.logging.LogFactory; 

public   class  PriceIncreaseValidator  implements  Validator 

    
protected   final  Log logger  =  LogFactory.getLog(getClass());   

    
private   int  DEFAULT_MIN_PERCENTAGE  =   0 ;   
    
private   int  DEFAULT_MAX_PERCENTAGE  =   50
    
    
// 2个要验证的字段
     private   int  minPercentage  =  DEFAULT_MIN_PERCENTAGE;   
    
private   int  maxPercentage  =  DEFAULT_MAX_PERCENTAGE; 
    
    
public   boolean  supports(Class clazz)  {   
        
return  clazz.equals(PriceIncrease. class );    
    }
  
    
    
public   void  validate(Object obj, Errors errors)  {   
       PriceIncrease pi 
=  (PriceIncrease) obj;   
       
if  (pi  ==   null {   
           errors.rejectValue(
" percentage " " error.not-specified " null " Value required. " );    
       }
else   {     
           logger.info(
" Validating with  "   +  pi  +   " "   +  pi.getPercentage());   
           
if  (pi.getPercentage()  >  maxPercentage)  {   
                errors.rejectValue(
" percentage " " error.too-high " ,        
                
new  Object[]  { new  Integer(maxPercentage)} " Value too high. " );   
            }
   
           
if  (pi.getPercentage()  <=  minPercentage)  {    
            errors.rejectValue(
" percentage " " error.too-low " ,   new  Object[]  { new  Integer(minPercentage)} , " Value too low. " );
           }
   
       }
   
   }
    
  
   
public   void  setMinPercentage( int  i)  {   
      minPercentage 
=  i;      
   }
      
   
   
public   int  getMinPercentage()  {        
      
return  minPercentage;      
   }
 
   
   
public   void  setMaxPercentage( int  i)  {     
      maxPercentage 
=  i;       
   }
 
   
   
public   int  getMaxPercentage()  {   
      
return  maxPercentage;   
   }
   
}
 

4.表现层标签.SPRING MVC采用jstl. 我认为这个很不错的选择,自已搞一套首选功能不会太好,比如STRUTS的就不太好用.现在即将出现新版的STRUTS正准备用jstl.

5.IOC, 这当然是最好的了,紧密结合SPRING的ICO.但是好处还没有看到,如果正式用于项目,配置文件会大的吓人!

6.TEST,在STRUTS中TEST在以摸拟环境的方式测试是失败的,虽然还有别的选择,SPRING的则这点不错.

Spring MVC是我见过的结构最清晰的MVC Model 2实现。
Action不叫Action,准确地称做Controller;Controller接收request, response参数,干脆利落地返回ModelAndView(其中的Model不是Object类型,而是Map类型,这个有点限制过头)。
其 它的Web Framework中, Action返回值一般都只是一个View Name;Model则需要通过其它的途径(如request.attribute (Struts),Context参数(Maverick),或Action本身的属性数据(Webwork))传递上去。

 

相关文章推荐

深入学习SSH框架(Spring MVC +Spring FrameWork +Hibernate +Spring Security)《一:Servlet原理》

很高兴能和大家一起分享最近的学习成果,这一系列文章主要围绕经典的SSH框架来写的。如有错误之处,敬请指正!

深入解读Spring Framework Web MVC(第五弹:@RequestMapping中的头字段值)

可消费的媒体类型我们可以指定一系列可消费的媒体类型来压缩映射。当Content-Type请求头匹配可消费的媒体类型,才认为这个请求是可映射的。如:@PostMapping(path = "/pets"...

深入解读Spring Framework Web MVC(第二弹:DispatcherServlet详解)

DispatcherServlet简介Spring web MVC框架基于请求驱动,用一个核心Servlet转发请求到对应的Controller。然而Spring的DispatcherServlet并...

Developing a Spring Framework MVC application step-by-step

Developing a Spring Framework MVC application step-by-step Authors Thomas Risberg, Rick ...

深入解读Spring Framework Web MVC(第六弹:定义@RequestMapping处理方法)

@RequestParam将请求参数绑定到方法参数在控制器里,使用@RequestParam可以将请求参数绑定到方法参数。如:@Controller @RequestMapping("/pets") ...

深入解读Spring Framework Web MVC(第一弹:Spring Web MVC概述)

Spring Web MVC简介Spring Web MVC(即模型-视图-控制器)框架是围绕DispatcherServlet而设计的,其支持可配置的handler映射,视图解析,本地化、时区和主题...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)