如题,我只知道从request中可以获取,但是要从request中获取就必须要有请求。
我现在希望是在WEB应用服务器启动后,就把这个访问地址放到一个变量中(例如某个类的静态字段或者系统属性)。然后其他地方可以直接使用这个值。
String url = request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort()
+ request.getContextPath() + "/";

解决方案 »

  1.   

    可以在系统启动的时候启动一个Listener来完成设置
    <listener>
       <listener-class></listener-class>
    </listener>public void contextInitialized(ServletContextEvent event) {
        ServletContext context = event.getServletContext();
        //可以操作context
        //context.getContextPath();
    }
      

  2.   

    谢谢wgzhong你那样只能获取到应用的名字,不能获取到访问该应用的地址和端口
      

  3.   


    public class SysListener 
    extends HttpServlet 
    implements ServletContextListener { private Timer aTimer; 
    private ServletContext content; public SysListener() { 
    aTimer = new Timer(); 
    } public void contextInitialized(ServletContextEvent sce) { 
    this.content = sce.getServletContext(); 
    if(this.content != null){ 
    //这里可以取得WebApp运行的绝对路径 
    Constants.WEBAPPPATH = this.content.getRealPath("/"); 

    } public void contextDestroyed(ServletContextEvent sce) { 
    aTimer.cancel(); 
    } } 
    //web.xml 
    <listener> 
    <listener-class>com.pushi.emms.system.SysListener</listener-class> 
    </listener>
      

  4.   

    谢谢qianyecq你那样获取到的是应用的绝对路径,就是文件的物理路径。不是我想要的。可能我没表述清楚,我的意思是返回http://localhost:8080/web只样的结果,就是通过浏览器访问应用的路径 
      

  5.   

    Listener启动没办法获取request,所以不能通过request获取主机ip、端口等信息
    可以通过使用两种办法解决
    1。web.xml或属性文件中设置主机信息的变量,在系统启动的时候加载到静态变量中
    2。在访问应用的时候从静态变量中取,如果取到的为空就从request中获取并设置到静态变量中
      

  6.   

    to:wgzhong
    谢谢我也像你这样想过,如果要通过配置文件的话,那有很多方式都可以达到效果。
    我是希望不通过手动配置来写死这个地址。