電商系統店鋪個性化域名實現
一、背景介紹
在C2C電商系統中,使用者可以申請成為賣家,然後開設自己的店鋪。為了更利於傳播,讓會員更容易記住,一般會設定店鋪的個性域名。如:良品鋪子在某貓的個性域名是:lppz.xxmall.com。
二、設計原理
在設計這套系統時,主要是通過設定域名的泛解析到二級或者三級域名,然後根據域名字首,在程式中轉換成對應的店鋪id。從而完成個性化域名跳轉到對應的店鋪網站首頁。
三、程式實現
1. 設定域名泛解析
假設域名是:abc.com,設定所有匹配*.m.abc.com的三級域名解析到伺服器上,如下圖:
2. 配置Nginx轉發
這裡將所有的域名,rewrite成指定的url字首:/site/domain。domain代表*所匹配的三級域名,程式碼如下:
server {
listen 80;
server_name *.m.abc.cn;
#設定靜態檔案路徑,不轉發
location ~ ^/static/ {
root /webser/test/webapps/test-mobile;
}
#設定域名轉發到固定URL:/site/domain
location / {
set $subdomain default;
if ( $http_host ~* "^(.*)\.m\.abc\.cn" ){
set $subdomain $1;
}
rewrite ^/(.*)$ /site/$subdomain/$1 break;
proxy_pass http://localhost:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for ;
}
}
3. 配置Controller
這裡使用Spring-mvc做為mvc框架。首先定義一個Controller基類BaseController,所有的controller都繼承它。
public class BaseController {
}
再定義店鋪的Controller類SiteController,攔截所有URL包含/site/domain的請求。這樣配置的泛解析域名都會進入這個Controller
@Controller
@RequestMapping("/site/{domain}")
public class SiteController extends BaseController{
}
3.1 實現域名轉換成店鋪id
方法一:在進入SiteController的某個方法後,通過@PathVariable註解,得到domain,然後在資料庫中根據domain查詢出對於的店鋪id。
@Controller
@RequestMapping("/site/{domain}")
@Autowired
private SiteService siteService;
@RequestMapping("/index")
public String index(@PathVariable String domain){
//得到店鋪id
Site site = siteService.findSiteByDomain(domain);
}
}
這樣的寫法有個問題,就是每個方法都要寫這樣的一段程式碼。假如我們可以在進入Controller某個方法前,就能通過domain得到店鋪id,那就更好了。那麼Spring-mvc中有沒有在進入某個Controller的方法前執行的註解呢?
方法二:在Spring-mvc的註解中,有個註解會在進入Controller每個方法前執行。這個註解就是@ModelAttribute。被@ModelAttribute註釋的方法會在此controller每個方法執行前被執行,因此對於一個controller對映多個URL的用法來說,要謹慎使用。
有了這個註解,我們可以在BaseController基類中,定義一個方法來實現域名轉換成店鋪id的操作。程式碼如下:
public class BaseController {
//定義店鋪id
protected Long siteId = 0L;
@Autowired
private SiteService siteService;
/**
* @Title: getSiteId
* @Description: 將domain轉換成店鋪id
* @throws
*/
@ModelAttribute
public void getSiteId(@PathVariable String domain,Model model,HttpServletRequest request,HttpServletResponse response){
Site site = siteService.findSiteByDomain(domain);
if(site != null){
siteId = site.getId();
}else{
throw new RuntimeException("域名不存在");
}
}
}
在上面的程式碼中,我們定義了一個成員變數siteId,即店鋪id,這樣在所有繼承BaseController的基類中,可以直接使用siteId來獲取店鋪的資料。
通過@ModelAttribute註解,在所有進入Controller方法前,將域名domain轉換成店鋪id即siteId。
這裡店鋪我是定義為Site物件,然後直接從資料庫裡查詢得到。其實可以有優化的方案。通常店鋪的個性域名不會隨意更改,對於改動比較少的資料,我們可以在程式中快取起來。所以可以將所有店鋪物件和domain對應關係,通過key-value的形式,存在記憶體map或者redis中,這樣獲取店鋪時,直接通過domain做為key,就可以得到site物件了。
通過這幾步,即完成了類似淘寶店鋪設定個性化域名的功能。
PS:這裡只是提供了一種設計思路和簡單的實現,在併發量上千萬甚至更大的情況下,這塊會更加複雜。如需瞭解更多,請加我個人微信:jerry0914,請備註csdn部落格。
相關推薦
電商系統店鋪個性化域名實現
一、背景介紹 在C2C電商系統中,使用者可以申請成為賣家,然後開設自己的店鋪。為了更利於傳播,讓會員更容易記住,一般會設定店鋪的個性域名。如:良品鋪子在某貓的個性域名是:lppz.xxmall.com。 二、設計原理 在設計這套系統時,主要是通過設定域名的
用 Spring Boot 實現電商系統 Web API (二)創建多模塊項目
ble jin play 正常 ota autowired ips 功能 bind 大型項目,需要將代碼按不同功能,分成不同模塊,這樣比較好管理和閱讀代碼,也有助於多人協作。 一、項目結構 1.1 模塊說明 項目分成5個模塊,分別如下: 模塊名稱 說明 webapi
電商系統Broadleaf文檔翻譯(六) - 主要實體main entities
這就是 顏色 tex cep 實現 target tro 定價 間接 主要實體 原文標題:main entities 原文出處:http://www.broadleafcommerce.com/docs/core/current/broadleaf-concepts
開源 java 電商系統
details nbsp www href Lucene java 電商系統 tar 電商 shop++是基於spring、springmvc等主流框架開發,參考資料比較全面,上手容易; 比 javashop 代碼可讀性好. 適合二次開發 6、broadleaf基
“大型票務系統”和“實物電商系統”的系統邊界之間的差別與聯系
屬於 交互 所在 data- con 處理 營銷 ont 有助於 討論請移步至:http://www.zhiliaotech.com/ideajam/idea/detail/118 相關文章: 《今天你買到票了嗎?——從鐵道部12306.cn站點漫談電子商務
“大型票務系統”和“實物電商系統”按系統邊界分析各種業務形式
之間 經理 blog tar 討論 針對 物流運輸 通知 庫存 討論請移步至:http://www.zhiliaotech.com/ideajam/idea/detail/191 相關文章: 《今天你買到票了嗎?——從鐵道部12306.cn站點漫談電子商
B2C電商系統開發app平臺定制詳解
amp 聯系 良性 幫助 產品 人工 定期 abc 不同 B2C電商系統開發從標品到非標品體現的是用戶從追求功能價值到追求情感價值的變遷。在電商1.0時代,為用戶習慣培養階段,圖書和3C等標品更利於降低用戶的信 任成本。B2C電商app開發,同時,用戶對標品的消費更多追求的
優秀的開源電商系統有哪些
滿足 bsp lec 安全性 image 後臺 優化 tps jpg 信息技術的迅速發展,商家想在眾多的電商系統中選擇一款合適的並不是那麽輕易的事情,那麽為了能夠讓商家在選擇上減少時間,小編為你介紹幾款好的開源電商系統。 ECSHOP電商系統 基於PHP語言及MYSQL數
130242014019-(2)-“電商系統某功能模塊”需求分析與設計實驗課小結
img 商品 歷史記錄 模型 需求分析 今天 ges 關鍵字搜索 識別 1)選題討論 今天主要討論的是電商系統中某一個功能模塊的分析,一個電商系統中有很多個功能模塊,如搜索、登錄、購物車等等。我們組選取了其中的最經常使用的搜索功能進行討論。 2)用戶故事討論 1.用戶可
130242014029(2)《電商系統某功能模塊》的需求分析與設計的課程小結
對象 nbsp 好的 .cn 階段 打開 strong 雷鳴 相同 《電商系統某功能模塊》的需求分析與設計的課程小結 上次課老師邀請到了王經理來為我們講解敏捷開發,為了讓我們可以更好的理解“敏捷開發”這個概念,王經理借助電商系統讓我們以小組的形式針對某個功能模塊進行需求
130242014059(2)《電商系統搜索模塊》的需求分析與設計的課程小結
你會 經驗 nbsp 哪些 發的 方案 似的 小夥伴 智能提示 9月30號,老師請來的企業經理給我們講關於敏捷開發的相關知識和流程,以下是我對我們組當時討論的一個心得總結: 1)分組情況介紹,小組分工合作情況介紹。 - 按照當時王經理的分組,我和我的小夥伴們是在第三組。
130242014030(2)“電商系統某功能模塊”需求分析與設計實驗課小結
img .com http 二級 電商系統 src 意義 感覺 用戶 這次課老師為了讓我們更加理解敏捷開發,特意請來了王經理給我們介紹。王經理通過讓我們分組,以小組的方式來體驗一下敏捷開發。 分組才用了報數,數字相同的為一組。小組裏沒有明確的分工,大家一起討論,再由
130242014067(2)“電商系統購物車功能模塊”需求分析與設計實驗課小結
京東 blog 每次 有一個 並且 小結 應該 快速 後臺 1)分組情況介紹,小組分工合作情況介紹。 陳鋒、劉鑫(用戶故事的細化,即功能設計) 高忠傑、羅成龍(參與系統的類圖設計及上臺匯報) 顏貴榮、李清燦(參與用戶故事的討論與設計) 王紹華、丁天奇、林偉領(參與系統的類圖
電商系統登錄模塊需求分析
傳統 系統 識別 cnblogs 組成 文檔 完成 如果 敏捷 我是第二小組。我們組組長負責管理團隊,並且與組員進行討論。小組成員並沒有詳細的分工,而是坐在一起討論。我們的選題初步選擇電商中的權限模塊和登錄模塊,經過小組內的討論,最終敲定登錄模塊。用戶故事,就是給用戶講
130242014063-(2)-博客標題-電商系統搜索功能模塊課堂小結
博客 並且 選擇 技術 得到 能力 介紹 進行 情況 這次課程,王經理給我們介紹了敏捷開發,並且帶領我們分組進行了“電商系統功能模塊”的開發模擬,以下是課堂小結。 1)分組情況介紹,小組分工合作情況介紹。 我們是報數為1號的小組,在小組討論後我們決定以平等地進行探討
130242014014-(2)-“電商系統商品詳情模塊”需求分析與設計
說明 團隊 eight 部分 展開 關於 工作 要求 技術 1、描述課程的小組討論工作的內容,要求以下每個小點都要分成情況介紹、老師點評、點評後的修改、心得體會和經驗總結幾個方面來展開。 小結內容,必須包含且不限於以下內容(格式和行文風格不限制): 1)分組情況介紹,小組分
130242014053 (2) “電商系統某功能模塊”需求分析與設計實驗課小結
記錄 關鍵字 軟件 cmm 思想 管理 電商系統 交流 史記 電商系統的搜索功能模塊 一、分組情況 組長:蔡誌峰 組員:樊鎮霄、林夢遠、曾子雲、謝添華,吳幫莉、周陳清、陳敬龍 二、選題討論 經過投票選擇,我們小組決定以電商系統的搜索功能模塊作為我們的選題。
《電商系統後臺統計報表模塊》需求分析與設計的課程小結
很好 人員 過程 店鋪 顯示效果 情況 rod tle 報表 1)分工情況介紹,小組分工合作情況介紹 邱慧堅-張順程選題,功能分析,建模 2)選題討論 電商後臺的統計報表也是非常重要的一個功能模塊,一個功能齊全且具有良好顯示效果的報表功能可以幫助管理人員很好的分析當前商鋪的
130242014070-《電商系統某功能模塊》的需求分析與設計的課程小結
nbsp 們的 用戶 建模 cmmi 主題 img 遊戲 周期 今天的課上,老師請來了王熙王經理來為我們進行敏捷開發和CMMI等在企業中會運用到的開發模式,並且用一個現場敏捷開發體驗的小遊戲來讓我們深刻感受了敏捷開發的魅力。以下是我對我們小組整節課的分析討論所進行的會議記錄
130242014012(2)-雷鳴-《電商系統商品分類模塊》
問題 以及 交流 技術 用戶 src 設計 找到 查詢 ---恢復內容開始--- 1.選題討論 我們小組主要討論的是電商系統的商品分類功能模塊,商品分類模塊可以根據銷售情況,類目類別,以及商品性質來進行細致劃分。 2.用戶故事討論 (1)用戶可以通過正常一個大型商品常見的分