专栏首页王二麻子IT技术交流园地《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结

《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结

到目前为止我们已经大概学习了StringMVC的执行流程,以及详细的处理器映射器和处理器适配器的执行流程,并可以自己写一个配置方式开发的小Demo了。今天我们来总结一下实现一个Controller的几种方法。

一、实现Controller接口

/**
 * 要实现Controller接口,这样就算是一个springmvc的Controller了。
 * @author Jonas
 *
 */
public class MyController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("message","hello spring mvc world");
        mv.setViewName("welcome");
        return mv;
    }

}

 这种方式采用的适配器是SimpleControllerHandlerAdapter。

二、实现HttpRequestHandler接口

public class HelloController implements HttpRequestHandler {

 
    @Override

    public void handleRequest(HttpServletRequest request,

        HttpServletResponse response) throws ServletException, IOException {

        request.setAttribute("message", "Hello HttpRequestHandler world");

        request.getRequestDispatcher("/WEB-INF/jsp/welcome.jsp").forward(request, response);

    }

 

}    

这种方式和第一种完全不一样,该方式采用的适配器为HttpRequestHandlerAdapter。该类的handleRequest方法返回值为null,更多的是由程序员来实现的。比如上方的跳转页面。

三、继承AbstractController抽象类

public class MyController1 extends AbstractController {

	@Override

	protected ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

}

该方式和第一种一样,都使用了SimpleControllerHandlerAdapter。不同的一点在于该方式采用了一种模版方法的方式进行实现。该方法可以限制HTTP的提交请求方式。在springmvc.xml中注册处理器的时候,添加property来进行注入属性。如下:

<!-- 注册SpringMVC处理器 -->

<bean id="myController" class="cn.wechatbao.controller.MyController1">

    <property name="supportedMethods" value="POST"></property>

</bean>

以上设置当前controller只支持POST请求。supportedMethods属性来自于AbstractController的父类WebContentGenerator类。

public abstract class AbstractController extends WebContentGenerator implements Controller {

    //...

}

我们打开WebContentGenerator类,如下:

四、继承MultiActionController类

public class MyController2 extends MultiActionController {

    public ModelAndView doFirst(HttpServletRequest request,
            HttpServletResponse response){
        ModelAndView mv = new ModelAndView();
        mv.addObject("message","hello first world");
        mv.setViewName("welcome");
        return mv;
    }
    
    public ModelAndView doSecond(HttpServletRequest request,
            HttpServletResponse response){
        ModelAndView mv = new ModelAndView();
        mv.addObject("message","hello second world");
        mv.setViewName("welcome");
        return mv;
    }

}

springmvc.xml中需要如下配置:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/multiAction/*.do">myController</prop>
        </props>
    </property>
</bean>

<!-- 注册SpringMVC处理器 -->
<bean id="myController2" class="cn.wechatbao.controller.MyController2"></bean>

这样就实现了动态路径访问,原因是MultiActionController类内部使用了一个名叫InternalPathMethodNameResolver的内部方法名称路径解析器。该解析器将方法名作为资源名称进行解析,意味着,我们提交请求时要将方法名作为资源名称出现。如下:

http://localhost:8080/SpringMVC/multiAction/doFirst.do

http://localhost:8080/SpringMVC/multiAction/doSecond.do

但是该方法在Spring4.3以后就废弃了。不建议使用了,官方的解释为in favor of annotation-driven handler methods有利于注解驱动处理程序的方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器

    之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView、...

    I Tech You_我教你
  • 《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来

    【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据 库。同时,作为后台开发的...

    I Tech You_我教你
  • 《项目架构那点儿事》——浅析web层struts2的构建

    【前言】所谓快速开发,实质上为了节省项目的开支成本,减少程序员的开发时 间,固然就形成了种种二次封装的框架,也就是造轮子,然后我们的程序就按照这个轮子去画瓢,这...

    I Tech You_我教你
  • 简述CGLIB常用API

    CGLIB,即Code Generation Library,是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(例如Spring)中,用以提供方法拦截...

    Throwable
  • Android中的Proguard使用

    之前介绍了如何使用命令行将Jar包根据配置文件进行ProGuard,以及ProGuard的过程,会遇到的问题等。接下来会介绍常用的ProGuard如何配置参数。...

    None_Ling
  • android canvas使用line画半圆

    本文实例为大家分享了android canvas使用line画半圆具体代码,供大家参考,具体内容如下

    砸漏
  • RestTemplate + okhttp 实现远程调用

    风间影月
  • Spring入门:The IoC Container,实践篇(上)

    Spring 框架的 IoC 容器(Inversion of Control,Ioc)是 Spring 框架中最基础、最重要的部分。Ioc 也被称为依赖注入(D...

    WEBJ2EE
  • scrapy自定义重试方法

    Scrapy是自带有重试的,但一般是下载出错才会重试,当然你可以在Middleware处来完成你的逻辑。这篇文章主要介绍的是如何在spider里面完成重试。使用...

    小歪
  • Spring boot中使用aop详解

    aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀的解决方案。

    天涯泪小武

扫码关注云+社区

领取腾讯云代金券