Java 如何在servlet中读取变量URL

Java 如何在servlet中读取变量URL,java,url,servlets,Java,Url,Servlets,我正在使用servlet,我正在使用这个URL http://s4.com/api/system?section0=report&reportType0=overTime&dataType0 在浏览器中请求我在servlet中创建的一些json数据 我试图阅读整个URL,以获得它是doGet方法中的第一部分s4.com,因为它可能是: http://s.com/api/system?section0=report&reportType0=overTime&dat

我正在使用servlet,我正在使用这个URL

http://s4.com/api/system?section0=report&reportType0=overTime&dataType0
在浏览器中请求我在servlet中创建的一些json数据

我试图阅读整个URL,以获得它是
doGet
方法中的第一部分
s4.com
,因为它可能是:

http://s.com/api/system?section0=report&reportType0=overTime&dataType0
http://s1.com/api/system?section0=report&reportType0=overTime&dataType0
http://s2.com/api/system?section0=report&reportType0=overTime&dataType0
http://s3.com/api/system?section0=report&reportType0=overTime&dataType0
http://s4.com/api/system?section0=report&reportType0=overTime&dataType0
.
.
.
http://s100.com/api/system?section0=report&reportType0=overTime&dataType0
所以我需要使用s(number.com)来区分它们

在我尝试过的doget方法中

request.getRequestURL().toString(); ===== output===> http://localhost:8090/MySim/api/system

我也试过这个

        String uri = request.getScheme() + "://" +   // "http" + "://
    request.getServerName() +       // "myhost"
    ":" +                           // ":"
    request.getServerPort() +       // "8080"
    request.getRequestURI() +       // "/people"
    "?" +                           // "?"
    request.getQueryString(); 
它将打印完整路径URL =====输出===>

http://localhost:8090/MySim/api/systemsection0=system&type0=shortStatus&rand0=1405835810247&sessionId=FFFFFFFFF
但其中没有一个得到了正确的答案

my是web.xml的一部分:

<servlet-mapping>
    <servlet-name>Api</servlet-name>
    <url-pattern>/api/system</url-pattern>
</servlet-mapping>

我将xhamp server与Apachi一起使用,因此在配置文件中,我使用了以下内容:

</VirtualHost>
        <VirtualHost *:80>
           ServerName s4.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://localhost:8090/MySim/session/
            ProxyPass /api/                 http://localhost:8090/MySim/api/


            ProxyPassReverse /session/      http://localhost:8090/MySim/session/    
            ProxyPassReverse /api/          http://localhost:8090/MySim/api/    


        </VirtualHost>
        <VirtualHost *:80>
           ServerName s5.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://localhost:8090/MySim/session/
            ProxyPass /api/                 http://localhost:8090/MySim/api/


            ProxyPassReverse /session/      http://localhost:8090/MySim/session/    
            ProxyPassReverse /api/          http://localhost:8090/MySim/api/    


        </VirtualHost>
</VirtualHost>
        <VirtualHost *:80>
           ServerName s4.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://s4.com:8090/MySim/session/
            ProxyPass /api/                 http://s4.com:8090/MySim/api/


            ProxyPassReverse /session/      http://s4.com:8090/MySim/session/   
            ProxyPassReverse /api/          http://s4.com:8090/MySim/api/   


        </VirtualHost>
        <VirtualHost *:80>
           ServerName s5.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://s5.com:8090/MySim/session/
            ProxyPass /api/                 http://s5.com:8090/MySim/api/


            ProxyPassReverse /session/      http://s5.com:8090/MySim/session/   
            ProxyPassReverse /api/          http://s5.com:8090/MySim/api/   


        </VirtualHost>

服务器名s4.com
标题添加访问控制允许源“*”
代理请求关闭
通融
代理通过/会话/http://localhost:8090/MySim/session/
ProxyPass/api/http://localhost:8090/MySim/api/
ProxyPassReverse/会话/http://localhost:8090/MySim/session/    
ProxyPassReverse/api/http://localhost:8090/MySim/api/    
ServerName.com
标题添加访问控制允许源“*”
代理请求关闭
通融
代理通过/会话/http://localhost:8090/MySim/session/
ProxyPass/api/http://localhost:8090/MySim/api/
ProxyPassReverse/会话/http://localhost:8090/MySim/session/    
ProxyPassReverse/api/http://localhost:8090/MySim/api/    
这就是request.getserverName()总是打印本地主机的原因

现在我编辑了以下配置文件:

</VirtualHost>
        <VirtualHost *:80>
           ServerName s4.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://localhost:8090/MySim/session/
            ProxyPass /api/                 http://localhost:8090/MySim/api/


            ProxyPassReverse /session/      http://localhost:8090/MySim/session/    
            ProxyPassReverse /api/          http://localhost:8090/MySim/api/    


        </VirtualHost>
        <VirtualHost *:80>
           ServerName s5.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://localhost:8090/MySim/session/
            ProxyPass /api/                 http://localhost:8090/MySim/api/


            ProxyPassReverse /session/      http://localhost:8090/MySim/session/    
            ProxyPassReverse /api/          http://localhost:8090/MySim/api/    


        </VirtualHost>
</VirtualHost>
        <VirtualHost *:80>
           ServerName s4.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://s4.com:8090/MySim/session/
            ProxyPass /api/                 http://s4.com:8090/MySim/api/


            ProxyPassReverse /session/      http://s4.com:8090/MySim/session/   
            ProxyPassReverse /api/          http://s4.com:8090/MySim/api/   


        </VirtualHost>
        <VirtualHost *:80>
           ServerName s5.com


          Header add Access-Control-Allow-Origin "*"
            ProxyRequests Off
            <Proxy *>       
                Allow from all
            </Proxy>

            ProxyPass /session/             http://s5.com:8090/MySim/session/
            ProxyPass /api/                 http://s5.com:8090/MySim/api/


            ProxyPassReverse /session/      http://s5.com:8090/MySim/session/   
            ProxyPassReverse /api/          http://s5.com:8090/MySim/api/   


        </VirtualHost>

服务器名s4.com
标题添加访问控制允许源“*”
代理请求关闭
通融
代理通过/会话/http://s4.com:8090/MySim/session/
ProxyPass/api/http://s4.com:8090/MySim/api/
ProxyPassReverse/会话/http://s4.com:8090/MySim/session/   
ProxyPassReverse/api/http://s4.com:8090/MySim/api/   
ServerName.com
标题添加访问控制允许源“*”
代理请求关闭
通融
代理通过/会话/http://s5.com:8090/MySim/session/
ProxyPass/api/http://s5.com:8090/MySim/api/
ProxyPassReverse/会话/http://s5.com:8090/MySim/session/   
ProxyPassReverse/api/http://s5.com:8090/MySim/api/   

您的客户端浏览器连接到

http://s4.com/api/system
但是您的web应用程序会响应

http://localhost:8090/MySim/api/system
这是一个常见的用例:这意味着您有一个HTTP反向代理(常用的是apache、nginx或IIS)来执行URL重写。如果可能,您应该询问代理服务器管理员如何以及在何处找到原始请求的主机。如果这不是一个选项,您将不得不检查所有的头来尝试发现它。例如,Apache mod proxy通常使用头
X-Forwarded-Host

http://localhost:8090/MySim/api/system