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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...