17

我正在使用 JBoss 6.0 。

我已经部署了我的 web 应用程序:myApp.ear在 web-context 下:“ /test ”。因此,如果我在浏览器 URL 中键入“ http://localhost:8080/test/ ”,我会得到我的登录页面 (myLogin.jsp)。

由于我的 WAR 存在于 EAR 文件中,因此我使用 web 模块内的context-root元素在application.xml文件中指定了上下文根 - 即

<module>
    <web>
        <web-uri>myWeb.war</web-uri>
        <context-root>/test</context-root>
    </web>
</module>

我的问题是如何将用户从“根上下文”自动引导到我的网络应用程序?

我的意思是如果用户键入“ http://localhost:8080/ ”,我希望我的 web 应用程序的登录页面能够加载(而不是 JBoss 的默认 ROOT.war 的 index.html 页面)。

我从{JBOSS}\server\default\deploy\ROOT.war中删除了现有的index.html并在那里创建了一个 login.jsp。现在我可以看到当我输入http://localhost:8080/时“login.jsp”被调用了。但我无法将用户请求重定向到我的网络应用程序的登录页面。

在那个 login.jsp 中,我尝试过: <jsp:forward page="/test" />,但我得到错误:“HTTP Status 404 - /test”。

如果我像我一样调用,<jsp:forward page="/test/myLogin.jsp" />我仍然会得到相同的 404 错误。

任何人都可以建议如何从根上下文自动定向到我的网络应用程序吗?

4

2 回答 2

31

您需要将 index.html 保留在默认部署文件夹中并将请求转发到您的 Web 模块。

例如,仅在 index.html 中保留以下行

<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/test/"/> 
于 2011-04-18T21:43:11.943 回答
7

Senthil的回答很好,但用户可以看到浏览器完成的实际重定向(页面闪烁)。重定向也可以通过 JBoss 服务器的 rewrite [ 1 , 2 ] 功能来完成,它支持使用 30x 代码(不闪烁)的 HTTP 重定向。

您可以直接将重写添加到您的应用程序 ( web.xml, jboss-web.xml) 并在此处指定重定向规则rewrite.properties- 此处未显示。

或者您可以在不触及原始应用程序的情况下自行修改服务器配置。我发现这个解决方案很方便,因为应用程序保持不变。

用例:我们将它用于EJBCA部署(不是我们的应用程序),它将其上下文根设置为/ejbca. 我们希望保留打包ant脚本提供的默认部署过程,同时我们希望添加重定向 from /to/ejbca作为某种默认值,以方便用户使用。如果用户想要更改它,只需修改即可完成,standalone.xml无需重新部署整个应用程序。

编辑standalone.xml

<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
    <virtual-server name="default-host" enable-welcome-root="true">
        <alias name="localhost"/>
        <rewrite pattern="^/$" substitution="/test" flags="L,QSA,R" />
    </virtual-server>
</subsystem>
于 2016-10-13T07:08:49.983 回答