在没有ContextPath的情况下部署Struts2应用程序

时间:2010-07-27 13:32:34

标签: java tags struts2 contextpath

我的本​​地tomcat上有一个在上下文路径“/ path”下运行的struts2应用程序没有问题。当我在网络服务器上部署它时(使用代理从“http://www.domain.com”重定向到“myserver:8080 / path /”)Struts会做各种奇怪的事情。

首先,它包含-tags中的上下文。这可以通过属性关闭。但遗憾的是,它还包含表单操作属性中的路径,因此登录表单指向“http://www.domain.com/path/login.action”而不是“http://www.domain.com/login.action”...

是否有可能以某种方式更改此处添加的默认上下文或关闭表单? (我想保留-tags,只是使用默认的HTML表单。)提前感谢!

2 个答案:

答案 0 :(得分:0)

我发现其他人也有问题,但框架制造商似乎并不认为这是一个问题。我的解决方案:

  • 在所有s:url-tags
  • 中使用includeContext =“false”
  • 而不是s:form标签,使用通常的表单,将操作设置为“actionname.action”,并为每个字段包含一个带有tablerows()的简单表。你仍然可以使用s:textfield等。
  • 遗憾的是,HTTP会话将不再起作用,因为它们被设置为路径“/ path”(ApplicationPath)。这是因为cookie将JSESSIONID保存为/ path。这意味着您的访问者只有在http://www.domain.com/path/login.action时才会存储会话变量,而当这些变量被重定向回http://www.domain.com/interestingstuff.action时会丢失...我的解决方案是一个需要设置JSESSIONID cookie来自JavaScript,如下所述:Struts2: Session Problem (after reverse proxy)

希望这有助于某人...如果您找到更好的解决方案,请告诉我。 : - )

答案 1 :(得分:0)

虽然我对这个问题的回答很晚,但是当我遇到同样的问题时,我最近到达了这个页面。

我正在处理的应用程序是附加上下文根viz。 'myContextRoot'到我在localhost上的url,它在那里工作得很好。例如,如上所述,行动'myAction'正在成为     http://localhost:8050/myContextRoot/myAction.action 但是当我将它部署在服务器上的那一刻,它就停止了工作,然后在寻找地狱之后,我找到了一个解决方案。我正在glassfish上部署一个EAR文件,我们有一个文件application.xml。在application.xml中,我有一个标签'context-root',其值为'myContextRoot',我将其更改为'/',之后我将我的网址设置为localhost和

希望它可能有所帮助:)