V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
af463419014
V2EX  ›  问与答

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

  •  
  •   af463419014 · 2017-06-29 11:02:18 +08:00 · 1688 次点击
    这是一个创建于 2500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当我用 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>
    
    
    第 1 条附言  ·  2017-06-29 12:45:55 +08:00
    这样使用的目的是因为资金有限,只有一台机器对外服务

    每个域名是完全不同的服务内容,希望多个域名的服务能通过这一台机器提供

    所有域名都指向这一台机器,然后在机器上根据访问的域名分发到指定的 web 服务上
    第 2 条附言  ·  2017-06-29 14:10:57 +08:00
    已解决,在 web 容器上使用了虚拟 host 的配置
    ixiaohei
        1
    ixiaohei  
       2017-06-29 12:07:10 +08:00   ❤️ 1
    web.xml 里面干不了这种事,多域名路由到不同的主机是虚拟 Host 做的,要去 tomcat 的 server.xml 里面配置。另外 web.xml 只能处理应用后路径的的东西,比如 http://域名 /应用 /这里才是 servlet maping 处理的地方。
    另外你的用法有点奇葩,新手么?
    af463419014
        2
    af463419014  
    OP
       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
        3
    irockytan  
       2017-06-29 12:52:45 +08:00 via iPhone   ❤️ 1
    tomcat 也有 virtualhost 的
    novaeye
        4
    novaeye  
       2017-06-29 12:59:32 +08:00   ❤️ 1
    两个 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
        5
    af463419014  
    OP
       2017-06-29 13:00:41 +08:00
    @irockytan virtualhost 这个技术好像有用,我研究下
    RubyJack
        6
    RubyJack  
       2017-06-29 13:08:32 +08:00
    相信我,使用 Nginx 反而节约资源的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2302 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:25 · PVG 11:25 · LAX 20:25 · JFK 23:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.