如何将子域映射到servlet

时间:2018-02-15 07:47:56

标签: java servlets

我有一个包含多个模块的Google App Engine项目,每个模块都用作微服务。每个模块都位于项目的根级别,并具有自己的web.xml文件。

我熟悉servlet规范的工作原理,并且可以将servlet映射到相对路径:

<servlet>
    <servlet-name>accounts</servlet-name>
    <servlet-class>com.myapp.accounts.DatastoreServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>accounts</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

但是,如果我在浏览器中使用任何指向我的Web应用程序的域,则会执行上面的servlet。我真正想要的是servlet只为子域启动:

https://accounts.myapp.com

而不是像其他一些领域:

https://users.myapp.com

有没有办法在web.xml文件中指定它?根据servlet 3.1规范:

  

空字符串(&#34;&#34;)是一个精确映射到的特殊URL模式   应用程序的上下文根,即表单的请求   http://host:port/ /。在这种情况下,路径信息是'/'   servlet路径和上下文路径为空字符串(“”)。

但这并不表示对子域有任何支持。

2 个答案:

答案 0 :(得分:0)

不支持映射到特定域,但如果您不喜欢它返回的相同效果,则可以使用request.getServerName()并返回404。

请注意,在http中,服务器名称在技术上是可选的(值在Host标头中)。实际上,除非通过IP地址访问服务器(即:URL http://<ip address>),否则始终会发送它。

答案 1 :(得分:0)

请使用* .yourdomain.com更新您的DNS,并在来到特定子域的请求使用request.getServerName().split("\\.")[0]获取子域后,将子域保存在您的数据库中 并检入数据库并根据子域映射结果。 enter image description here