首页 文章

如何在Tomcat 7.0中设置Web应用程序的上下文路径

提问于
浏览
153

我知道我可以将我的webapp(或它的WAR文件)重命名为 ROOT 但这是一种可怕的方法,恕我直言 . 现在我查看了tomcat doc并且它说

建议不要将元素直接放在server.xml文件中

所以我尝试了它建议的另一种方法 .

可以显式定义单个Context元素:在应用程序文件内的/META-INF/context.xml中的单个文件中 .

所以我使用以下代码创建了 /META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

但是在我重新启动服务器后部署它仍然无法在"/"加载上下文时,它仍然用 "/<WEB_APP_NAME>" 加载它

任何指针都有帮助 .

12 回答

  • 13

    对我来说,两个答案都有效

    • 在/ conf / Catalina / localhost /中添加名为ROOT.xml的文件

    <上下文
    的docBase = “/ TMP /战争/ hpong”
    路径=“”
    重新加载=“真”
    />

    • 在server.xml中添加条目

    <服务名称=“Catalina2”>
    <Connector port =“8070”protocol =“HTTP / 1.1”
    connectionTimeout = “20000”
    redirectPort =“8743”/>
    <Engine name =“Catalina2”defaultHost =“localhost”>
    <主机名=“localhost”
    unpackWARs =“true”autoDeploy =“true”>
    <Context path =“”docBase =“/ tmp / wars / hpong”reloadable =“true”>
    <WatchedResource> WEB-INF / web.xml中</ WatchedResource>
    </上下文>
    </主机>
    </发动机>
    </服务>

    注意:在上下文中声明docBase然后忽略主机上的appBase .

    • 但我更喜欢将我的战争名称转换为 ROOT.war 并将其置于webapps下 . 因此,现在来自其他战争(contextpaths)的无与伦比的url请求将进入这场战争 . 这是处理ROOT("/**")上下文路径的更好方法 .

    第二个选项是(双)加载来自Webapps文件夹的战争 . 此外,它只需要解压缩的war文件夹,这是一个令人头疼的问题 .

  • 0

    你能做的是以下几点;

    <catalina_home>/conf/Catalina/localhost/ 中添加名为 ROOT.xml 的文件

    此ROOT.xml将覆盖该引擎和主机(Catalina和localhost)的tomcat安装的根上下文的默认设置 .

    在ROOT.xml文件中输入以下内容;

    <Context 
      docBase="<yourApp>" 
      path="" 
      reloadable="true" 
    />
    

    在这里, <yourApp> 是你的应用程序的名称.. :)

    你去了,你的应用程序现在是默认应用程序,将显示在 http://localhost:8080

    但是,有一个副作用;您的应用程序将加载两次 . 一次为 localhost:8080 ,一次为 localhost:8080/yourApp . 要解决此问题,您可以将应用程序放在外部 <catalina_home>/webapps 并在ROOT.xml的docBase标记中使用相对或绝对路径 . 像这样的东西;

    <Context 
      docBase="/opt/mywebapps/<yourApp>" 
      path="" 
      reloadable="true" 
    />
    

    然后应该一切都好!

  • 217

    以下是适用于我的 the only 解决方案 . 将其添加到conf / server.xml中的Host节点

    <Context path="" docBase="yourAppContextName">
    
      <!-- Default set of monitored resources -->
      <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
    </Context>
    

    转到Tomcat server.xml文件并将路径设置为空白

  • 1

    这个小代码对我有用,使用虚拟主机

    <Host name="my.host.name" >
       <Context path="" docBase="/path/to/myapp.war"/>
    </Host>
    
  • 3

    在Tomcat 9.0中,我只需要在 server.xml 中更改以下内容

    <Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
    

    <Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
    
  • 3

    最快,可能是最好的解决方案是在 <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml 中有以下内容

    <Context 
      docBase="/your_webapp_location_directory" 
      path="" 
      reloadable="true" 
    />
    

    您的网络应用程序将在 http://<host>:<port>/ 上提供

  • 2

    我面临这个问题一个月,在server.xml中放置上下文标签是不安全的,它会影响为所有其他主机部署的上下文元素,对于大型应用程序,它需要连接错误也不是很好的隔离,例如你可以按文件夹名称domain2访问其他网站.com / domain1Folder !!还加载了两次数据库会话连接!另一种方式是将ROOT.xml文件放在具有完整路径的上下文标记中:

    <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />
    

    在conf / catalina / webappsfoldername中,将war文件部署为webappsfoldername中的ROOT.war,并指定主机等

    <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >
    
            <Logger className="org.apache.catalina.logger.FileLogger"
                   directory="logs"  prefix="localhost_log." suffix=".txt"
              timestamp="true"/>
    </Host>
    

    在这种方法中,同样类型的应用程序用户会话也没有很好的隔离!你可以在app1里面如果app1和app2相同你可以在服务器端会话登录后自动登录到app2吗?因此,您必须将用户会话保留在客户端缓存中,而不是使用jsessionid!我们可以从localhost更改引擎名称来解决它 . 但是让我们说与tomcat一起玩需要比与其他猫玩更多的时间!

  • -6

    <Context docBase="yourAppName" path="" reloadable="true">

    转到Tomcat server.xml文件并将路径设置为空白

  • 1

    Tomcat 8:经过多次搜索后,这只是工作代码:在server.xml中

    <!-- Set /apple as default path -->
        <Host name="localhost"  appBase="webapps"
             unpackWARs="true" autoDeploy="true">
         <Context path="" docBase="apple">
             <!-- Default set of monitored resources -->
             <WatchedResource>WEB-INF/web.xml</WatchedResource>
         </Context>
        </Host>
    

    重启Tomcat,确保当你访问127.0.0.1:8080时,它会在127.0.0.1:8080/apple中显示内容

    我的项目是由netbeans创建的java web应用程序,我在项目配置中设置上下文路径,没有其他的东西,甚至我把apple.war放在webapps文件夹中 .

  • 1

    不是建议更新服务器配置,如server.xml或ROOT.xml .

    您可以将context.xml配置文件放在Web应用程序META-INF目录下,并包含上下文路径设置 . 这将覆盖默认服务器设置?

    即:

    <Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
    
  • 0

    在Tomcat 8.X中,在server.xml中的tomcat主目录/ conf /文件夹下,您可以在 <Host> 标记下添加 <Context> 标记,如下所示 . 但您必须重新启动服务器才能生效

    <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    
         <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
      </Host>
    

    或者,如果您使用的是Tomcat 7.X,则可以在项目的WEB-INF文件夹中添加context.xml文件 . 我使用的文件的内容如图所示 . 它对我来说很好 . 在这种情况下,您不必重新启动服务器 .

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />
    
  • 1

    以下技巧对我有用 .

    1)从tomcat的server.xml文件(conf文件夹内)中注释/删除以下配置 .

    2)删除驻留在tomcat webapps文件夹中的现有ROOT文件夹(如果有) . 并将您的战争(例如:test.war)文件重命名为ROOT.war .

    请记住,在将war文件重命名为ROOT.war时,“ROOT”应该是大写的 .

    限制:您只能在一个tomcat实例中部署一个应用程序 .

相关问题