返回首页
Java的实现二级域名访问卖家首页 - 朗尊软件,企业级电商平台提供商
发表时间:2019-12-21 阅读:2490
电商系统
Java商城
在电子商务平台中,卖家在平台上可以开自己的店铺,然后买家就可以直接进入到卖家的店铺进行购物.那么问题来了,买家通过什么样的入口进入卖家的店铺?

Legendshop开讲时间

Legendshop的开发哥又来送福利了,今天要给大家科普一下Java如何实现二级域名访问卖家首页。


一.使用场景说明

在电子商务平台中,卖家在平台上可以开自己的店铺,然后买家就可以直接进入到卖家的店铺进行购物.那么问题来了,买家通过什么样的入口进入卖家的店铺?

不加任何处理的方式就是:
1. 在平台上添加卖家店铺入口的链接
2. 直接给用户一个访问卖家店铺首页的URL

对于第一种方式,是合理的,也是必须要这样做.而第二种很明显就不合理,我想大家作为一个web开发者都知道,上面所说的那个访问卖家首页的url一定是带着很多参数,很长很不优雅,很难记忆的一个url.所以,我们是要给用户一个url,但是这个url必须得是精短的,易记的,优雅的一个URL.所以我们可以为每个店铺配置一个二级域名,用户通过这个二级域名在浏览器输入,就可以直接访问卖家店铺的首页了.


然后,接下来的第二个问题就来了,我们如何给卖家配置二级域名?为每一个卖家的店铺都在DNS服务器上配置一个二级域名显然是不现实.所以我们要通过程序来实现二级域名的访问.


二.实现原理:

  1. 给DNS配置泛域名解析,也就是在DNS服务器上配置一条: “*.一级域名” 的主机记录,假如您申请的以及域名是 legengshop.com,那在DNS服务器上配置的泛域名解析的主机记录就是 *.legendshop.com 配置泛域名解析的意义就在于让所有的 *.legendshop.com 访问都映射到同一个IP

    关于配置DNS的泛域名解析请参考 DNS泛域名解析

  2. 编写一个过滤器来拦截所有的请求,然后对拦截的请求进行解析,转换成访问卖家店铺首页的url,然后在过滤器进行转发.

    • 如可口可乐在您的电商平台上开了一个店铺,并且可口可乐希望用户可以通过 coco.legendshop.com 访问到他们的店铺首页.但是实际访问可口可乐店铺首页的url却是: www.legendshop.com/shop?shopId=1 ,这时候我们编写的这个过滤器就需要把用户在浏览器输入的 coco.legendshop.com 变为 www.legendshop.com/shop?shopId=1 ,然后进行转发就可以进入到可口可乐店铺首页了.
    • 至于 www.legendshop.com/shop?shopId=1 这条url的含义,以及如何把 coco.legendshop.com 变为 www.legendshop.com/shop?shopId=1 请看下面的详细步奏说明吧!

三. 具体实现

  1. 数据设计

一般来说,店铺信息应该在数据库有一张店铺表来保存店铺信息的,上面举例的链接 www.legendshop.com/shop?shopId=1 中的shopId=1,其实就是把店铺id通过url参数传到后台,然后后台程序通过这个店铺ID找到数据库对应的店铺数据,再填充到页面,最后将页面响应给用户,那么用户访问的就是店铺首页.数据库的店铺表如下:

shop_id shop_name sec_domain_name shop_info
1 可口可乐 coco 你想和谁分享可口可乐。

所以我们要做的就是,在数据库的店铺表增加一个用于存放二级域名的字段,每条店铺记录对应一个二级域名.然后我们通过二级域名这个字段就可以查询到对应的店铺ID,然而根据这个店铺ID就可以拼接一个能实际访问店铺首页的url,如上面提到的例子: www.legendshop.com/shop?shopId=1 然后对这个url进行转发,这样就实现了.

至于二级域名的获取,假如用户在浏览器输入的是 coco.legendshop.com ,这个”coco”就是二级域名,我们只要在过滤器获取到用户访问的主机名,然后进行字符串的切割就可以获取到了.

过滤器的编写,代码的实现.

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)

throws IOException, ServletException

{ HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) resp;

//获取域名

String serverName = request.getServerName();

//获取访问路径

String uri = request.getRequestURI();

//如果后面带有路径的,则不拦截

if(uri.length()>1){ filterChain.doFilter(request, response); return; }

//获取主域名

String domainName = serverName.substring(serverName.indexOf(".")+1);

if(!domainName.equalsIgnoreCase(this.domainName)){ filterChain.doFilter(request, response); return; }

//获取二级域名

String secDomainName = serverName.substring(0, serverName.indexOf("."));

if(retainDomainName.contains(secDomainName)){ request.getRequestDispatcher("/index.jsp").forward(request, response); return; } //

根据二级域名获取店铺id

Integer shopId = shopDao.getShopIdBySecDomainName(secDomainName);

if(null == shopId){ filterChain.doFilter(request, response); return; }

//根据获取到的店铺ID拼接成能够访问店铺首页的URL,然后进行转发

request.getRequestDispatcher("/shop?shopId="+shopId).forward(request, response); }


访问店铺首页的servlet

private ShopDao shopDao = new ShopDao();


@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置字符编码 req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=utf-8");

//获取用户请求参数,也就是店铺ID

String shopId = req.getParameter("shopId");

//根据ID查询店铺信息

Shop shop = shopDao.getShopById(Integer.parseInt(shopId)); if(null == shop){ resp.setStatus(404); return; } req.setAttribute("shop", shop);

//转发到店铺首页页面

req.getRequestDispatcher("/WEB-INF/jsp/shop.jsp").forward(req, resp); }


web.xml的配置

<servlet>

<servlet-name>shopServlet

Legendshop电商商城系统在技术上有哪些优势
高并发电商平台设计
如何看待java商城系统的二次开发
开源商城系统介绍企业写开源多用户商城 - 朗尊软件,企业级电商平台提供商
供应链金融浅析 - 朗尊软件,企业级电商平台提供商
电商头条新闻
1
工业行业 | 工业产品B2B跨境电商解决方案
2
私域电商如何赶上智能热潮?
3
三一全球购 | B2B2C电商平台+员工福利平台的定制解决方案
4
跨境电商 | B2B2C跨境电商系统解决方案
5
社群团购系统——社区流量与社交电商融合
热门标签
小羊直播
供应链
电商系统
Java商城
电商平台
B2B商城
跨境电商
商城平台
新零售系统
云商城系统
B2B2C商城系统
多用户商城
微服务商城
供应链商城
商城系统
电商直播系统
私域电商
大宗交易平台
数字化转型
直播供应链
全渠道零售
O2O商城系统
java开源商城
SAAS云平台
B2C商城系统
SaaS系统
生鲜电商
用户标签
APP
S2B
MRO平台
微信小程序商城
移动商城
社区电商
营销活动
新零售电商
分销系统
门店管理
分销体系
社交电商
直播电商
数字化
客服系统
社群电商
引爆流量
供应链金融
员工福利平台
工会福利商城
企业智慧采购平台
机械设备
抖音电商
数智化
数字化
区块链
S2B2C
B2B2B
订单融资
数字中台
VUE
用户标签
仓单融资
大数据
应收账款
集采代采
医药电商
推荐阅读
公告:【微信小程序备案】9月1日起,微信小程序需完成备案才可上架!
工业行业 | 工业产品B2B跨境电商解决方案
私域电商如何赶上智能热潮?
三一全球购 | B2B2C电商平台+员工福利平台的定制解决方案
跨境电商 | B2B2C跨境电商系统解决方案