这篇文章将为大家详细讲解有关大数据中如何不配置应用名访问应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
为班戈等地区用户提供了全套网页设计制作服务,及班戈网站建设行业解决方案。主营业务为成都网站设计、网站制作、外贸营销网站建设、班戈网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
如何不使用应用名,直接通过虚拟主机的名称或绑定的域名来访问应用呢?
进行Web开发部署的人常会有以上的疑问。在进行Web应用发布时,经常需要通过以下这种形式进行应用的请求。
虚拟主机+端口+ 应用名
而如果我们配置了针对应用的特定虚拟主机,一个虚拟主机上只有这一个应用,再通过应用名访问就没什么必要,同时显的繁琐。
那在Tomcat中,怎么样配置,以支持通过虚拟主机(端口如果是80,也可以跳过)直接访问应用呢?
官方文档中,对于Context中应用名称这个属性有这样的描述:
我们看到,如果要为虚拟主机配置默认的应用,我们可以给context的path配置为空。这里注意一下,为空的意思,是指空串,而不是不指定。当然,对于应用名称,我们在指定时一般是 /abc这种形式,所以为空时,也可以指定成 /这样
所以,配置成以下两种形式,都是OK的。
"" docBase="/home/abc/xxx"/> "/" 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为空的应用后,就会用它进行请求的后续响应了。
关于大数据中如何不配置应用名访问应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
分享文章:大数据中如何不配置应用名访问应用
文章路径:http://lswzjz.com/article/ipghop.html