spring mvc的Controller ( 不断补充)

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

 控制器是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

相关文章推荐

Spring MVC学习(四)-------Controller接口控制器详解2

4.5、ServletForwardingController 将接收到的请求转发到一个命名的servlet,具体示例如下:   java代码: Java代码   ...

Spring MVC详解(四)Controller接口控制器详解 (4)

4.12、ParameterizableViewController 参数化视图控制器,不进行功能处理(即静态视图),根据参数的逻辑视图名直接选择需要展示的视图。 Java代码    ...

Spring MVC Controller 支持的返回类型

Spring MVC Controller中@RequestMapping的返回类型

spring mvc Controller 控制器 url 在html绑定

spring mvc Controller 控制器 url 在html绑定

Spring MVC Controller

原文例子:http://www.mkyong.com/tutorials/spring-mvc-tutorials/ MultiActionController : MultiActionCont...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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