Swift3.0服務端開發(二) 靜態文件添加、路由配置以及表單提交

来源:http://www.cnblogs.com/ludashi/archive/2017/01/11/6160898.html
-Advertisement-
Play Games

今天博客中就來聊一下Perfect框架的靜態文件的添加與訪問,路由的配置以及表單的提交。雖然官網上有聊靜態文件的訪問的部分,但是在使用Perfect框架來訪問靜態文件時還是有些點需要註意的,這些關鍵點在其官方文檔上並未提出。今天我們要做的事情就是通過瀏覽器訪問靜態文件,然後在靜態文件中使用form表 ...


今天博客中就來聊一下Perfect框架的靜態文件的添加與訪問路由的配置以及表單的提交。雖然官網上有聊靜態文件的訪問的部分,但是在使用Perfect框架來訪問靜態文件時還是有些點需要註意的,這些關鍵點在其官方文檔上並未提出。今天我們要做的事情就是通過瀏覽器訪問靜態文件,然後在靜態文件中使用form表單往指定的路由上進行提交相應的數據。

 

一、靜態文件的添加與訪問

1、未使用Xcode管理的Perfect的靜態文件根目錄的配置

在PHP開發或者Java Web開發中,都有一個根目錄來存儲相應的靜態文件,比如wwwroot, htdoc, webroot等等這些文件。在使用Perfect開發伺服器端時,亦是如此,我們可以在Source目錄中的main.swift中對靜態文件的根目錄進行配置,下方就是我們的配置代碼:

  

配置完成後,如果我們的項目不是用Xcode進行管理的話,當我們對Perfect工程進行編譯和運行時,會在相應的模板目錄下創建相應的靜態文件的根目錄(webroot)。如下所示:

  

在webroot中我們添加上相應的靜態文件,我們就可以通過Perfect服務進行訪問了,下方是我們在webroot中添加的index.html的內容,用瀏覽器就可以訪問了。下方就是我們比較簡單的index.html中的內容了,當然下方的html簡單的不能在簡單了,如下所示:

  

在訪問上述index.html文件之前,我們需要將main.swift中添加的路由進行刪除,下方選中的部分就是要刪除的代碼。如果你不刪除下方這段代碼的話,如果你訪問localhost:8181的話,那麼就是下方路由所返回的內容。修改完代碼後,要重新進行編譯運行才生效的,這一點與解釋性語言PHP是不同的。

  

經過上述步驟後,我們就可以通過訪問localhost:8181來載入我們的index.html文件了,如下所示:

  

2、Xcode管理下的Perfect的靜態文件目錄

上述步驟是未使用Xcode管理Perfect項目的情況,webroot文件夾就位於工程目錄下。當我們的Perfect工程使用Xcode進行管理後,webroot的位置就會被改變。下方就是調用swift的包管理器生成相應的xcodeproj文件:

  

如果你的項目目錄中有webroot目錄,也有index.html文件。但是使用xcode進行Perfect項目管理後,就找不到下方這個index.html文件了。也就是webroot的文件目錄變地方了。這一點在官方文檔上是沒有介紹的。

    

通過搜索,我們可以找到Xcode管理下的Perfect項目中的webroot目錄,使用Xcode打開Perfect工程,找到Product,然後右鍵單擊,Show In Finder。

  

我們會看到Xcode管理下的webroot目錄,如下所示。你可以將靜態文件放到wwwroot中進行訪問。

  

當我們在此刷新瀏覽器時,就可以找到相應的index.html.

  

 

二、路由配置

下方這段代碼就是main.swift中的代碼段,首先創建了一個HTTPServer()的對象,然後又創建了一個路由對象,接著又將這個路由對象添加到了服務對象上。具體代碼如下所示:

  

 

1.添加靜態路由路徑

我們可以通過調用routes對象的add()方法為路由添加各種路徑,當然add()有好多重載的方法,不過其功能都是往路由上添加路徑、請求方法或者創立句柄。

  

 

下方我們添加了一個“/login”的路由路徑,其請求方法是.get的方式。後方的尾隨閉包是對響應的處理。具體代碼如下:

  

重新編譯並運行我們的Perfect工程,然後訪問localhost:8181/login路徑,會在瀏覽器中看到下方的返回信息。其他的路由

  

 

2、路由變數

在配置路由時,我們的路徑中可以添加路由變數來匹配同一類型的url。下方就是Perfect框架中路由變數的使用。在URL中通過{key}的方式來插入路由變數。下方的uri中中間的{\(valueKey)}就是通過字元串插值的方式插入的路由變數的Key,我們可以通過這個key來獲取到相應的路由變數。

  

下方就是我們訪問上述路徑的結果:

  

 

3、路由通配符

我們還可以在URI中使用通配符類匹配路徑,使用*好來匹配通用的路徑。下方就是路由通配符的使用方式:

  

下方就是路由通配符是運行結果:

  

 

4.結尾通配符

下方就是結尾通配符的使用方式,結尾處使用“**”來匹配尾部所有符合規則的uri, 然後通過routeTrailingWildcardKey來獲取通配的內容。

  

訪問結果如下所示:

  

上述這四種路由的優先順序為:路由變數 > 靜態路由 > 通配符路徑 > 結尾通配符。官方文檔上還有如果配置路由表的版本的示例,在此就不做過多贅述了。

 

三、表單提交與Json返回

聊完路由的配置,接下來我們要聊一下表單的提交與json數據的返回。本部分內容我們首先使用form表單post提交的方式將數據提交到指定的路由並處理,處理完畢後再講處理的數據通過josn的數據格式返回給客戶端。

1、構建form表單

首先我們得創建相應的表單提交的代碼,當然代碼比較簡單,就一個from表單。action的地址就是我們在伺服器端配置的路由地址“127.0.0.1:8181/login”,而表單提交的方式是POST。具體如下所示。

  

 

2、獲取form表單參數

下方就是伺服器端獲取表單參數的代碼。首先我們添加了一個“/login”路由,路由的請求方式是.post。首先我們獲取請求的參數。因為form表單的請求參數名是“userName”和“password”,所以我們要使用這兩個namerequest對象中獲取相應的值。獲取到值後你可以查詢資料庫或者其他一些操作呢。操作完畢後返回相應的json信息。Swift中的字典是可以調用jsonEncodeString()方法來轉換的,後邊的博客會對部分Perfect框架的源碼進行解析,其中會涉及到如何將字典轉換成json串,在此就不做過多贅述了。

  

 

3.表單提交與結果返回

上面web頁和服務端都已實現完畢,接下來我們就開始測試了。下方就是相應的form表單與結果返回:

   

 本篇博客就先到這兒,下篇博客仍然會對Perfect框架的相關內容進行介紹。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分析器錯誤 說明: 在分析向此請求提供服務所需資源時出錯。請檢查下列特定分析錯誤詳細信息並適當地修改 分析器錯誤消息: 未能創建類型“StockManageWebService.Service1”。源錯誤: 行 1: <%@ Page Language="C#" AutoEventWireup="t ...
  • 大家都知道,現在和以前比起來,互聯網行業、軟體行業已經天差地別了。現在處處都在搞信息化建設,人人都知道互聯網思維。這樣的信息化時代,對於軟體開發者、對於軟體開發公司來說,是一個巨大的機遇。 在門外漢看來,軟體開發是機遇大、成本低,只要叫幾個程式員,就能搞出個軟體公司來。但是,事實情況是這個樣子嗎?本 ...
  • 使用Mybatis開發Dao,通常有兩個方法,即原始Dao開發方法和Mapper介面開發方法,常用還是Mapper介面開發。 SqlSession的使用範圍 SqlSession中封裝了對資料庫的操作,如:查詢、插入、更新、刪除等。通過SqlSessionFactory創建SqlSession,而S ...
  • 一、系統預設編碼 python 2.7版本系統預設編碼是ascii python 3.1版本系統預設編碼是unicode 可以通過內建模塊sys獲取系統預設編碼 import sys print sys.getdefaultencoding() 有兩種方法可以講系統預設編碼變成utf-8 1、在代碼 ...
  • 概述 主要用於Java線程里指定時間或周期運行任務。 是線程安全的,但不提供實時性(real time)保證。 構造函數 Timer() 預設構造函數。 Timer(boolean) 指定關聯線程是否作為daemon線程。 Timer(String) 指定關聯線程的名稱。 Timer(String, ...
  • 1.導入模塊 import 模塊名 form 模塊名 import 模塊中的函數 可以將模塊放入同級目錄中,也可以將模塊放入site-packages目錄中 1 import sys 2 print (sys.path) #列印環境變數 3 print (sys.argv) #列印相對路徑 4 5 ...
  • 支付寶現在作為我們日常生活中最常用的應用之一,已經成為了人們的虛擬錢包。但是最近,有人發現了支付寶的一個漏洞,陌生人有1/5的幾率可以登陸你的支付寶,熟人可以100%登陸!一起來看看吧! 這個漏洞源於支付寶的一個忘記密碼的功能。原理為登錄手機賬號——忘記密碼——手機不在身邊——淘寶買過的東西9張圖片 ...
  • 專業定製三級分銷,微分銷網站系統開發建設無限級分銷三級分潤: 通過移動社交平臺(微信、微博、QQ空間),每個分銷商都可以無限級的發展自己的下屬分銷商,訂單成交後相關聯的上三級分銷商獲取自定的分潤。 自定義分紅規則 在自定義時間段完成銷售額、發展多少下屬分銷商等各項指標自定義分紅規則,獨特的自定義分紅 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...