为什么枚举要实现接口?
341
2022-08-26
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 ModeLxbtdlAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
return new ModelAndView("/view/index", "message", "Hello,我是通过实现接口定义的一个控制器");
}
}
springmvc-servlet.xml
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xmlns:context="http://springframework.org/schema/context" xmlns:mvc="http://springframework.org/schema/mvc" xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd http://springframework.org/schema/context http://springframework.org/schema/context/spring-context-4.3.xsd http://springframework.org/schema/mvc http://springframework.org/schema/mvc/spring-mvc-4.3.xsd"> class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
xmlns:xsi="http://w3.org/2001/XMLSchema-instance" xmlns:context="http://springframework.org/schema/context"
xmlns:mvc="http://springframework.org/schema/mvc"
xsi:schemaLocation="http://springframework.org/schema/beans
http://springframework.org/schema/beans/spring-beans.xsd
http://springframework.org/schema/context
http://springframework.org/schema/context/spring-context-4.3.xsd
http://springframework.org/schema/mvc
http://springframework.org/schema/mvc/spring-mvc-4.3.xsd">
class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
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"%>
${message}
运行结果
方法二:使用注解@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加上支持注解
运行结果
详谈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只控制部分设备,并且只发送汇聚过后的信息到逻辑控制服务器,逻辑控制服务器了解全网的拓扑结构,来达到分布式控http://制的目的,从而使整个方案具有高度可扩展性。
下图是使用Onix controller来组网的分布式架构图
三、FloodLight
FloodLight是Big Switch公司的Big Network Controller的开源版,Big Switch最初就是做的这个开源的controller,后来才基于开源的controller又开发了商业版的controller。
FloodLight的内核是使用java编写以便http://支持跨平台,提供北向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插件等。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~