欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?MVC如何實(shí)現(xiàn)接口Controller定義控制器

 更新時(shí)間:2022年02月22日 10:27:05   作者:韋邦杠  
這篇文章主要介紹了Spring?MVC如何實(shí)現(xiàn)接口Controller定義控制器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

實(shí)現(xiàn)接口Controller定義控制器

控制器提供訪問應(yīng)用程序的行為,通常通過服務(wù)接口定義或注解定義兩種方法實(shí)現(xiàn)。 控制器解析用戶的請(qǐng)求并將其轉(zhuǎn)換為一個(gè)模型。在Spring MVC中一個(gè)控制器可以包含多個(gè)Action(動(dòng)作、方法)。

方法一:實(shí)現(xiàn)接口Controller定義控制器

Controller是一個(gè)接口,處在包org.springframework.web.servlet.mvc下,接口中只有一個(gè)未實(shí)現(xiàn)的方法,具體的接口

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,我是通過實(shí)現(xiàn)接口定義的一個(gè)控制器");
    }
}

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不處理靜態(tài)資源 -->
<mvc:default-servlet-handler />
<!-- 支持mvc注解驅(qū)動(dòng) -->
<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>

運(yùn)行結(jié)果

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

org.springframework.stereotype.Controller注解類型用于聲明Spring類的實(shí)例是一個(gè)控制器(在講IOC時(shí)還提到了另外3個(gè)注解);Spring可以使用掃描機(jī)制來找到應(yīng)用程序中所有基于注解的控制器類,為了保證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","這是通過注解的一個(gè)控制器");
        return "/view/index";
    }
}

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

<!-- 自動(dòng)掃描包,實(shí)現(xiàn)支持注解的IOC -->
<context:component-scan base-package="com.wbg.spring" />

運(yùn)行結(jié)果

詳談Controller(控制器)

一、controller架構(gòu)介紹

controller是一個(gè)運(yùn)行在獨(dú)立的服務(wù)器上的軟件程序,實(shí)現(xiàn)的語(yǔ)言沒有規(guī)定,可以運(yùn)行在不同的操作系統(tǒng)上。目前,controller分為兩類,一類是廣義的controller,也叫SDN controller,支持多種協(xié)議,OpenFlow就是其中一種。這種controller奉行控制和轉(zhuǎn)發(fā)分離的SDN原則,但是可以通過別的南向接口協(xié)議去控制轉(zhuǎn)發(fā)設(shè)備,而opendaylight組織研制的就是SDN controller;第二類是協(xié)議的controller,也叫OpenFlow controller,OpenFlow是唯一支持的協(xié)議。

各大廠商在SDN市場(chǎng)爭(zhēng)奪,更多是對(duì)controller定義權(quán)和控制權(quán)的爭(zhēng)奪,反而交換機(jī)爭(zhēng)奪沒那么激烈。這是因?yàn)槲磥砭W(wǎng)絡(luò)是應(yīng)用為主,最終的趨勢(shì)是底層都將被屏蔽掉,網(wǎng)絡(luò)服務(wù)于應(yīng)用。一旦SDN發(fā)展起來,controller就是SDN的核心,在controller有發(fā)言權(quán),在SDN市場(chǎng)就有發(fā)言權(quán)。

controller有很多個(gè)屬性,要分析一個(gè)controller,就需要分析每一個(gè)屬性:

北向接口

  • 每個(gè)controller都有面向用戶程序的編程接口,也就是北向接口,北向接口的差異性很大,最簡(jiǎn)單,最傳統(tǒng)的北向接口是CLI,SNMP,目前流行的是REST API

集成的服務(wù)和應(yīng)用

  • controller并非僅僅提供編程接口,還會(huì)提供各種各樣的應(yīng)用和服務(wù),比如提供了路由協(xié)議,訪問控制,QOS,防火墻等豐富的網(wǎng)絡(luò)功能,當(dāng)然也有簡(jiǎn)單的controller只提供控制接口。通常大廠商都會(huì)提供一些應(yīng)用和服務(wù),這將是用來提供差異化服務(wù)的重要手段,也是廠商想控制市場(chǎng)的重要原因之一。

南向接口

  • 所有的OpenFlow controller自然支持OpenFlow這樣一個(gè)南向接口,而SDN controller就不同了,除了OpenFlow,還支持別的,比如SNMP,NetConf,OF-Config等。

控制方式

  • 很多人認(rèn)為SDN就是集中控制的,所以controller都是集中式controller,其實(shí)不然,集中式的controller明顯有可擴(kuò)展性的問題,當(dāng)網(wǎng)絡(luò)規(guī)模比較大的時(shí)候,一個(gè)controller根本搞不定,所以必須有分布式的controller,多個(gè)controller一起協(xié)同完成對(duì)網(wǎng)絡(luò)的控制工作,之間的協(xié)調(diào)通常通過全局的控制邏輯服務(wù)器來負(fù)責(zé)。

對(duì)物理和虛擬設(shè)備的通用管理

  • 無論是OpenFlow controller還是SDN controller,管理對(duì)象都是包括物理設(shè)備,虛擬設(shè)備,理論上的控制方式是統(tǒng)一的,但是目前并不是每個(gè)controller都是如此。

支持的OpenFlow標(biāo)準(zhǔn)

  • 無論是OpenFlow controller還是SDN controller,都可能支持不同的OpenFlow標(biāo)準(zhǔn)。

二、Onix分布式controller模型

很多controller都是基于Onix模型搭建起來的,包括nicira的NVP中所用的controller和Google的基于OpenFlow的B4 WAN網(wǎng)所用的controller,以及一些別的公司私有的分布式controller。

這是一個(gè)分布式架構(gòu)的controller模型,是被用來設(shè)計(jì)控制大型網(wǎng)絡(luò)的,具有很強(qiáng)的可擴(kuò)展性。它通過引入control logic控制邏輯,controller和物理設(shè)備三層架構(gòu),每個(gè)controller只控制部分設(shè)備,并且只發(fā)送匯聚過后的信息到邏輯控制服務(wù)器,邏輯控制服務(wù)器了解全網(wǎng)的拓?fù)浣Y(jié)構(gòu),來達(dá)到分布式控制的目的,從而使整個(gè)方案具有高度可擴(kuò)展性。

下圖是使用Onix controller來組網(wǎng)的分布式架構(gòu)圖

三、FloodLight

FloodLight是Big Switch公司的Big Network Controller的開源版,Big Switch最初就是做的這個(gè)開源的controller,后來才基于開源的controller又開發(fā)了商業(yè)版的controller。

FloodLight的內(nèi)核是使用java編寫以便支持跨平臺(tái),提供北向API,北向API支持java和python,內(nèi)部集成了一些應(yīng)用,比如LLDP。

四、Ryu

Ryu是日本NTT一個(gè)實(shí)驗(yàn)室發(fā)起的開源controller項(xiàng)目,是基于python開發(fā)的。不僅支持OpenFlow,還支持一些別的控制協(xié)議,比如ON-Config等。

五、NOX/POX

NOX最初是nicira公司開發(fā)的,為網(wǎng)絡(luò)操作系統(tǒng),network operating system,2008年貢獻(xiàn)給開源社區(qū),是世界上第一個(gè)OpenFlow controller,是基于C++的,這個(gè)controller伴隨OpenFlow而生,OpenFlow只是NOX項(xiàng)目的一個(gè)副產(chǎn)品。

除了OpenFlow外,還提供了一些應(yīng)用工具,包括拓?fù)浒l(fā)現(xiàn),網(wǎng)絡(luò)可視化,網(wǎng)絡(luò)監(jiān)控等。

POX是NOX的python版本,除了用的編程語(yǔ)言不同,POX還比NOX多了很多功能。

六、Trema

Trema是NEC開發(fā)的一個(gè)開源controller,是用C和python寫的,目標(biāo)是打造一個(gè)OpenFlow programming framework即一個(gè)基于OpenFlow的可編程框架。Trema也提供了不少應(yīng)用和服務(wù),包括拓?fù)浒l(fā)現(xiàn)LLDP,flow管理,路由交換,OpenStack插件等。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java并發(fā)編程JUC CountDownLatch線程同步

    java并發(fā)編程JUC CountDownLatch線程同步

    這篇文章主要介紹CountDownLatch是什么、CountDownLatch 如何工作、CountDownLatch 的代碼例子來展開對(duì)java并發(fā)編程JUC CountDownLatch線程同步,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • Java并發(fā)LinkedBlockingQueue源碼分析

    Java并發(fā)LinkedBlockingQueue源碼分析

    這篇文章主要為大家介紹了Java并發(fā)LinkedBlockingQueue源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • @validated注解異常返回JSON值方式

    @validated注解異常返回JSON值方式

    這篇文章主要介紹了@validated注解異常返回JSON值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • RocketMQ的順序消費(fèi)機(jī)制詳解

    RocketMQ的順序消費(fèi)機(jī)制詳解

    這篇文章主要介紹了RocketMQ的順序消費(fèi)機(jī)制詳解,順序消息是指對(duì)于一個(gè)指定的?Topic?,消息嚴(yán)格按照先進(jìn)先出(FIFO)的原則進(jìn)行消息發(fā)布和消費(fèi),即先發(fā)布的消息先消費(fèi),后發(fā)布的消息后消費(fèi),,需要的朋友可以參考下
    2023-10-10
  • Hadoop源碼分析四遠(yuǎn)程debug調(diào)試

    Hadoop源碼分析四遠(yuǎn)程debug調(diào)試

    本篇是Hadoop源碼分析系列文章第四篇,主要介紹一下Hadoop的遠(yuǎn)程debug調(diào)試步驟,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • Spring中的BeanFactory工廠詳細(xì)解析

    Spring中的BeanFactory工廠詳細(xì)解析

    這篇文章主要介紹了Spring中的BeanFactory工廠詳細(xì)解析,Spring的本質(zhì)是一個(gè)bean工廠(beanFactory)或者說bean容器,它按照我們的要求,生產(chǎn)我們需要的各種各樣的bean,提供給我們使用,需要的朋友可以參考下
    2023-12-12
  • Collections工具類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Collections工具類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Collections工具類提供了大量針對(duì)Collection/Map的操作。這篇文章主要介紹了Collections工具類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-04-04
  • 一文搞懂Java中的序列化與反序列化

    一文搞懂Java中的序列化與反序列化

    序列化是將對(duì)象轉(zhuǎn)換成二進(jìn)制字節(jié)流的過程;反序列化是從二進(jìn)制字節(jié)流中恢復(fù)對(duì)象的過程。文中降通過示例詳解二者的使用與區(qū)別,需要的可以參考一下
    2022-08-08
  • 詳解JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式

    詳解JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式

    Java?DataBase?Connectivity是將Java與SQL結(jié)合且獨(dú)立于特定的數(shù)據(jù)庫(kù)系統(tǒng)的應(yīng)用程序編程接口,一種可用于執(zhí)行SQL語(yǔ)句的JavaAPI。本文主要介紹了JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式,需要的可以參考一下
    2022-09-09
  • 用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解

    用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解

    這篇文章主要介紹了用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論