0

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

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

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

4

2 回答 2

0

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

  • 在所有 s:url-tags 中使用 includeContext="false"
  • 代替 s:form 标记,使用通常的表单,将操作设置为“actionname.action”,并为每个字段包含一个带有 tablerows () 的简单表格。您仍然可以使用 s:textfield 等。
  • 遗憾的是,HTTP 会话将不再工作,因为它们被设置为路径“/path”(ApplicationPath)。这是因为保存 JSESSIONID 的 cookie 被设置为 /path。这意味着您的访问者只会在他们位于http://www.domain.com/path/login.action时获得存储的会话变量,并且当他们被重定向回http://www.domain时这些变量将会丢失.com/interestingstuff.action ...我的解决方案是一个hack,需要通过JavaScript设置JSESSIONID cookie客户端,如下所述:Struts2:会话问题(在反向代理之后)

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

于 2010-08-03T13:34:58.313 回答
0

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

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

希望它可以帮助:)

于 2014-02-03T09:50:44.087 回答