【问题标题】:Setting Context-Root with Glassfish Application Server使用 Glassfish 应用程序服务器设置上下文根
【发布时间】:2017-05-25 21:47:47
【问题描述】:

我有一个带有 Glassfish 应用服务器的 EJB WEB 应用程序。 现在我想要像这样“/”的上下文根。 我当前的网址是“http://localhost:8080/Make” 但我想要这个:“http://localhost:8080”,没有“Make”,因为我的应用程序名称目前是。但是当我部署它并提示“http://localhost:8080”时,我从 glassfish 获得了“服务器正在运行”页面 所以我试图弄清楚我能做什么。我在 WEB-INF 文件夹中创建了 glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish   Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-  web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>/</context-root>
</glassfish-web-app>

什么都没有发生。比我在同一个文件夹中创建了一个 sun-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC 
 "-//Sun Microsystems, Inc.//DTD GlassFish Application Server 3.0 Servlet 3.0//EN"   
 "http://www.sun.com/software/appserver/dtds/sun-web-app_3_0-0.dtd">
<sun-web-app error-url="">
<context-root>/path/to/our/App</context-root>
</sun-web-app>

我还尝试使用 glassfish-application.xml 和 application.xml。 那么我该怎么做才能产生这种效果呢?

PS:这是我的 web.xml,我部署为 EAR 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>Make</display-name>
<mime-mapping>
<extension>xhtml</extension>
<mime-type>application/xml</mime-type>
</mime-mapping>
<welcome-file-list>
 <welcome-file>anmeldung.xhtml</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
 <error-page>
 <exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/anmeldung.xhtml</location>
</error-page>
<context-param>
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
<param-value>false</param-value>
 </context-param>
 <context-param>
<param-name>primefaces.THEME</param-name>
<param-value>bootstrap</param-value>
 </context-param>
 <context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>/WEB-INF/resources</param-value>
 </context-param>
 <context-param>
 <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
 </servlet-mapping>
 </web-app>

编辑:WEB-INF 文件夹中的 application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<application-name>Make</application-name>
<display-name>Make</display-name>
<module>
<web>
  <web-uri>Make.war</web-uri>
  <context-root>/</context-root>
</web>
 </module>
<module>
  <ejb>makeITown.jar</ejb>
</module>
<library-directory>lib</library-directory>
</application>

【问题讨论】:

  • 完全相同的设置在这里工作...您的pom.xml 中可能有maven-ear-plugin 吗?这可能会用生成的文件覆盖 application.xml。
  • 不要使用 Maven
  • 这真的很奇怪。我在这里有相同的设置,并用你的web.xml 进行了尝试,它可以工作....
  • 你的端口是什么?我选择了 4888 而不是 80*
  • 您在问题中的 URL 显示端口 8080 但这无关紧要。也许问题在于您如何部署应用程序。你使用 Ant 进行部署吗?

标签: glassfish


【解决方案1】:

我希望我没有迟到我一直在努力解决同样的问题。一段时间以来,无论我尝试什么,服务器都会吐出默认的your server is running page。 需要做些什么才能访问example.com 而不必输入example.com/example 其中示例是您的glassfish-web.xml 中定义的contextroot 是IP 表重新路由,可以按如下方式完成。

假设您在 ubuntu 服务器 20.04LTS 上以 root 身份执行以下命令

root@example.com:~$

root@example.com:~$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
root@example.com:~$ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
root@example.com:~$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
root@example.com:~$ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8181

你必须让它永久化:

root@example.com:~$ iptables-save -c > /etc/iptables.rules
root@example.com:~$ iptables-restore < /etc/iptables.rules

并在启动时调用,

root@example.com:~$ vi /etc/network/if-pre-up.d/iptablesload

将以下命令复制并粘贴到vi打开的iptablesload文件中 以上

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

别忘了让 iptablesload 可执行

root@example.com:~$ chmod +x /etc/network/if-pre-up.d/iptablesload! 

【讨论】:

    【解决方案2】:

    将上下文根设置为 / 不足以仅通过键入 http://yourdomain.org 来访问您的 Web 应用程序,因为 Glassfish 将显示 index.html` 中的“您的服务器正在运行”消息。

    让您的应用启动。将Configuration | server-config | Virtual Servers | server(在Web 控制台中)中的Default Web Module 下拉菜单设置为您的Web 应用程序的名称。

    【讨论】:

    • 我怎样才能在 payara micro 中达到同样的效果?
    • 是否可以为ejb module 定义上下文根?
    【解决方案3】:

    你发的glassfish-web.xml好像没问题。

    如果您将应用程序部署为 EAR,您可能需要这样的 application.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
      <application-name>something</application-name>
      <display-name>something</display-name>
      <module>
        <web>
          <web-uri>your_webapplication.war</web-uri>
          <context-root>/</context-root>
        </web>
      </module>
      <module>
        <ejb>your_ejb_services.jar</ejb>
      </module>
      <library-directory>lib</library-directory>
    </application>
    

    这只是一个模板示例。您还可以拥有多个 web-modules 和 ejb-modules。

    如果您通过 Glassfish 管理 UI 进行部署,您可以在部署时设置上下文根:

    如果您使用 asadmin 进行部署,您可以像这样设置上下文根:

    asadmin deploy --name something --contextroot / /path/of/your/war.war
    

    【讨论】:

    • 好的,那么我们需要有关您的设置的更多信息。如果有,请将您的 web.xml 添加到问题中。您部署为 EAR 还是 WAR?
    • @unwichtig - 你成就了我的一天 :) 问题是我没有在 .EAR 文件中创建 META-INF 文件夹。现在它起作用了! THX
    • 是否可以为ejb module 定义上下文根?
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多