web.xml 或者 springmvc 是否可以按按访问的域名进行分发

2017-06-29 11:02:18 +08:00
 af463419014

当我用 s1.mydomain.com 访问用 server1.xml 配置的 servlet

当我用 s2.mydomain.com 访问用 server2.xml 配置的 servlet

类似下面这样的配置,但是<url-pattern>应该是不支持配置域名的

有没有方法可以实现这样的功能

    <servlet>
        <servlet-name>server1</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:server1.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>server1</servlet-name>
        <url-pattern>http://s1.mydomain.com/</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>server2</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:server1.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>server2</servlet-name>
        <url-pattern>http://s2.mydomain.com/</url-pattern>
    </servlet-mapping>

1691 次点击
所在节点    问与答
6 条回复
ixiaohei
2017-06-29 12:07:10 +08:00
web.xml 里面干不了这种事,多域名路由到不同的主机是虚拟 Host 做的,要去 tomcat 的 server.xml 里面配置。另外 web.xml 只能处理应用后路径的的东西,比如 http://域名 /应用 /这里才是 servlet maping 处理的地方。
另外你的用法有点奇葩,新手么?
af463419014
2017-06-29 12:34:14 +08:00
@ixiaohei
之前的方法是用 nginx 配置的,可以实现,但是这样需要启动 2 个 web 程序,比较耗费系统资源,想在一个 web 下节省系统资源

用法确实比较奇葩

这是现在 ngingx 的配置

当我用 s1.mydomain.com 访问会进入 8080 端口的 web,用 s2.mydomain.com 访问会进入 9080 端口的 web
```
server {
listen 80;
server_name s1.mydomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}

server {
listen 80;
server_name s2.mydomain.com;
location / {
proxy_pass http://127.0.0.1:9080;
}
}
```
irockytan
2017-06-29 12:52:45 +08:00
tomcat 也有 virtualhost 的
novaeye
2017-06-29 12:59:32 +08:00
两个 servlet 分别 mapping 不同的子路径, 比如

<servlet-mapping>
<servlet-name>server1</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>server2</servlet-name>
<url-pattern>/s2</url-pattern>
</servlet-mapping>


然后用 tomcat 内置的 rewrite 功能来做分发
https://tomcat.apache.org/tomcat-8.0-doc/rewrite.html
af463419014
2017-06-29 13:00:41 +08:00
@irockytan virtualhost 这个技术好像有用,我研究下
RubyJack
2017-06-29 13:08:32 +08:00
相信我,使用 Nginx 反而节约资源的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX