关闭

spring mvc的Controller ( 不断补充)

标签: springmvcclassexceptionbeanhashmap
1176人阅读 评论(0) 收藏 举报
分类:

 控制器是mvc模式中非常重要的部分。

Spring中org.springframework.web.portlet.mvc 包有10种controller :



Spring中org.springframework.web.servlet.mvc包有13种controller :



一 :Controller接口

Spring中最基本的是org.springframework.mvc.Controller接口。

public   interface  Controller  {
          ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) 
throws  Exception;
}

这个接口非常的简单,只有一个可以返回适当Model和View的请求处理方法。除了这个接口Spring还提供了一些该接口的实现,包括了一些常用的功能方法。

二 :抽象类 AbstractController

public   abstract   class  AbstractController  extends  WebContentGenerator  implements  Controller  {
          .
       
protected   abstract  ModelAndView  handleRequestInternal  (HttpServletRequest request, HttpServletResponse response)  throws  Exception;
}

AbstractController 提供了一个构建Controller的基础。AbstractController继承了WebContentGenerator并实现了 Controller接口。这样,在AbstractController中就具备了以下的功能。

如果你使用AbstractController来做为一个基类的话(不推荐),你需要override一下handleRequestInternal方法,填充你的代码,返回一个ModelAndView对象。例如:

public   class  SampleController  extends  AbstractController  {
    
public  ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response)  throws  Exception  {
                   ModelAndView mav 
=   new  ModelAndView( " foo " new  HashMap());
                       return mav;
    }

}

< bean id = " sampleController "   class = " samples.SampleController " >
            
< property name = " cacheSeconds " >< value > 120 </ value </ property >
</ bean >


三 :类 ParameterizableViewController

public   class  ParameterizableViewController  extends  AbstractController  {

 ParameterizableViewController,根据指定的View名称,返回View。

protected  ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)  throws  Exception  {
    
return   new  ModelAndView( this .viewName);
}


四 :类 UrlFilenameViewController

public   class  UrlFilenameViewController  extends  AbstractUrlViewController  {

UrlFilenameViewController,从请求URL中得到FileName。

public  ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)  {
     String uri 
=  request.getRequestURI();
     
int  begin  =  uri.lastIndexOf( ' / ' );
     
if  (begin  ==   - 1 {
        begin 
=   0 ;
     }
else   {
        begin
++ ;
     }

     
int  end;
     
if  (uri.indexOf( " ; " !=   - 1 {
        end 
=  uri.indexOf( " ; " );
     }
else   if  (uri.indexOf( " ? " !=   - 1 {
        end 
=  uri.indexOf( " ? " );
     }
else   {
        end 
=  uri.length();
     }

     String fileName 
=  uri.substring(begin, end);
     
if  (fileName.indexOf( " . " !=   - 1 {
        fileName 
=  fileName.substring( 0 , fileName.lastIndexOf( " . " ));
     }


     
return   new  ModelAndView(fileName);
}

五 :类 MultiActionController

这个Controller在一个独立的包中,org.springframework.web.mvc.multiaction。

public   class  MultiActionController  extends  AbstractController  implements  LastModified   {

}

你可以把多个动作集中到这个Controller中。当你需要大量公用的功能在一个Controller中时,这个Controller是很好的选择。你可以子类化MultiActionController,也可以使用MethodNameResolver。

MethodNameResolver :

当接受请求的时候MultiActionController需要调用一个处理该请求的方法,你可以自己定义个解决方法,通过配置文件中指定的参数名称找到这个方法,方法定义必需使用以下格式:

ModelAndView actionName(HttpServletRequest, HttpServletResponse);

此外你也可以自己定义一个异常类来处理异常,格式为:

ModelAndView anyMeaningfulName(HttpServletRequest, HttpServletResponse, ExceptionClass);

Spring提供了MethodNameResolver的三种方式:

1 : ParameterMethodNameResolver,这个可以根据请求的参数来确定一个需要调用的方法。
例如,http://www.sf.net/index.view?testParam=testIt,这个请求会调用名称为testIt的处理方法。

2 : InternalPathMethodNameResolver,这个可以根据请求的路径名称来调用相应的方法。
例如,http://www.sf.net/testing.view,这个请求会调用testing方法。

3 : PropertiesMethodNameResolver,这个可以根据一个URLs 映射列表来调用相应的方法。
例如,如果定义了/index/welcome.html=doIt,那么当请求为/index/welcome.html时,会调用doIt方法。在定义URLs时可以使用通配符。/**/welcom?.html

例1 :

<bean id="paramMultiController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    
<property name="methodNameResolver"><ref bean="paramResolver"/></property>
    
<property name="delegate"><ref bean="sampleDelegate"/>
</bean>

<bean id="paramResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    
<property name="paramName"><value>method</value></property>
</bean>

<bean id="sampleDelegate" class="samples.SampleDelegate"/>

SampleDelegate.java 代码

public class SampleDelegate {

    
public ModelAndView retrieveIndex( HttpServletRequest req, HttpServletResponse resp) {
        rerurn 
new ModelAndView("index""date"new Long(System.currentTimeMillis()));
    }


}

例3 :

<bean id="paramMultiController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    
<property name="methodNameResolver"><ref bean="propsResolver"/></property>
    
<property name="delegate"><ref bean="sampleDelegate"/>
</bean>

<bean id="propsResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    
<property name="mappings">
        
<props>
            
<prop key="/index/welcome.html">retrieveIndex</prop>
            
<prop key="/**/notwelcome.html">retrieveIndex</prop>
            
<prop key="/*/user?.html">retrieveIndex</prop>
        
</props>
    
</property>
</bean>



六 :抽象类 BaseCommandController

public abstract class BaseCommandController extends AbstractController {

这个控制器简化了struts中的操作,可以直接和数据对象进行交互。例如把HttpServletRequest得到的参数动态绑定到dataobject上。
AbstractCommandController,通过这个可以创建你自己的Command Comtroller。它继承了BaseCommandController,可以设置commandObject来保存数据,可以指定验证类。

 

 出自:http://www.blogjava.net/liuwentao253/archive/2007/02/02/97544.html
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109673次
    • 积分:1427
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:116篇
    • 译文:0篇
    • 评论:18条
    最新评论