您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关大数据中如何不配置应用名访问应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
如何不使用应用名,直接通过虚拟主机的名称或绑定的域名来访问应用呢?
进行Web开发部署的人常会有以上的疑问。在进行Web应用发布时,经常需要通过以下这种形式进行应用的请求。
虚拟主机 +端口 + 应用名
而如果我们配置了针对应用的特定虚拟主机,一个虚拟主机上只有这一个应用,再通过应用名访问就没什么必要,同时显的繁琐。
那在Tomcat中,怎么样配置,以支持通过虚拟主机(端口如果是80,也可以跳过)直接访问应用呢?
官方文档中,对于Context中应用名称这个属性有这样的描述:
我们看到,如果要为虚拟主机配置默认的应用,我们可以给context的path配置为空。这里注意一下,为空的意思,是指空串,而不是不指定。当然,对于应用名称,我们在指定时一般是 /abc 这种形式,所以为空时,也可以指定成 / 这样
所以,配置成以下两种形式,都是OK的。
<Context path="" docBase="/home/abc/xxx"/>
<Context path="/" docBase="/home/abc/xxx"/>
当然,除了以上这种配置外,将应用的WAR包或者目录命名为ROOT,也可以起到上面的作用。Tomcat在webapps目录下自带的ROOT应用就是个例子。
我们来看Tomcat内部,是如何处理的这些逻辑。
首先在Server启动时,会涉及到应用的部署,部署过程,可以参考前面的文章:
WEB应用是怎样进行部署的
部署过程中,会根据具体的Context的配置,获取对应的应用名称,从而进行应用名称的配置和注册。
以下是部署前,解析配置的应用名称:
部署时,根据是在server.xml中配置部署还是在自动部署目录中部署,处理情况不同:
在配置文件中配置的情况:
我们再看,在代表应用名称的类ContextName内,包含以下声明:
public static final String ROOT_NAME = "ROOT";
同时,应用部署,获取具体Context名称的时候,对应的ContextName构造函数里有下面的逻辑,
public ContextName(String path, String version) {
// Path should never be null, '/' or '/ROOT'
if (path == null || "/".equals(path) || "/ROOT".equals(path)) {
this.path = "";
} else {
this.path = path;
}
同时,对于
我们发现对于ROOT应用,在另一个构造函数里,直接对应到的请求路径为空。
if (ROOT_NAME.equals(tmp2)) {
path = "";
}
后续的Context注册,就会用到这里的path。这里的注册过程,可以参考前面的文章:
Tomcat多虚拟主机配置及原理
我们看到,注册的过程中,如果有path为/的情况,也会自动转化为空串。
没有匹配到,就会匹配a的默认值0,即第一个应用。第一个应用是什么呢?
就是我们配置的默认应用,path为空的那个。
例如下面是Tomcat自带的几个应用的path,这是在mapper中注册的情况。
所以,在配置到默认的path为空的应用后,就会用它进行请求的后续响应了。
关于大数据中如何不配置应用名访问应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。