我正在使用JBoss 6.0。
我已在网络环境下部署了我的网络应用程序: myApp.ear :“ / test ”。 所以在browser-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>
我的问题是如何从“root context”自动指向用户到我的网络应用程序?
我的意思是如果用户输入“ http://localhost:8080/ ”,我希望加载我的网络应用程序的登录页面(而不是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状态404 - / test”。
如果我调用<jsp:forward page="/test/myLogin.jsp" />
,我仍会收到相同的404错误。
任何人都可以建议如何从root-context实现自动指向我的网络应用程序吗?
答案 0 :(得分:26)
您需要将index.html保留在默认部署文件夹中并将请求转发到您的Web模块。
例如,仅在index.html中保留以下行
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/test/"/>
答案 1 :(得分:4)
Senthil的答案很好用,但用户可以看到浏览器完成的实际重定向(页面闪烁)。重定向也可以通过JBoss服务器的重写[1,2]功能来完成,它支持具有30x代码的HTTP重定向(不闪烁)。
您可以直接将重写添加到您的应用中(web.xml
,jboss-web.xml
)并在rewrite.properties
中指定重定向规则 - 此处未显示。
或者您可以自行修改服务器配置,而无需触及原始应用程序。我发现这个解决方案很方便,因为应用程序保持不变。
用例:我们将此用于EJBCA部署(不是我们的应用),它将其上下文根设置为/ejbca
。我们希望保留打包的ant
脚本提供的默认部署过程,同时我们希望将/
的重定向添加到/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>