step-by-step用java配合tomcat轻松实现动态2级域名效果

[color=blue]★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/277522 》 谢谢支持!★★★[/color]

开始之前,首先来认识下什么是2级域名?

一般我们注册一个域名,比如 www.iteye.com (以下内容均以iteye.com域名为例子,当然这只是example,该域名早已被注册了!),那么这个就是你的1级域名(顶级域名),是固定的并且只有1个,而像 robin.iteye.com,stephen830.iteye.com等等就是你这个1级域名下的2级域名了。因此,每个1级域名下面可以拥有无数个2级域名,只要你的名字符合国际域名名称定义规则。

现在越来越多的网站提供2级域名的功能,就如JavaEye,只要您注册成为用户,您就可以当场得到一个属于自己的2级域名。可能,或许您觉得这其中很神秘,以为这个功能实现会比较复杂,其实不然,看完了本篇文章,相信您也可以轻而易举打造自己的动态2级域名效果了。

下面就让我们一步步来看看如何实现的吧!

第1步 您要准备一个1级域名(国际域名,国内域名都可以),并且您域名所在的dns服务器要支持域名泛解析功能,拿iteye.com来说,泛解析就是a.iteye.com/b.iteye.com/c.iteye.com/...,所有这些都指向iteye.com设置的同一个ip地址,有了这个功能,域名才能够实现动态2级域名。一般域名服务商的dns服务器都有这个功能。如下图(图1):

[img]http://stephen830.iteye.com/upload/attachment/52997/6461e8d1-355d-3b18-b57b-a9b95bd1b7a5.png[/img](图1)

您只需要在域名的配置中增加一条*.开头的记录,就可以实现泛解析了。配置完后,你可以用ping命令测试下,假设你的域名是iteye.com,你可以运行 ping a.iteye.com,如果通的话就表示支持泛解析了。(当然,要注意有的主机服务器屏蔽ping回显!)

第2步 准备好你的WEB应用,这里使用了tomcat,可以在tomcat的server.xml配置文件中进行配置:

<Host name="localhost" debug="0" appBase="/www/doc" unpackWARs="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www." suffix=".txt" timestamp="true"/>
</Host>


其中的appBase配置自己WEB应用的位置,name="localhost",表示根目录,所有访问本主机的将自动转到appBase配置的应用上。假设您的域名主机地址为 202.109.xx.xx,那么直接在浏览器中输入http://202.109.xx.xx 就会默认打开您在上面配置的那个web应用,这个在你的主机上有多个WEB应用的时候要小心。您在增加其他独立的WEB应用(假设还有个WEB应用是 www.xxx.com)时需要像下面这样的配置:

<Host name="www.xxx.com" debug="0" appBase="/www/doc/xxx" unpackWARs="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.xxx.com." suffix=".txt" timestamp="true"/>
</Host>


这个独立的www.xxx.com则必须使用域名来访问,不能使用网站ip地址来访问。


第3步 为了更好的展现动态2级域名效果,使用一个frame作为WEB应用的index.html,这个index.html将作为你的WEB应用的首页面。(备注:这个index.html不是必须的,只是为了让浏览器的地址栏显的更加好看而已)

[b]index.html[/b]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>-</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<frameset framespacing="0" border="0" rows="0,*" frameborder="0">
<frame name="" noresize scrolling="no" target="_self" src="" frameborder="0" marginheight="0" marginwidth="0">
<frame name="" scrolling="auto" target="_self" src="index.jsp" frameborder="0" marginheight="0" marginwidth="0">
<noframes>
<body>
<p>您的浏览器版本太低,需要升级后才能使用本系统!</p>
</body>
</noframes>
</frameset>
</html>


第4步 实现动态的2级域名。

假设用户在网站(www.iteye.com)上注册一个用户后,用户名比如为 test,那么只要在浏览器中输入 test.iteye.com后,就会进行如下的处理。

输入 test.iteye.com , 首先会解析 test.iteye.com 这个2级域名的ip地址,这样就像输入 http://202.109.xx.xxx/ 一样的效果 (假设 iteye.com的ip为202.109.xx.xxx);然后就会去访问这个域名对应WEB应用的首页面,也就是上面配置的index.html,然后会调用下面的index.jsp

[color=red][b]这个jsp才是真正负责进行动态2级域名解析并处理的 index.jsp[/b][/color]

<%@ page contentType="text/html;charset=UTF-8"%>
<%
String host = request.getHeader("Host").trim();//获得来访者的域名信息,这里如果是2级域名,就会得到例如 test.iteye.com, test就是注册用户名
String[] hosts = host.split("[.]");
if(hosts.length==3){//只处理长度为3的信息
if("javaeye".equals(hosts[1])&&"com".equals(hosts[2])){//判断是否是iteye.com的2级域名
String name = hosts[0].trim();
if(!"www".equals(name)){//www是域名本身用的,不能用于表示2级域名,所以在用户注册的时候像www,ftp,mail,smtp,pop等关键词不要被用户注册到。
//在这个位置还需要用个方法来校验下name是否合法,比如name必须是网站的注册用户,将name与网站的用户表数据进行校验
//校验通过后,转到对应的处理页面 response.sendRedirect("self.jsp?name="+name);//2级域名转向到指定的一个处理文件,如这里是self.jsp
return;
}
}
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>--</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#ffffff" topmargin="80px" leftmargin="20px" rightmargin="20px">
<!--网站首页面内容-->
</body>
</html>


这样,就可以轻轻松松地实现了动态2级域名功能了。


[color=red]最后的说明:本文只是一篇实现动态2级域名的启蒙文章,希望能告诉所有的朋友,动态2级域名其实一点也不复杂,只是你目前可能没有找到方法,说穿了就大家都明白了。
如果要将动态2级域名商业化/产品化,还需要进一步改善,改善方法大家可以在网上找找资料。基本上每个WEB容器都有自己特定的一些配置来实现这个功能。[/color]

-------------------------------------------------------------
分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。
课程简介这是一门使用Java语言,SpringBoot框架,从0开发一个RESTful API应用,接近企业的项目(我的云音乐),课程包含了基础内容,高内容,项目封装,项目重构等知识,99%代码为手写;因为这是项目课程;所以不会深入到源码讲解某个知识点,以及原理,但会粗略的讲解下基础原理;主要是讲解如何使用系统功能,流行的第三方框架,第三方服务,完成接近企业项目,目的是让大家,学到真正的企业项目开发技术。适用人群刚刚毕业的学生想提高职场竞争力想学从零开发SpringBoot项目想提升SpringBoot项目开发技术想学习SpringBoot项目架构技术想学习企业项目开发技术就是想学习SpringBoot开发能学到什么从0开发一个类似企业项目学会能做出市面上90%通用API快速增加1到2年实际开发经验刚毕业学完后能找到满意的工作已经工作学完后最高涨薪30%课程信息全课程目前是82章,155小时,每节视频都经过精心剪辑。在线学习分辨率最高1080P课程知识点1~11章:学习方法,项目架构,编码规范,Postman使用方法,Git和Github版本控制12~16章:搭建开发环境,快速入门SpringBoot框架17~20章:快速入门MySQL数据库21~30章:MyBatis,登录注册,找回密码,发送短信,发送邮件,企业接口配置31~41章:实现歌单,歌单标签,音乐,列表分页,视频,评论,好友功能42~48章:阿里云OSS,话题,MyBatis-plus,应用监控49~53章:Redis使用,集成Redis,SpringCache,HTTP缓存54~58章:Elasticsearch使用,集成Elasticsearch,使用ES搜索59~61章:商城,集成支付宝SDK,支付宝支付62~64章:常用哈希和加密算法,接口加密和签名65~67章:实时挤掉用户,企业项目测试环境,企业接口文档68~69章:SpringBoot全站HTTPS,自签证书,申请免费证书70~73章:云MySQL数据库,云Redis数据库使用,轻量应用部署环境,域名解析74~80章:Docker使用,生产Kubernetes集群,域名解析,集群全站HTTPS81~82章:增强和重构项目,课程总结,后续学习计划
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值