最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

北向接口

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

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

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

南向接口

  • 所有的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版本,除了用的編程語言不同,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)文章

  • Spring中的Eureka服務(wù)過期詳細(xì)解析

    Spring中的Eureka服務(wù)過期詳細(xì)解析

    這篇文章主要介紹了Spring中的Eureka服務(wù)過期詳細(xì)解析,如果有一些服務(wù)過期了,或者宕機(jī)了,就不會(huì)調(diào)用shutdown()方法,也不會(huì)去發(fā)送請(qǐng)求下線服務(wù)實(shí)例,需要的朋友可以參考下
    2023-11-11
  • Java中Iterator與ListIterator迭代的區(qū)別

    Java中Iterator與ListIterator迭代的區(qū)別

    本文主要介紹了Java中Iterator與ListIterator迭代的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Java圖書管理系統(tǒng),課程設(shè)計(jì)必用(源碼+文檔)

    Java圖書管理系統(tǒng),課程設(shè)計(jì)必用(源碼+文檔)

    本系統(tǒng)采用Java,MySQL 作為系統(tǒng)數(shù)據(jù)庫,重點(diǎn)開發(fā)并實(shí)現(xiàn)了系統(tǒng)各個(gè)核心功能模塊,包括采編模塊、典藏模塊、基礎(chǔ)信息模塊、流通模塊、期刊模塊、查詢模塊、評(píng)論模塊、系統(tǒng)統(tǒng)計(jì)模塊以及幫助功能模塊
    2021-06-06
  • Java使用Redis的方法實(shí)例分析

    Java使用Redis的方法實(shí)例分析

    這篇文章主要介紹了Java使用Redis的方法,接合實(shí)例形式分析了相關(guān)redis驅(qū)動(dòng)包安裝、java連接redis服務(wù)器、數(shù)據(jù)存儲(chǔ)、讀取等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • J2EE驗(yàn)證碼圖片如何生成和點(diǎn)擊刷新驗(yàn)證碼

    J2EE驗(yàn)證碼圖片如何生成和點(diǎn)擊刷新驗(yàn)證碼

    這篇文章主要介紹了J2EE如何生成驗(yàn)證碼圖片如何生成,如何點(diǎn)擊刷新驗(yàn)證碼的相關(guān)方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    這篇文章主要介紹了JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • SpringCloud?Stream?整合RabbitMQ的基本步驟

    SpringCloud?Stream?整合RabbitMQ的基本步驟

    這篇文章主要介紹了SpringCloud?Stream?整合RabbitMQ的基本步驟,從項(xiàng)目介紹到生產(chǎn)者結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • SpringCloud中Eureka的配置及使用講解

    SpringCloud中Eureka的配置及使用講解

    Eureka?服務(wù)注冊(cè)中心,主要用于提供服務(wù)注冊(cè)功能,當(dāng)微服務(wù)啟動(dòng)時(shí),會(huì)將自己的服務(wù)注冊(cè)到?Eureka?Server,這篇文章主要介紹了SpringCloud中Eureka的配置及詳細(xì)使用,需要的朋友可以參考下
    2023-01-01
  • SpringBoot如何讀取配置文件參數(shù)并全局使用

    SpringBoot如何讀取配置文件參數(shù)并全局使用

    這篇文章主要介紹了SpringBoot如何讀取配置文件參數(shù)并全局使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • IDEA?code?template配置和參數(shù)方式

    IDEA?code?template配置和參數(shù)方式

    這篇文章主要介紹了IDEA?code?template配置和參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2024-01-01

最新評(píng)論

化德县| 平罗县| 南阳市| 壤塘县| 徐闻县| 登封市| 法库县| 内江市| 文山县| 青冈县| 西充县| 开鲁县| 舒城县| 双辽市| 门源| 明溪县| 霍林郭勒市| 全椒县| 洛隆县| 元氏县| 崇礼县| 炉霍县| 斗六市| 瑞丽市| 博乐市| 庆阳市| 扶风县| 桃园县| 桦川县| 达拉特旗| 万山特区| 天长市| 赣榆县| 三台县| 友谊县| 许昌市| 霸州市| 托克逊县| 南靖县| 南溪县| 白沙|