Spring MVC如何实现接口Controller定义控制器

目录
  • 实现接口Controller定义控制器
    • 方法一:实现接口Controller定义控制器
    • 方法二:使用注解@Controller定义控制器
  • 详谈Controller(控制器)
    • 一、controller架构介绍
    • 二、Onix分布式controller模型
    • 三、FloodLight
    • 四、Ryu
    • 五、NOX/POX
    • 六、Trema

实现接口Controller定义控制器

控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现。 控制器解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器可以包含多个Action(动作、方法)。

方法一:实现接口Controller定义控制器

Controller是一个接口,处在包org.springframework.web.servlet.mvc下,接口中只有一个未实现的方法,具体的接口

FooController.java

package com.wbg.spring;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FooController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
          return new ModelAndView("/view/index", "message", "Hello,我是通过实现接口定义的一个控制器");
    }
}

springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!-- 支持mvc注解驱动 -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
</bean>
<bean name="/foo" class="com.wbg.spring.FooController"></bean>
</beans>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Foo</title>
</head>
<body>
${message}
</body>
</html>

运行结果

方法二:使用注解@Controller定义控制器

org.springframework.stereotype.Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外3个注解);Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

Controller02.java

package com.wbg.spring;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Controller02 {
    @RequestMapping("/fs")
    public String index(Model model){
        model.addAttribute("message","这是通过注解的一个控制器");
        return "/view/index";
    }
}

在springmvc-servlet.xml加上支持注解

<!-- 自动扫描包,实现支持注解的IOC -->
<context:component-scan base-package="com.wbg.spring" />

运行结果

详谈Controller(控制器)

一、controller架构介绍

controller是一个运行在独立的服务器上的软件程序,实现的语言没有规定,可以运行在不同的操作系统上。目前,controller分为两类,一类是广义的controller,也叫SDN controller,支持多种协议,OpenFlow就是其中一种。这种controller奉行控制和转发分离的SDN原则,但是可以通过别的南向接口协议去控制转发设备,而opendaylight组织研制的就是SDN controller;第二类是协议的controller,也叫OpenFlow controller,OpenFlow是唯一支持的协议。

各大厂商在SDN市场争夺,更多是对controller定义权和控制权的争夺,反而交换机争夺没那么激烈。这是因为未来网络是应用为主,最终的趋势是底层都将被屏蔽掉,网络服务于应用。一旦SDN发展起来,controller就是SDN的核心,在controller有发言权,在SDN市场就有发言权。

controller有很多个属性,要分析一个controller,就需要分析每一个属性:

北向接口

  • 每个controller都有面向用户程序的编程接口,也就是北向接口,北向接口的差异性很大,最简单,最传统的北向接口是CLI,SNMP,目前流行的是REST API

集成的服务和应用

  • controller并非仅仅提供编程接口,还会提供各种各样的应用和服务,比如提供了路由协议,访问控制,QOS,防火墙等丰富的网络功能,当然也有简单的controller只提供控制接口。通常大厂商都会提供一些应用和服务,这将是用来提供差异化服务的重要手段,也是厂商想控制市场的重要原因之一。

南向接口

  • 所有的OpenFlow controller自然支持OpenFlow这样一个南向接口,而SDN controller就不同了,除了OpenFlow,还支持别的,比如SNMP,NetConf,OF-Config等。

控制方式

  • 很多人认为SDN就是集中控制的,所以controller都是集中式controller,其实不然,集中式的controller明显有可扩展性的问题,当网络规模比较大的时候,一个controller根本搞不定,所以必须有分布式的controller,多个controller一起协同完成对网络的控制工作,之间的协调通常通过全局的控制逻辑服务器来负责。

对物理和虚拟设备的通用管理

  • 无论是OpenFlow controller还是SDN controller,管理对象都是包括物理设备,虚拟设备,理论上的控制方式是统一的,但是目前并不是每个controller都是如此。

支持的OpenFlow标准

  • 无论是OpenFlow controller还是SDN controller,都可能支持不同的OpenFlow标准。

二、Onix分布式controller模型

很多controller都是基于Onix模型搭建起来的,包括nicira的NVP中所用的controller和Google的基于OpenFlow的B4 WAN网所用的controller,以及一些别的公司私有的分布式controller。

这是一个分布式架构的controller模型,是被用来设计控制大型网络的,具有很强的可扩展性。它通过引入control logic控制逻辑,controller和物理设备三层架构,每个controller只控制部分设备,并且只发送汇聚过后的信息到逻辑控制服务器,逻辑控制服务器了解全网的拓扑结构,来达到分布式控制的目的,从而使整个方案具有高度可扩展性。

下图是使用Onix controller来组网的分布式架构图

三、FloodLight

FloodLight是Big Switch公司的Big Network Controller的开源版,Big Switch最初就是做的这个开源的controller,后来才基于开源的controller又开发了商业版的controller。

FloodLight的内核是使用java编写以便支持跨平台,提供北向API,北向API支持java和python,内部集成了一些应用,比如LLDP。

四、Ryu

Ryu是日本NTT一个实验室发起的开源controller项目,是基于python开发的。不仅支持OpenFlow,还支持一些别的控制协议,比如ON-Config等。

五、NOX/POX

NOX最初是nicira公司开发的,为网络操作系统,network operating system,2008年贡献给开源社区,是世界上第一个OpenFlow controller,是基于C++的,这个controller伴随OpenFlow而生,OpenFlow只是NOX项目的一个副产品。

除了OpenFlow外,还提供了一些应用工具,包括拓扑发现,网络可视化,网络监控等。

POX是NOX的python版本,除了用的编程语言不同,POX还比NOX多了很多功能。

六、Trema

Trema是NEC开发的一个开源controller,是用C和python写的,目标是打造一个OpenFlow programming framework即一个基于OpenFlow的可编程框架。Trema也提供了不少应用和服务,包括拓扑发现LLDP,flow管理,路由交换,OpenStack插件等。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC编程使用Controller接口实现控制器实例代码

    Controller简介 Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分: 1.收集.验证请求参数并绑定到命令对象: 2.将命令对象交给业务对象,由业务对象处理并返回模型数据: 3.返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名). DispatcherServlet,主要负责整体的控制流程的调度部分: 1.负责将请求委托给控制器进行处理: 2.根据控制器返回的逻辑视图名选择具体的视图进行渲染(并把

  • Springmvc Controller接口代码示例

    Spring MVC Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分: 收集.验证请求参数并绑定到命令对象: 将命令对象交给业务对象,由业务对象处理并返回模型数据: 返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名). 1. 继承该接口 Controller接口,重写对应方法,或者采用注解Controller,自定义映射文件 @Controller @RequestMapping("/flight&q

  • controller接口跳转到另一个controller接口的实现

    controller接口跳转到另一个controller接口 @RestController @RequestMapping("/aaa") public class TestController{ @RequestMapping("/test1") public ModelAndView test1(HttpServletResponse response) { ModelAndView view = new ModelAndView(); view.setVie

  • @Controller、@RestController注解区别详解

    @Controller.@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用. 一.@Controller注解 @Controller 是Spring框架提供的注解. @Controller标识的类,该类代表控制器类(控制层/表现层). 这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类

  • Spring MVC如何实现接口Controller定义控制器

    目录 实现接口Controller定义控制器 方法一:实现接口Controller定义控制器 方法二:使用注解@Controller定义控制器 详谈Controller(控制器) 一.controller架构介绍 二.Onix分布式controller模型 三.FloodLight 四.Ryu 五.NOX/POX 六.Trema 实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spri

  • Spring MVC学习笔记之Controller查找(基于Spring4.0.3)

    0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 SpringMVC详细运行流程图 2 SpringMVC初始化过程 2.1 先认识两个类 1.RequestMappingInfo 封装RequestMapping注解 包含HTTP请求头的相关信息 一个实例对应一个RequestMapping注解 2.HandlerMethod 封装Controlle

  • spring mvc利用ajax向controller传递对象的方法示例

    前言 最近因为工作的需要,在写一个基于springmvc+spring+mybatis的项目,其中涉及用ajax向controller发送数据的功能.因为不想使用spring的form标签,所以想看看有没有方法将ajax中的json数据直接转化为controller方法中的对象接收并处理.以下将逐渐介绍各种不同情况下传递json数据并封装的方法,下面话不多说,一起来看看详细的介绍: 基础类型 如果传递的json数据为基础类型(Int,String等)的话,则只需要用@RequestParam标注

  • Spring MVC 使用支付宝接口完成在线支付的示例代码

    项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信. 这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付. 第一步:完善沙箱信息 进入支付宝的开发者中心 就可以看到有个沙箱环境 使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好.支付宝推荐使用RSA2(SHA256)秘钥 把自己的公钥填上去就可以了. 第二步 阅读在线支付开发文档 里面需要的配置信息 对应的使用沙箱环境的信息 第三步 环境搭建 下载服务端SDK

  • Spring mvc Controller和RestFul原理解析

    控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中一个控制器类可以包含多个方法 在Spring MVC中,对于Controller的配置方式有很多种 实现Controller接口 Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法: //实现该接口的类获得控制器功能 public interfa

  • 编写Spring MVC控制器的14个技巧(小结)

    通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出.这样就完成了典型的请求-响应周期的往返.今天整理了一下编写Spring MVC控制器的14个技巧,你今天get到了吗? \(≧▽≦)/ 1.使用@Controller构造型 这是创建可以处理一个或多个请求的控制器类的最简单方法.仅通过用构造型注释一个类@Controller 

  • 详解Spring MVC如何测试Controller(使用springmvc mock测试)

    在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码. 1.什么是mock测试? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法. 2.为什么要使用mock测试? 使用Mock O bject进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如J

  • Spring MVC中的Controller进行单元测试的实现

    目录 导入静态工具方法 初始化MockMvc 执行测试 测试GET接口 测试POST接口 测试文件上传 定义预期结果 写在最后 对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试.具体来讲,是由Spring框架中的spring-test模块提供的实现,详见MockMvc. 如下将详细阐述如何使用MockMvc测试框架实现对“Spring Controller”进行单

  • spring mvc DispatcherServlet之前端控制器架构详解

    前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端.前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架). DispatcherServlet 作为前置控制器是web服务器的入口,是spring mvc最重要的一个类,通过它的生命周期可以加深对web服务器的理解. servlet的生命周期 首先我们回忆一下ser

  • spring mvc常用注解_动力节点Java学院整理

    Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版本虽然发生了很大的变化,但注解的特性却是一直延续下来,并不断扩展,让广大的开发人员的双手变的更轻松起来,这都离不开Annotation的强大作用,今天我们就一起来看看Spring MVC 4中常用的那些注解吧. 1. @Controller Controller控制器是通过服务接口定义的提供访问应用

随机推荐